Freigeben über


Verwenden von Windows PowerShell für die Verwaltung von SharePoint Online

 

Letztes Änderungsdatum des Themas: 2015-03-09

Zusammenfassung: Verwenden Sie Windows PowerShell zum Verwalten von Office 365 mithilfe von Windows PowerShell-Cmdlets, -Skripts und -Stapelverarbeitungsvorgängen.

SharePoint Online kann über SharePoint Online-Cmdlets verwaltet werden. (Siehe? Nicht alle Softwarenamen sind unverständlich und unklar.) In der aktuellen Fassung ist die SharePoint Online-Implementierung von Windows PowerShell eingeschränkt: es gibt nur circa 30 Cmdlets für Office 365-Administratoren. Derzeit können Sie Windows PowerShell nicht verwenden, um beispielsweise OneDrive Pro, SharePoint Online-Suchvorgänge, den SharePoint Online-Terminologiespeicher, Benutzerprofile usw. zu verwalten. Sollte Windows PowerShell deswegen nicht zum Verwalten von SharePoint Online verwendet werden? Lassen Sie uns nichts überstürzen. Tatsächlich gint es einige wichtige Teile von SharePoint Online, die nicht nur mit Windows PowerShell, sondern auch mit Windows PowerShell erstaunlich gut verwaltet werden können.

Verwenden von Windows PowerShell für die Verwaltung von SharePoint Online

In diesem Abschnitt werden folgende Themen behandelt:

  • Arbeiten mit SharePoint Online-Websites

  • Arbeiten mit SharePoint Online-Benutzern

  • Arbeiten mit SharePoint Online-Websitegruppen

  • Ein kurzer Hinweis zum Cmdlet "ForEach-Object"

Weitere Informationen zur Verwendung von Windows PowerShell für die Verwaltung von SharePoint Online finden Sie in der SharePoint Online-Cmdlet-Referenz, eine Reihe von Hilfethemen, die hier verfügbar sind.

Und lesen Sie auch diese beiden Artikel, die eine Fülle von nützlichen Windows PowerShell-Befehlen für SharePoint Online bieten:

Arbeiten mit SharePoint Online-Websites

Ob wir Ihnen ein Beispiel zu einem für SharePoint Online relevanten Bereich anführen können, der mit Windows PowerShell verwaltet werden kann? Natürlich können wir das. Ein Bereich, bei dem Windows PowerShell wirklich überzeugt, ist die Identifizierung einer Teilgruppe Ihrer SharePoint Online-Websites. In größeren Organisationen ist es nicht ungewöhnlich, Bewertungen zu Websites zu führen, zu Hunderten oder sogar Tausenden von Websites. Und ist etwas falsch daran? Natürlich nicht. Aber angenommen Sie haben Hunderte von Websites und möchten wissen, wie viele dieser Websites Wikis sind; anders ausgedrückt, Sie möchten wissen, wie viele dieser Seiten mit einer Wiki-Unternehmensvorlage (einer Vorlage, die offiziell die Bezeichnung ENTERWIKI#0 hat) entworfen werden. Können Sie diese Informationen im SharePoint Online Admin Center finden? Wir sagen nicht, dass Sie diese Informationen dort nicht finden werden, es ist jedoch nicht einfach. Und es ist definitiv nicht so leicht, wie das Ausführen dieses einen Windows PowerShell-Befehls:

Get-SPOSite | Where-Object {$_.Vorlage - Eq "ENTERWIKI #0"}

Anders gesagt, wir verwenden das Cmdlet Get-SPOSite zum Zurückgeben von Informationen über alle Websites und verwenden anschließend das Where-Object-Cmdlet, um die Websites auszusortieren, bei denen zu verwenden, bei denen die Vorlageneigenschaft ENTERWIKI#0 entspricht.

Hinweis

Woher wir wussten, dass die Wiki-Unternehmensvorlage offiziell als ENTERWIKI#0 bezeichnet wird? Das ist einfach: wir haben gerade diesen Befehl ausgeführt:
Get-SPOWebTemplate

Oder vielleicht möchten Sie eine Liste aller Seiten abrufen, bei denen das Speicherkontingent größer als 1000 MB oder kleiner als 250 MB ist. Können Sie eine solche Liste mit Windows PowerShell schnell und leicht erstellen? Natürlich ist das möglich:

Get-SPOSite | Where-Object {$_.StorageQuota -gt 1000 -or $_.StorageQuota -lt 250}

Diese Abfrage ist ein wenig komplizierter als die, die wir bisher gesehen haben, aber nachdem Sie die Fachsprache kennen, sollten Sie kein Problem damit haben, die Funktionsweise zu verstehen. In diesem Beispiel suchen wir nach Websites, die 1 von 2 Kriterien erfüllen. Die Seite hat entweder: 1) ein StorageQuota größer (-gt) 1000 MB; oder (-or), 2) ein StorageQuota kleiner (-lt) 250 MB. Angenommen wir haben 4 Websites:

