Windows PowerShell: Beispiele

Die Windows PowerShell ist eine neue Umgebung für die Erstellung und Ausführung von Skripts, die auf dem Microsoft .NET Framework basiert. Die Art des Scripting unterscheidet sich deutlich von VBScript. Der Artikel stellt einige Beispiele für Skripts vor, die in der Windows PowerShell ablauffähig sind.

Der Einstieg in die Entwicklung von Skripts mit der Windows PowerShell ist relativ komplex, wenn man bisher überwiegend mit VBScript gearbeitet hat. Wer dagegen Erfahrung mit einigen der im Linux- und Unix-Umfeld häufiger verwendeten Ansätzen für das Scripting hat, wird sich teilweise etwas leichter tun, wobei auch hier die konsequente Objektorientierung der PowerShell und die Integration mit dem Microsoft .NET Framework einiges an Lernaufwand verursachen können.

Nachfolgend stellen wir Ihnen einfache Beispiele für grundlegende Aufgaben vor, die mit der Windows PowerShell gelöst werden können. In den folgenden Ausgaben von Expert’s inside Windows NT/2000 werden wir in loser Folge schrittweise komplexere Beispiele erläutern.

Eine der Aufgaben, die man bei Skripts sehr häufig zu lösen hat, ist die Eingabe von Informationen. Bei der PowerShell kann man das an der Befehlszeile mit einer einfachen Anweisung wie

$Name = Read-Host "Bitte Name eingeben"

lösen. Damit wird eine Eingabeaufforderung für den Namen angezeigt. Das Ergebnis wird in eine Variable geschrieben. Um ein Kennwort einzugeben, würde man dagegen eher mit

$Password = Read-Host –assecurestring "Bitte Kennwort eingeben"

arbeiten. Der Unterschied liegt darin, dass in diesem Fall die Eingabe durch Sternchen überschrieben und nicht im Klartext angezeigt wird.

Die Ausgabe ist insgesamt einfacher, weil die so genannten Cmdlets, die die einzelnen Funktionen
bereitstellen, meist bereits eine formatierte Ausgabe liefern. Das gilt beispielsweise für die Ausgabe von get-service, das eine Liste der Dienste auf einem System in tabellarischer Fom zurückliefert (Bild 1).

Bild 1: Die Ausgabe von get-service in tabellarischer Form.
Bild 1: Die Ausgabe von get-service in tabellarischer Form.

Durch die Piping-Funktionen der PowerShell lassen sich die Ergebnisse aber relativ leicht anpassen. Mit get-service | format-list wird die Ausgabe in ein Listenformat umgesetzt. Dieses Listenformat zeigt für jeden Dienst die Eigenschaft als Liste an, wobei Eigenschaft und Wert jeweils durch einen Doppelpunkt voneinander getrennt sind.

Ein anderer Ansatz für die Formatierung ist die Ausgabe in einer mehrspaltigen Liste (Bild 2):

Bild 2: Die Ausgabe einer zweispaltigen Liste.
Bild 2: Die Ausgabe einer zweispaltigen Liste.

get-service | format-wide –autosize

Hier könnte mit –columns 3 auch eine dreispaltige Ausgabe veranlasst werden. Die Option –autosize sorgt für eine automatische Anpassung der Spaltenbreite für eine optimale Darstellung der Ausgabe.

Interessant sind auch die Funktionen für die Auswahl und für die Gruppierung von Informationen. So wird bei der folgenden Ausgabe von Diensten

get-service | where-object { $_.status –eq "running“

die aktuell auch laufen, mit where-object die Abfrage durchgeführt. In dieser wird auf das aktuelle Objekt mit $_ Bezug genommen. Anschließend wird die Eigenschaft, in diesem Fall status, ausgewählt. Die Anweisung –eq ist der Operator und steht für „equal“. Anschließend wird der Vergleichswert angegeben. Man könnte das Ergebnis wiederum mehrspaltig anzeigen lassen:

get-service | where-object { $_.status –eq "running“
} | format-wide –autosize

Dabei wird auch deutlich, dass man Ergebnisse eines Verarbeitungsschritts durch Piping in mehreren aufeinander folgenden weiteren Schritten verarbeiten kann.

Ein interessanter Ansatz ist auch die einfache Gruppierung:

get-service | group-object status

Die Ausgabe zählt auf, wie viele Dienste sich in welchem Status befinden, und zeigt danach eine Gruppe an, in der die verschiedenen Dienste aufgezählt werden. Letzteres ist allerdings etwas unübersichtlich.

Die verschiedenen Beispiele zeigen, wie man mit sehr kleinen Befehlen bereits sehr viel Wirkung erzielen kann. Schon die bisher verfügbaren Cmdlets sind eine gute Grundlage – und man kann davon ausgehen, dass die Anzahl der Cmdlets mit der wachsenden Zahl von PowerShell-Benutzern schnell steigen wird.