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.