Partager via


Site Templates ausblenden

Ich wurde oft gefragt, ob man gewisse Site Templates auf der Erstellungsseite ausblenden kann. Dies ist Grundsätzlich möglich und lässt sich schnell und einfach realisieren.

Wer auf Internet-Suchplattformen nach Lösungen sucht, findet rasch viele Anleitungen welche das modifizieren der WEBTEMP.XML Datei voraussetzt. Oftmals wird aber nicht geschrieben, dass dies auf allen Servern durchgeführt werden muss. Zudem ist das modifizieren von "Out of the Box" Dateien nicht empfohlen! Hierzu möchte ich gerne auf einen bekannten Artikel verweisen: "Supported and unsupported scenarios"

Dabei geht es viel einfacher und effizienter ohne lästigen IISReset. Heute möchte ich speziell auf die Variante via PowerShell eingehen. In folgendem Beispiel haben wir die Anforderung, dass keine Meeting Workspaces direkt in SharePoint erstellt werden dürfen.

Dazu benötigen wir nur ein paar Zeilen PowerShell:

$site = Get-SPSite https://contoso/sites/team1 $web = $site.RootWeb  

# Erstellen einer neuen Collection; Wichtig: Muss als Strong Name geladen werden! $templates = New-Object "System.Collections.ObjectModel.Collection``1[[Microsoft.SharePoint.SPWebTemplate, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]]"

 # Existierende Templates ohne Meeting Workspaces (MPS#) in die neue Collection laden Get-SPWebTemplate | ForEach-Object{ if ( $_.Name.ToLower() -notmatch "mps") {      $templates.Add($_)}}

# Für die entsprechende Site (hier die Root Site der Site Collection) # die Verfügbaren Templates setzen. Bei Mehrsprachigkeit nicht nur für 1033!$web.SetAvailableWebTemplates($templates, 1033) $web.Update()

 

Als Ergebnis sieht dann der Benutzer folgendes:

Das ganze lässt sich wie folgt rückgängig machen:

 $web.AllowAllWebTemplates() $web.Update()

 

Diese Lösung lässt sich ebenso einfach und eleganter in ein Site Feature einbauen, welches dann wiederum via Solution direkt auf der Farm oder modifiziert für Sandboxed Solutions ausgebreitet werden kann. Leider steht die Methode SPWeb.SetAvailableWebTemplates in Sandboxed Solutions nicht zur Verfügung, was kleinere Workarounds benötigt.

Comments

  • Anonymous
    January 06, 2012
    Vielen Dank für den super Tipp! >Leider steht die Methode SPWeb.SetAvailableWebTemplates in Sandboxed Solutions nicht zur Verfügung, was kleinere Workarounds benötigt. Welche Workaround wären denn notwendig, um die Funktionalität in eine Sandbox Solution zu packen?

  • Anonymous
    January 08, 2012
    @Benjamin Leider konnte ich meine Theorie noch nicht weiter verfolgen, wobei dies aus meiner Sicht mit folgender Variante möglich sein sollte:

  • Einsatz eines Sandbox Proxy