Kolumne: SharePoint ganz praktisch

SharePoint Server und PowerShell
Keine Kommentare

Die Kombination aus SharePoint und PowerShell beziehungsweise die Integration des SharePoint API in die PowerShell ermöglicht die Automation vieler Prozesse. Somit können Administratoren viele Aufgaben skriptbasiert und allgemein einfacher lösen. Aber nicht nur SharePoint-Administratoren profitieren hiervon, auch Entwickler und Anwender können die SharePoint PowerShell effektiv nutzen.

SharePoint hat sich mittlerweile zu einem sehr komplexen und umfangreichen Produkt entwickelt. In vielen Unternehmen gehört es inzwischen zum Standardrepertoire. Im Gegensatz zu anderen Softwareanwendungen aus der Microsoft Office Suite wie MS Word oder Excel ist SharePoint eine serverseitige Anwendung, die im Hintergrund Daten in Datenbanken ablegt. Zudem stellt SharePoint zusätzliche Dienste bereit und steuert unter anderem Zugriffsrechte auf seine Inhalte. Aus diesem Grund muss eine SharePoint-Farm von Administratoren verwaltet werden. Dabei oft anfallende Aufgaben wie das Anlegen einer neuen SharePoint Site sind oft gleichartig und fallen je nach Unternehmen teils regelmäßig an. Diese Aufgaben können manuell oder automatisiert durchgeführt werden. In früheren Versionen von windowsbasierten Betriebssystemen gab es für die Automation nur die klassische Eingabeaufforderung. Mithilfe von Batchdateien (*.bat) konnten Skripte erstellt werden. Der Funktionsumfang war allerdings relativ beschränkt. Auch die Erstellung solcher Skripte war fehleranfällig.

BASTA! 2020

Entity Framework Core 5.0: Das ist neu

mit Dr. Holger Schwichtenberg (www.IT-Visions.de/5Minds IT-Solutions)

Memory Ownership in C# und Rust

mit Rainer Stropek (timecockpit.com)

Softwarearchitektur nach COVID-19

mit Oliver Sturm (DevExpress)

Mit der PowerShell hat Microsoft nun eine neue interaktive Befehlszeilenshell eingeführt. Die Microsoft PowerShell ist eine Befehlsshell und Skriptsprache, die einem Administrator den Vollzugriff auf entsprechende Anwendungsprogrammierschnittstellen (Application Programming Interfaces, APIs) bietet. Die neue Shell weist daher weitaus mehr Funktionen und Möglichkeiten auf und erlaubt es, auch komplexe Vorgänge zu automatisieren. Der erweiterte Funktionsumfang wird durch die verfügbaren Cmdlets (ausgesprochen „Command-lets“) definiert. Im Kern arbeitet die PowerShell objektorientiert. Dadurch stehen ihr beispielsweise alle COM-Objekte und das gesamte .NET Framework zur Verfügung. Auch für den SharePoint-Server stehen Cmdlets zu Verfügung. Das versetzt Administratoren in die Lage, direkt mit einer SharePoint-Farm zu kommunizieren, um Webanwendungen, Websitesammlungen, Websites, Listen und viele andere Elemente zu bearbeiten. Darüber hinaus können Administratoren Skripts für Cmdlets schreiben. Die PowerShell kann von autorisierten Administratoren verwendet werden, um eine Vielzahl von Aufgaben in lokalen Umgebungen oder auch in SharePoint Online auszuführen.

Somit können von SharePoint-Administratoren auch erweiterte Aufgaben durchgeführt werden, die sich nicht nur auf typische Administrationsaufgaben beziehen müssen. So können beispielsweise Daten aus Listen exportiert, im Batch aktualisiert und gemäß entsprechender Filterkriterien aus Listen gelöscht werden. In den nachfolgenden Abschnitten wird die Verwendung der SharePoint-Powershell-Kommandos anhand von Beispielen näher erläutert.

PowerShell aufrufen und auf SharePoint zugreifen

Abb. 1: SharePoint PowerShell starten

Abb. 1: SharePoint PowerShell starten

