Cmd-Nachfolger: Scripting mit der Windows PowerShell

Objektorientierte Shell vs. Textlisten

Die PowerShell arbeitet vollständig objektorientiert. Anders als bei üblichen Shells handelt es sich bei den Ergebnissen jedes Kommandos der PowerShell also nicht um einen Text, sondern um ein Objekt (dazu gleich mehr). Ähnlich wie bei bisher bekannten Shells gibt es allerdings eine Pipeline, in der die Resultate der einzelnen Befehle weitergereicht und weiterverarbeitet werden können. Nur sind die Eingabewerte sowie die Resultate eben Objekte und keine Texte.

Die Objekte der PowerShell unterscheiden sich nicht von denen eines C++- oder C#-Programms. Sie sind eine Zusammenfassung aus Eigenschaften (Properties) und Methoden. Im folgenden Beispiel wollen wir dies anhand des Prozessobjekts, mit dem Windows alle laufenden Anwendungen verwaltet, näher erläutern. Das Prozessobjekt enthält dabei unter anderem eine Eigenschaft für die Prozess-ID und eine für den Namen des Prozesses. Außerdem verfügt das Objekt über verschiedene Methoden, zum Beispiel die Methode Kill(), mit der der Prozess beendet werden kann.

Das objektorientierte Konzept der PowerShell macht das von Unix-Shells bekannte dauernde Parsen von textbasierten Informationen mit all seinen Fehlermöglichkeiten überflüssig. Zur Verdeutlichung folgendes Beispiel: Angenommen, Sie hätten gerne eine Liste aller Prozesse, die mehr als 100 Handles verbrauchen. Mit einer traditionellen Linux-Shell würden Sie dazu das Kommando zur Anzeige aller Prozesse (ps -A) aufrufen. Das Kommando liefert dann eine Textliste zurück. In jeder Zeile stehen dabei Informationen über einen Prozess, durch Leerzeichen voneinander getrennt. Diese Zeilen würde man dann mit einem der gängigen Tools parsen, die Prozess-ID herausschneiden und über diese mit einem weiteren Programm die Handle-Anzahl abfragen. Das textbasierte Ergebnis dieser Abfrage würde man erneut parsen, die relevanten Zeilen herausfiltern und den relevanten Text schließlich anzeigen.

Je nachdem, wie gut das Ausschneiden und Filtern der Information aus den Textlisten gelöst ist, klappt dieser Ansatz mehr oder weniger zuverlässig. Ändert sich zum Beispiel die Breite einer Spalte der Ausgabe durch zu lange Prozessnamen, kann es schon schief gehen.