Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

In wenigen Schritten zur SharePoint Site Collection-Vorlage

Wie las­sen sich SharePoint Site Collections aus einer Vorlage erstel­len und damit "klo­nen"? Ob neue Teamräume, Projekträume oder Company Sites - es gibt zahl­rei­che Anwendungsfälle für die Verwendung von Vorlagen. Auch in mei­nen Projekten gibt es diese Anforderung seit vie­len Jahren.

PnP Logo

Die gute Nachricht: es ist alles recht ein­fach. Dank der PnP Community gibt es ein sehr ange­neh­mes Set an PowerShell-Befehlen, mit denen wir in Nullkommanichts Vorlagen erstel­len. Wie das funk­tio­niert zeige ich im Folgenden.

PowerShell-Modul instal­lie­ren

Um mit der Erstellung von Site Collection-Vorlagen los­zu­le­gen instal­lie­ren wir ein PowerShell-Modul. Das geschieht auf Windows 10 via PowerShell:

Install-Module SharePointPnPPowerShellOnline

Dieser Befehl instal­liert den für SharePoint Online benö­tig­ten, größ­ten Cmdlet-Umfang. Sollte es bei der Installation zu Problemen kom­men, dann kann alter­na­tiv eine Setup-Datei hier her­un­ter­ge­la­den werden.

Die Cmdlets funk­tio­nie­ren teil­weise sowohl in SharePoint Online als auch on-premises. Allerdings wird es on-premises zu Fehlern kom­men, wenn Funktionen nicht unter­stützt wer­den. Das merkt man dann recht schnell.

Für SharePoint 2013, 2016 und 2019 ste­hen auch zuge­schnit­tene Module zur Verfügung. Diese sind genau auf den Funktionsumfang der jewei­li­gen SharePoint-Version redu­ziert. Weitere Informationen und Anleitungen dazu gibt es hier: PnP PowerShell over­view.

Die Installation des Moduls muss mit Administratorrechten erfol­gen, da es glo­bal im System instal­liert wird. Um die Installation ohne Administratorrechte durch­zu­füh­ren kann fol­gen­der Befehl ver­wen­det werden:

Install-Module SharePointPnPPowerShellOnline -Scope CurrentUser

Der Scope-Parameter instal­liert das Modul nur für den aktu­el­len Nutzer. Nach der Installation sind wir bereit für die Erstellung der ers­ten Vorlage.

Site Collection als Vorlage exportieren

Mit nur zwei Befehlen expor­tie­ren wir eine Site Collection als Vorlage:

Connect-PnPOnline -Url https://tenant.sharepoint.com/sites/template
Get-PnPProvisioningTemplate -Handlers All -Out "template.xml" -PersistBrandingFiles

Mittels Connect-PnPOnline (auch on-premises!) stel­len wir die Verbindung zur Site Collection her. Je nach Konfiguration der Farm (bspw. akti­vier­ter Multifaktorauthentifizierung) müs­sen wei­tere Parameter ergänzt wer­den. Aber ich würde es erst mal so pro­bie­ren, wahr­schein­lich klappt das schon.

Der Befehl Get-PnPProvisioningTemplate schließ­lich expor­tiert die Site Collection in die Datei "template.xml". Der Parameter -PersistBrandingFiles spei­chert in Wikiseiten ver­wen­dete Bilddateien in einem Unterordner.

Das war es auch schon. Die Datei "template.xml" ent­hält nun eine Beschreibung der Site Collection - also wel­che Listen, Inhaltstypen, Berechtigungen, Felder, Navigationelemente, Konfigurationen etc. die Site Collection ausmachen.

Im nächs­ten Schritt erzeu­gen wir eine neue Site Collection auf Basis die­ser Vorlage.

Site Collection auf Basis der Vorlage erstellen

Wir erzeu­gen neue Site Collections auf Basis einer Vorlage in zwei Stufen, indem wir

  1. eine neue Site Collection kom­plett im Standard anlegen
  2. die Vorlage auf diese Site Collection anwenden

Das errei­chen wir mit fol­gen­den Befehlen:

Connect-PnPOnline -Url https://tenant.sharepoint.com
New-PnPSite -Type CommunicationSite -Title "Demo Site" -Url https://tenant.sharepoint.com/sites/neu
Connect-PnPOnline -Url https://tenant.sharepoint.com/sites/neu
Apply-PnPProvisioningTemplate -Path "template.xml" -Handlers All -ClearNavigation

Die Zeilen 1 und 2 erzeu­gen eine neue Communication Site "Demo Site". Ob das wirk­lich per PowerShell geschieht hängt vom Anwendungsfall ab. Die Site Collection könnte natür­lich auch anders ange­legt werden.

Die Zeilen 3 und 4 ver­bin­den sich mit der neu erzeug­ten Site Collection und wen­den die im vori­gen Abschnitt expor­tierte Vorlage dar­auf an. Der Parameter -ClearNavigation ver­hin­dert, dass dop­pelte Menüeinträge erzeugt werden.

Fertig.

Einschränkungen bei der Erstellung von Vorlagen

Es gibt Einschränkungen des PnP Provisioning Frameworks. Diese kön­nen zu über­ra­schen­den Showstoppern wer­den, wenn man sie nicht kennt.

Die Vorlage ent­hält keine

  • Listenelemente
  • Dateien aus Dokumentenbibliotheken
  • Modern Pages, mit Ausnahme der Homepage der Site*

Es gibt sepa­rate Cmdlets und Projekte mit denen sich diese Einschränkungen umge­hen lassen.

Das Cmdlet Add-PnPDataRowsToProvisioningTemplate bspw. erlaubt es, Listenelemente in die Vorlagendatei zu expor­tie­ren. Für den Export  der Modern Pages habe ich ein Ticket auf Github offen, mal schauen. In der Zwischenzeit kön­nen wir uns mit einem Extensibility Handler behel­fen, der aller­dings als Quellcode zur Verfügung steht und sepa­rat gebaut wer­den muss. Ich denke, das wird Thema eines wei­te­ren Blogposts werden.

*Update 07/2019: Es gibt jetzt einen Parameter -IncludeAllClientSidePages, der wohl alle Modern Pages in das Template exportiert.

Zusammenfassung

Mit dem PnP Provisioning Framework las­sen sich unkom­pli­ziert Vorlagen von Site Collections erstel­len. Diese Vorlagen sind XML-Dateien, in denen (ange­passte) Strukturen und Konfigurationen der Site Collections beschrie­ben sind. Vorlagen wer­den auf Standard-Site Collections ange­wen­det; das Ergebnis ist eine der Vorlage ähn­li­che Site Collection. Inhalte wie Listenelemente, Dateien und Modern Pages sind nicht stan­dard­mä­ßig Teil der Vorlage.

Happy Templating!

25. April 2019

Pin It on Pinterest