Zu Beginn wird die Verwendung der SharePoint-PowerShell-Kommandos anhand von Zugriffen auf eine lokale SharePoint-Farm demonstriert. Im weiteren Verlauf wird dann auch der Zugriff auf SharePoint Online gezeigt. Im ersten Schritt wird eine Verbindung mit einem SharePoint Web (SPWeb) hergestellt und es werden einige Informationen ausgelesen, um zu verifizieren, dass der Zugriff funktioniert. Zudem muss im Vorfeld sichergestellt werden, dass auch die SharePoint PowerShell Cmdlets geladen und verfügbar sind. Wurde explizit die SharePoint PowerShell gestartet, wie in Abbildung 1 zu sehen ist, sollte das bereits der Fall sein.

Innerhalb einer Windows PowerShell kann ein nachträgliches Laden der SharePoint Cmdlets notwendig werden. Am einfachsten kann mit dem Kommando Get-Command -Module Microsoft.SharePoint.PowerShell die aktuelle Verfügbarkeit der Cmdlets geprüft werden. Wird nach dem Ausführen des Kommandos eine Liste ausgegeben, sind die Befehle geladen und einsatzbereit. Wird kein Cmdlet gefunden, müssen die SharePoint PowerShell Cmdlets via Add-PSSnapin Microsoft.SharePoint.PowerShell zunächst in die PowerShell geladen werden. Danach stehen die Kommandos bereit. Um einen Überblick über die aktuelle SharePoint-Farm zu erhalten, kann mit dem Kommando get-spsite eine Liste der Sites abgerufen werden. Abbildung 2 zeigt ein Beispiel.

Abb. 2: Auflistung der verfügbaren SharePoint Sites

Abb. 2: Auflistung der verfügbaren SharePoint Sites

Es lassen sich aber nicht nur flache Daten abrufen, sondern es können auch einzelne Details der SharePoint-Elemente – wie SPWeb, SPSite usw. – abgerufen werden. Dazu zeigen Listing 1 ein Beispiel und Abbildung 3 das Ergebnis der Ausgabe. Wie zu erkennen ist, kann analog zum SharePoint-Objektmodell (API) auf die einzelnen Eigenschaften zugegriffen werden. Anhand dieser kleinen Beispiele kann man schon die Möglichkeiten erahnen, die sich mit der SharePoint PowerShell eröffnen. Typischerweise wird auch nicht nur ein PowerShell Cmdlet ausgeführt, sondern mehrere in Kombination.

Get-SPSite "http://hallo" | Select-Object url, owner, 
@{Expression={$_.Usage.Storage}}, @{Expression={$_.Audit.AuditFlags}}, readonly, 
LastContentModifiedDate, @{Express={$_.QuotaStorageMaximumLevel}}
Abb. 3: Ausgabe einiger Site-Eigenschaften

Abb. 3: Ausgabe einiger Site-Eigenschaften

PowerShell-Editor

In den ersten Beispielen haben wir jeweils ein Kommando ausgeführt. Oft müssen aber Objekte abgerufen und an weitere Kommandos übergeben werden. Somit bestehen Skripte typischerweise aus mehreren Kommandos. Prinzipiell können die Kommandos hintereinander über die PowerShell-Konsole eingegeben werden, das ist jedoch sehr aufwendig und im Fehlerfall müssen alle zuvor getätigten Aufrufe wiederholt werden. Aus diesem Grund ist der Einsatz eines Editors an dieser Stelle sinnvoll. Unter Windows kann dazu die sogenannte Windows PowerShell ISE verwendet werden. Die Abkürzung ISE steht für Integrated Scripting Environment. Die Windows PowerShell ISE ist eine Hostanwendung für Windows PowerShell. Mit der ISE steht eine Windows-basierte grafische Benutzeroberfläche bereit, über die Befehle und Skripte erstellt, getestet und geprüft werden können. Die ISE ermöglicht mehrzeilige Bearbeitung von Kommandos, Vervollständigung durch das Drücken von TAB (IntelliSense), Syntaxfarben, selektive Ausführung und eine kontextbezogene Hilfe. Zu beachten ist, dass sich die ISE im Wartungsmodus befindet und in Zukunft nicht erweitert wird, zudem wird PowerShell v6 nicht unterstützt. Dennoch eignet sich derzeit die ISE für das Skripten recht gut, da die Anwendung direkt zur Verfügung steht. Gestartet wird die ISE direkt aus dem Windows-Startmenü, wie in Abbildung 4 zu sehen ist. Alternativ kann auch Visual Studio Code für das Erstellen von Skripten verwendet werden.