Website StorageQuota

Standort A

180

Site B

700

Standort C

300

Website D

1500

Mit diesen Beispieldaten wird Website A zurückgegeben, da sie ein StorageQuota kleiner 250 hat. Website D wird auch zurückgegeben, da sie ein StorageQuota größer 1000 hat. Die Websites B und C erfüllen die Kriterien nicht ,sie werden also nicht zurückgegeben.

Hier ist ein weiteres Beispiel, nur so zum Spaß. Angenommen Sie möchten eine Liste aller Websites abrufen, deren Besitzer nicht der Administrator ist; also alle Websites, bei denen der Besitzer jemand anders als z. B. admin@litwareinc.onmicrosoft.com ist. Dieser Befehl ist so leicht zu schreiben, es ist fast peinlich:

Get-SPOSite | Where-Object {$_.Owner -ne "admin@litwareinc.onmicrosoft.com"}

Aber nur weil es einfach ist, heißt das nicht, dass es nicht nützlich ist oder?

Arbeiten mit SharePoint Online-Benutzern

Windows PowerShell ist ein äußerst nützliches Tool zum Arbeiten mit SharePoint Online-Websitebenutzern. Sie können Windows PowerShell und das Cmdlet Get-SPOUser verwenden, um eine Liste aller Benutzer zurückzugeben, denen Zugriff auf eine Website gewährt wurde. Das ist einfach:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance"

Sie müssen nur "Get-SPOUser" und dann die URL aufrufen, für die Sie sich interessieren.

Wenn Sie nur die Benutzer (und nicht die Gruppen) zurückgeben möchten, die Zugriff auf eine Website haben, können Sie diesen Befehl verwenden:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsGroup -eq $False}

Das ist auch einfach: Wir fragen nur nach den Websitebenutzern, bei denen die Eigenschaft "IsGroup" auf "False" festgelegt ist. (In Windows PowerShell verwenden Sie "$True" und "$False", wenn Sie Befehle schreiben, anstatt der älteren Werte "True" und "False".)

Genauso einfach ist es, nur die Benutzer zurückzugeben, die Websiteadministratoren sind, d. h. Benutzer, bei denen die Eigenschaft "IsSiteAdmin" auf "True" festgelegt ist:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsSiteAdmin -eq $True}

Aber das bezieht sich nur auf eine Website. Der Vorteil von Windows PowerShell zeigt sich häufig, wenn Sie mit mehreren Objekten arbeiten müssen, wie z. B. mehreren Websites. So ist es z. B. hilfreich, eine Liste aller Benutzer zu haben, die Zugriff auf eine bestimmte Website haben. Wie sieht es aber mit dem Gegenteil aus: Wie wäre es mit einer Liste aller Website, auf die ein einzelner Benutzer Zugriff hat? Ist das mit Windows PowerShell möglich? Natürlich können Sie das. Hier sehen Sie ein einfaches kleines Skript (zugegebenermaßen einfach für diejenigen, die Erfahrung mit Windows PowerShell haben), welches die Namen aller Websites zurückgibt, auf die ein bestimmter Benutzer (in diesem Beispiel Ken Myer) Zugriff hat:

$x = (Get-SPOSite).Url

foreach ($y in $x)
    {
        $z = $Null
        $z = Get-SpoUser -Site $y | Where-Object {$_.DisplayName -eq "Ken Myer"}
        if ($z -ne $Null) {$y}
    }

Hinweis

Wie verwenden Sie ein Skript in Windows PowerShell? So: Kopieren Sie den oben stehenden Code in Notepad (oder einen andere Text-Editor), und speichern Sie die Datei dann mit einer .ps1-Dateierweiterung (z. B. C:\Scripts\SitesAUserCanAccess.ps1). Um das Skript auszuführen, verwenden Sie Windows PowerShell, um eine Verbindung zu SharePoint Online herzustellen. Geben Sie dann an der Windows PowerShell-Eingabeaufforderung den Pfad zur .ps1-Datei ein, und drücken Sie die EINGABETASTE:
C:\Scripts\SitesAUserCanAccess.ps1

Vielleicht interessieren Sie sich auch für eine Liste aller Ihrer Websites und der Administratoren für jede dieser Websites. Diese Informationen können mithilfe eines einzelnen Befehls zurückgegeben werden:

Get-SPOSite | ForEach-Object {Write-Host $_.Url; Get-SPOUser -Site $_.Url | Where-Object {$_.IsSiteAdmin -eq $True}}

Die Ausgabe sollte so oder ähnlich aussehen:

https://litwareinc.sharepoint.com/sites/communities
MOD Administrator  admin@litwareinc.com {Communities Members, Comm...}
Sara Davis  sarad@litwareinc.com {Communities Members, Communities...}

https://litwareinc.sharepoint.com/sites/finance
MOD Administrator admin@litwareinc.com {Excel Services Viewers, Hi...}

https://litwareinc.sharepoint.com/sites/hr
MOD Administrator  admin@litwareinc.com   {Contoso Beta Members, C...}

Das ist offensichtlich keine besonders schöne Ausgabe, aber was zählt, ist ja der Inhalt. Und wenn Sie einmal mehr Erfahrung mit Windows PowerShell haben, wissen Sie, wie Sie diese Ausgabe nach Ihren Wünschen anpassen.

Das Beste ist, dass Windows PowerShell nicht nur eine Möglichkeit darstellt, etwas abzurufen, sondern auch, etwas zu konfigurieren. Sie verfügen über Hunderte von Websites und möchten Ken Myer auf jeder Website als Administrator festlegen? Sie müssten dazu einfach nur fragen:

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Nett, nicht wahr?

Arbeiten mit SharePoint Online-Websitegruppen

Wir haben auch die Websitegruppen nicht vergessen. Windows PowerShell bietet in der Tat eine hervorragende Möglichkeit, Ihre SharePoint-Websitegruppen zu verwalten. Im SharePoint Online Admin Center finden Sie einfache Methoden zum Verwalten von Websitegruppe, der Weg dorthin kann allerdings etwas mühsam sein. Nehmen wir beispielsweise an, Sie möchten sich die Gruppen und Gruppenmitglieder für die Website https://litwareinc.com/sites/finance ansehen. Dazu müssen Sie folgendermaßen vorgehen:

  1. Klicken Sie im SharePoint Online Admin Center auf der Registerkarte Websitesammlungen auf den Namen der Website.

  2. Klicken Sie im Dialogfeld Websitesammlungs-Eigenschaften auf den Link zur Website https://litwareinc.com/sites/finance.

  3. Klicken Sie auf dieser Seite auf das Symbol Einstellungen (oben rechts auf der Seite) und dann auf Websiteeinstellungen:

    Option "SharePoint Online-Websiteeinstellungen".

  4. Klicken Sie auf der Seite mit den Websiteeinstellungen auf Websites und Berechtigungen.

Wiederholen Sie dieses Verfahren für die nächste gewünschte Website.

Gibt es auch eine andere Möglichkeit, eine Liste aller Gruppen und der entsprechenden Benutzer für eine bestimmte Website zu erhalten? Es gibt zumindest eine andere Möglichkeit:

$x = Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance"

foreach ($y in $x)
    {
        Write-Host $y.Title -ForegroundColor "Yellow"
        Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance" -Group $y.Title | Select-Object -ExpandProperty Users
        Write-Host
    }

Das vorhergehende Skript ist zugegebenermaßen etwas komplizierter als die meisten Befehle, die wir Ihnen bis jetzt gezeigt haben. Und etwas mühsam ist es auch: Sie müssen den Code kopieren, ihn in Notepad (oder einen anderen Texteditor) einfügen, die Datei mit einer PS1-Dateierweiterung speichern (zum Beispiel C:\Scripts\SiteGroupsAndUsers.ps1) und anschließend das Skript in Windows PowerShell ausführen. Das ist zwar wie gesagt etwas mühsam, letzten Endes müssen Sie aber lediglich den vollständigen Pfad zur PS1-Datei eingeben, um das Skript auszuführen:

C:\Scripts\SiteGroupsAndUsers.ps1

Das Ganze ist also etwas anstrengend, ja. Aber schauen Sie, was der Lohn für diesen geringen Arbeitsaufwand ist:

Websitegruppen und Websitegruppenmitglieder.

Hier sehen Sie alle Gruppen, die für die Website https://litwareinc.com/sites/finance erstellt wurden, sowie sämtliche Benutzer, die diesen Gruppen zugewiesen wurden. (Und nur um ein Bisschen anzugeben haben wir die Gruppennamen in Gelb gekennzeichnet, damit Sie die Gruppen und ihre Mitgliedslisten auseinanderhalten können.)

Und wenn Sie das schon toll fanden, warten Sie nur, bis Sie das Skript sehen:

$x = Get-SPOSite

