Cmd-Nachfolger: Scripting mit der Windows PowerShell

Zuweisung an Variablen

Die Bildschirmausgabe mag auf den ersten Blick verwundern, denn zunächst liefert die eingegebene Kommandozeile nur Objekte zurück. Sie könnten also das Ergebnis des Beispielausdrucks jederzeit in eine weitere Pipe stecken und die Objekte weiter bearbeiten. Kommt das Resultat aber am Ende einer Pipe an und handelt es sich dabei um den Bildschirm, dann (und erst dann) wandelt die PowerShell die Objekte in ihre passende Textdarstellung um und gibt sie aus. Ein anderes mögliches Ende der Pipeline könnte auch Excel sein. In diesem Fall würden die Daten stets mit dem richtigen Datentyp in den Zellen des Spreadsheets landen.

Das Ergebnis eines Ausdrucks können Sie auch jederzeit einer Objektvariablen zuweisen. Da get-process eine Objektliste zurückliefert, stellt diese Variable dann auch ein Listenobjekt dar.

MSH:> $a=get-process | where { $_.handlecount –gt 100 }

Die Variable $a enthält daraufhin das Ergebnis des Befehls und ist vom Typ her ein Listenobjekt. Mit $a.length kann man sich beispielsweise die Anzahl der Objekte in der Liste anzeigen lassen und mit $a[5] etwas auf das sechste Element der Liste zugreifen (Index startet bei 0). Liefert $a.getlenght etwa den Wert 35, so gibt es eben genau so viele Prozesse mit mehr als 100 Handles.

Gibt man den Inhalt mit der einfachen Eingabe von $a am Bildschirm aus, stellt die Shell jedoch mehr als 35 Zeilen dar, da beispielsweise über den Spalten noch ein Spaltenkopf ausgegeben wird. Hier zeigt sich erneut, dass durch den Objektansatz viele Fehler vermieden werden. Denn ermittelt man unter Linux die Anzahl der Prozesse, indem man beispielsweise mit ps –A | wc –l die Zeilen des zurückgegebenen Textes zählt, ist das Ergebnis falsch, da die Zeilen mit den Spaltenbeschriftungen und eventuelle Zusammenfassungen mitzählen.

Abgesehen von der deutlich mächtigeren objektorientierten Arbeitsweise der PowerShell beherrscht die neue Kommandozeile aber auch die textbasierte Verarbeitung, die herkömmliche Shells anzubieten haben. So ist es möglich, auch „alte“ Commandline-Programme wie zum Beispiel ipconfig von der PowerShell aus aufzurufen und dessen textbasierte Ergebnisse weiterzuverarbeiten.