Abb. 4: Starten der Windows PowerShell ISE

Abb. 4: Starten der Windows PowerShell ISE

Nachdem der Editor gestartet wurde, kann direkt mit der Erstellung eines Skripts begonnen werden. Als Beispiel werden die Benutzer einer SharePoint Site (SPSite) ausgelesen und ausgegeben. Listing 2 zeigt dazu den notwendigen Skriptcode. Da die ISE nicht direkt die SharePoint Cmdlets lädt, müssen diese hier nun explizit geladen werden. In Listing 2 lautet daher der erste Befehl Add-PSSnapin, worüber die zusätzlichen SharePoint Cmdlets geladen werden. Anschließend werden ein SPSite-Objekt und über die Eigenschaft sitegroups die SharePoint-Gruppen aus der obersten Site geladen. Danach werden aus jeder gefundenen Gruppe die Benutzer ausgegeben. Hervorzuheben ist hier noch die korrekte Speicherbereinigung durch den Dispose-Aufruf auf dem SPSite-Objekt. Das ist wichtig, da ansonsten Objekte im Speicher bleiben, die teilweise noch Verbindungen zu SharePoint besitzen. Innerhalb des ISE-Editors kann dann das Skript direkt über das Pfeilsymbol (Run Script) ausgeführt werden, wie auch in Abbildung 5 zu sehen ist. Wie man erkennen kann, gibt es zwei Symbole für die Ausführung. Das rechte Pfeilsymbol ermöglicht die Ausführung nur des selektierten Skriptcodes. Damit können Ausschnitte eines Skripts selektiv ausgeführt werden. Dieses Verhalten ist vergleichbar mit der partiellen Ausführung von MS-SQL-Skripten im SQL Management Studio.

Abb. 5: Ausführen eines Skripts im ISE-Editor

Abb. 5: Ausführen eines Skripts im ISE-Editor

Add-PSSnapin Microsoft.SharePoint.PowerShell
$site = Get-SPSite http://hallo/
$groups = $site.RootWeb.sitegroups
foreach ($grp in $groups) {"Group: " + $grp.name; foreach ($user in $grp.users) {"  User: " + $user.name} }
$site.Dispose()

Als letztes Beispiel sucht das Skript aus Listing 3 nach Dateien, die von einem bestimmten Benutzer erstellt wurden. Diese Anforderung gibt es oft, wenn ein Mitarbeiter das Unternehmen verlässt. Das Skript öffnet zunächst das SPWeb an der Adresse https://company.net/sites/departments. Bei der ersten Abfrage via Select werden alle Listen mit erweiterten Eigenschaften, die nicht versteckt und vom Typ SPDocumentLibrary sind, geladen. Dazu werden die Eigenschaft Hidden und der Listentyp ausgewertet. Die gefundenen Listen dienen als Eingabe für eine weitere Abfrage, die aus allen Listen die Dokumente filtert, die von einem bestimmten Benutzer erstellt wurden. Anhand dieses Beispiels wird die Verwendung des Pipe-Symbols (|) sehr deutlich. Die einzelnen Abfrageergebnisse können so zur weiteren Verarbeitung weitergereicht werden. Eine Liste aller verfügbaren SharePoint-Server-Kommandos ist auf den SharePoint-Online-PowerShell-Seiten in den Microsoft-Dokumenten abrufbar.

Get-SPWeb https://company.net/sites/departments |
  Select -ExpandProperty Lists |
  Where { $_.GetType().Name -eq "SPDocumentLibrary" -and -not $_.Hidden } |
  Select -ExpandProperty Items |
  Where { $_["Created By"] -like "*system*" } |
  Select Name, url, {$_["Created By"]}

