Erstellen von SharePoint Online Sitecollections und Sites mit PowerShell

Setzen Sie SharePoint Online ein?

Wenn Ja: Wie erstellen Sie neue Sitecollections und Sites? Von Hand? Bald nicht mehr!

Wenn Nein: Probieren Sie es doch mal aus :-)

Mittels PowerShell lässt sich das Management von neuen und bestehenden SharePoint Online Sitecollections und Sites automatisieren. In diesem Blogbeitrag geht es hauptsächlich darum, neue zu erstellen.

Voraussetzungen:

Es gibt zwei Arten, auf die man mit Powershell auf SharePoint Online zugreifen kann.

SharePoint Online Management Shell

Mittels der SharePoint Online Management Shell können einige (wenn auch nicht sonderlich viele) Tasks in SharePoint Online automatisiert werden. Dazu gehört die Erstellung von Sitecollections – aber nicht die Erstellung von Sites. Das Tool kann hier von Microsoft heruntergeladen werden: https://www.microsoft.com/en-us/download/details.aspx?id=35588

Client Side Object Model (CSOM)

Das Client Side Object Model erlaubt einen vielfältigeren Zugriff auf SharePoint Online – ist allerdings auch etwas komplexer als die SharePoint Online Management Shell.
Die für die Verwendung des CSOM notwendigen DLL’s sind hier zum Download (SharePoint Online Client Components SDK ) verfügbar: http://www.microsoft.com/en-us/download/details.aspx?id=42038

Um mit der SharePoint Online Management Shell neue SiteCollections zu erstellen, kann ich folgendermassen vorgehen:

PowerShell-Modul importieren

Import-Module "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.PowerShell.psd1"

Variablen vorbereiten

$username = 'rfaeh@demo.onmicrosoft.com'
$passwordString = "kA>Fj34sd!JjKdfld#mR"
$password = ConvertTo-SecureString $passwordString -AsPlainText -Force
$url = "https://demo-admin.sharepoint.com/"

SPOnline Services verbinden

$credential = New-Object System.Management.Automation.PsCredential($username, $password) 
Connect-SPOService -Url $url -Credential $credential 

Eine neue Site konfigurieren & erstellen

$siteCollectionUrl = "https://evodaydemo.sharepoint.com/sites/TestSiteCollection"
$owner = $username
$storageQuota = 100
$resourceQuota = 30
$localeID = 1033

New-SPOSite -Url $siteCollectionUrl -Owner $owner -StorageQuota $storageQuota -LocaleId $localeID -ResourceQuota $resourceQuota

Verbindung beenden

Disconnect-SPOService

Um mit dem Client Side Object Model neue Sites zu erstellen, kann ich folgende Befehle verwenden:

Achtung Wenn folgende Fehlermeldung beim Aufruf einer Variable mit Inhalt erscheinen sollte, ist das ein normales Verhalten:

**
format-default : The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.
**

Der Inhalt kann dann mittels einer

Foreach($a in $b){
    $a
} 

Schleife ausgegeben werden.

Die DLL’s des CSOM hinzufügen und Variablen setzen

Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Publishing.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

$username = 'rfaeh@demo.onmicrosoft.com'

$passwordString = "kAF!JjK?m@_mR"

$password = ConvertTo-SecureString $passwordString -AsPlainText -Force

$site = "https://mydemo.sharepoint.com"

Bis hier so weit so gut. Nun kommt der etwas speziellere Teil. Da das CSOM eben auf der Clientseite ist, muss ich abwechslungsweise Daten von SharePoint Online abholen, damit arbeiten, wieder Daten abholen, damit arbeiten und schliesslich meine fertig erstellte (noch lokale) Konfiguration hochladen, damit diese ausgeführt werden kann.

Das erste was ich brauche, ist der Kontext. Um genau zu sein: der Kontext der SiteCollection oder Site, in der ich arbeiten möchte, damit SharePoint weiss, worauf ich mich beziehe. Ich definiere ein neues Objekt vom Type ClientContext und übergebe dem Objekt meine SiteUrl und meine Credentials. Danach führe ich die erste Abfrage mit ExecuteQuery() aus und hole mit von SharePoint Online die Kontextinformationen.

#Context
$context = New-Object Microsoft.SharePoint.Client.ClientContext($site)
$creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username,$password)
$context.Credentials = $creds
$context.ExecuteQuery()

Wenn ich den Kontext habe, muss ich festlegen, was ich darum tun will. Da es um die Erstellung einer neuen SubSite geht, kreieren wir uns ein neues Objekt vom Typ „WebCreationInformation“. Dieses neue Objekt wird dann wie zuvor beim Kontext parametrisiert – ich lege fest, welches Template verwendet werden und wie die neue Site heissen soll.

#Create SubSite
$wci = New-Object Microsoft.SharePoint.Client.WebCreationInformation

#TeamSite Template
$wci.WebTemplate = "STS#0"

$wci.Description = "SubSite"
$wci.Title = "SubSite"
$wci.Url = "SubSite"
$wci.Language = "1033"

Danach nehme ich meinen Kontext und füge ihm das WebCreation Objekt hinzu – und sende wieder alle Infos an SharePoint Online. Nun wird anhand meiner Definition eine neue Subsite erstellt.

$subWeb = $context.Web.Webs.Add($wci)
$context.ExecuteQuery()

Will ich zum Beispiel gleich darunter noch eine weitere Subsite anlegen, ist auch das kein Problem:

#Create SubSubSite
$wci = New-Object Microsoft.SharePoint.Client.WebCreationInformation
$wci.WebTemplate = "STS#0"
$wci.Description = "SubSubSite"
$wci.Title = "SubSubSite"
$wci.Url = "SubSite/SubSubSite"
$wci.Language = "1033"
$subWeb = $context.Web.Webs.Add($wci)
$context.ExecuteQuery()

Hinterlassen Sie eine Antwort