foreach ($y in $x)
    {
        Write-Host $y.Url -ForegroundColor "Yellow"
        $z = Get-SPOSiteGroup -Site $y.Url
        foreach ($a in $z)
            {
                 $b = Get-SPOSiteGroup -Site $y.Url -Group $a.Title 
                 Write-Host $b.Title -ForegroundColor "Cyan"
                 $b | Select-Object -ExpandProperty Users
                 Write-Host
            }
    }

In diesem Skript sind alle Gruppen und alle Gruppenmitgliedschaften für all Ihre SharePoint Online-Websites aufgeführt – jede einzelne. Probieren Sie's aus, und sehen Sie selbst.

Verstehen Sie jetzt, warum es sich anbietet, Windows PowerShell für die Verwaltung von SharePoint Online zu verwenden?

Ein kurzer Hinweis zum Cmdlet "ForEach-Object"

Im Abschnitt Arbeiten mit SharePoint Online-Benutzern haben Sie möglicherweise bemerkt, dass wir die Websiteinformationen mithilfe von Pipelining an das "ForEach-Object"-Cmdlet umgeleitet haben:

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Das wirft eine interessante Frage auf: Warum haben wir das gemacht? Im Grunde genommen haben wir beim Arbeiten mit den Azure Active Directory-Cmdlets Informationen mithilfe von Pipelining direkt vom Get-MsolUser-Cmdlet an das Set-MsolUser-Cmdlet umgeleitet:

Get-MsolUser | Set-MsolUser -UsageLocation "FR"

Warum haben wir also nicht etwas ähnliches mit unserem SharePoint Online-Befehl gemacht:

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Der Hauptgrund dafür war, dass es nicht funktionieren wird. Zusammen mit dem Set-SPOUser-Cmdlet müssen Sie explizit den Websiteparameter gefolgt vom Websitenamen miteinbeziehen. Beispiel:

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/communities" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Das heißt, wenn wir versuchen, Informationen mithilfe von Pipelining direkt an das Set-SPOUser-Cmdlet umzuleiten, berücksichtigt das Cmdlet nicht all unsere Websites und ernennt Ken Myer nicht zum Administrator für jede einzelne dieser Websites. Stattdessen fordert es uns auf, die Website-URL einzugeben:

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True
cmdlet Set-SPOUser at command pipeline position 2
Supply values for the following parameters:
Site: 

Das heißt, wir müssen die Websiteinformationen stattdessen mithilfe von Pipelining an das ForEach-Object-Cmdlet umleiten. Das ForEach-Object-Cmdlet nimmt jedes einzelne Element (jede Website), dass an es weitergegeben wurde, und macht damit anschließend das, wozu wir es angewiesen haben. In diesem Fall weisen wir es an, das Set-SPOUser-Cmdlet dazu zu verwenden, Ken Myer zum Administrator der Website zu ernennen:

Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Die Syntax $_.Url repräsentiert die URL der Website. Der Wert $_. gibt an, dass wir Informationen verwenden, die von einem anderen Cmdlet mithilfe von Pipelining an das ForEach-Object-Cmdlet umgeleitet wurden.

Verwirrt? Hier ist ein kurzes Beispiel. Angenommen wir haben drei Websites mit den folgenden URLs:

Wenn wir diese Informationen mithilfe von Pipelining an das ForEach-Object-Cmdlet umleiten, nimmt das Cmdlet das erste Element in der Sammlung (site1) und führt das Set-SPOUser-Cmdlet mithilfe der Website-URL aus. Das heißt, dieser Befehl wird ausgeführt:

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/site1" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Sobald der Befehl ausgeführt wurde, nimmt es die zweite Website (site2) und führt das Set-SPOUser-Cmdlet mit der entsprechenden Website aus:

Set-SPOUser –Site "https://litwareinc.sharepoint.com/sites/site1" –LoginName "kenmyer@litwareinc.com" –IsSiteCollectionAdmin $True

Wie Sie sehen können, verwendet es nun die URL der zweiten Website in der Sammlung. Am Ende ist das ForEach-Object-Cmdlet durch alle Websites in der Sammlung gelaufen und hat Ken Myer zum Administrator der einzelnen Websites ernannt.

Weitere Informationen dazu finden Sie in diesem Artikel. Das ForEach-Object ist dabei natürlich ein praktisches kleines Cmdlet, das man kennen sollte. Beim Versuch Informationen mithilfe von Pipelining von einem an ein anderes Cmdlet umzuleiten, erhalten Sie beispielsweise folgende Fehlermeldung:

The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

Das geschah, da nicht alle Cmdlets Eingaben über Pipelining angenommen haben. Wie umgehen Sie dieses Problem? Richtig: verwenden Sie das ForEach-Object-Cmdlet.

Siehe auch

Beste Möglichkeiten zum Verwalten von Office 365 mit der Windows PowerShell