SharePoint Online

Die Cmdlets für SharePoint können nicht nur für lokale SharePoint-Farm-Installationen verwendet werden, auch für SharePoint Online gibt es entsprechende Cmdlets. Mit ihnen können auch für SharePoint Online viele Aufgaben per Skripting automatisiert werden. In diesem Fall wird die normale PowerShell unter Windows 10 verwendet. Auch hier muss im Vorfeld geprüft werden, ob die Cmdlets für SharePoint bereits zur Verfügung stehen. Das kann mit dem folgenden Kommando geprüft werden: Get-Command -Module Microsoft.Online.SharePoint.PowerShell. Die Abfrage ist vergleichbar mit der bereits zuvor verwendeten Prüfung für die lokalen SharePoint Cmdlets, nur dass hier noch zusätzlich nach .Online gefiltert wird. Liefert das Kommando keine Liste zurück, müssen die Cmdlets noch über das Kommando Install-Module Microsoft.Online.SharePoint.PowerShell installiert werden (Abb. 6). Da nun die Kommandos lokal gegen eine SharePoint-Online-Instanz ausgeführt werden, ist im ersten Schritt eine Anmeldung in SharePoint notwendig. Ist diese erfolgreich ausgeführt worden, kann per Cmdlets auf SharePoint-Daten und -Informationen zugegriffen werden.

Für die Anmeldung existieren unterschiedliche Möglichkeiten. Mit dem Cmdlet Connect-SPOService -url https://[PORTALNAME]-admin.sharepoint.com ist eine interaktive Anmeldung möglich. Nach dem Absetzen des Kommandos wird ein Anmeldedialog geladen und der Authentifizierungsprozess kann gestartet werden. Diese Anmeldevariante eignet sich für das direkte Ausführen von Skripten. Sollen jedoch zum Beispiel über Nacht Skripte automatisiert und autonom ausgeführt werden, ist eine interaktive Anmeldung nicht möglich. In einem solchen Fall kann die Log-in-Variante aus Listing 4 verwendet werden. Hier ist allerdings zu beachten, dass sie ein Sicherheitsrisiko darstellt, da hier das Passwort direkt in Klartext hinterlegt wird. Es sollte nach Möglichkeit verschlüsselt abgelegt werden. Nachdem eine Verbindung aufgebaut wurde, können die SharePoint-Online-Kommandos – wie zum Beispiel Get-SPOSite – verwendet werden. Die Verwendung der SharePoint-Online-Kommandos ist syntaktisch vergleichbar mit den Cmdlets für den Zugriff auf eine lokale SharePoint-Farm. Eine Liste aller verfügbaren SharePoint-Online-Kommandos ist auf den Microsoft-Seiten bei den SharePoint-Online-PowerShell-Dokumenten abrufbar.

Abb. 6: Installieren der SharePoint Online Cmdlets

Abb. 6: Installieren der SharePoint Online Cmdlets

$login = NAME-LOGIN;
$pwd = PASSWORT;
$pwd = ConvertTo-SecureString $pwd -AsPlainText -Force; $credentials = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $login,$pwd;
Connect-SPOService -url https://[PORTALNAME]-admin.sharepoint.com -Credential $credentials;

Zusammenfassung

Die Fallbeispiele haben veranschaulicht, dass die PowerShell in Kombination mit den SharePoint Cmdlets sehr mächtig ist. Viele Vorgänge können mit ihrer Hilfe leicht automatisiert werden. In der Vergangenheit wurden solche Prozesse oft durch eigene Programme realisiert, die das SharePoint-Objektmodell verwendet haben. Diese Programme wurden dann entweder direkt von der Konsole aus aufgerufen oder als native SharePoint-Kommandos über die stsadm-Schnittstelle verfügbar gemacht. Das ist jetzt nicht mehr notwendig. Die meisten Aufgaben können direkt mit entsprechenden SharePoint-PowerShell-Skripten realisiert werden.

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. Außerdem ist der Windows Developer weiterhin als Print-Magazin im Abonnement erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -