Objektorientierung in der Powershell
27. August 2010Das Umgehen mit der Objektorientierung erweist sich für viele Administratoren als ein Problem, wenn sie die Powershell verwenden und verstehen wollen. Wer noch keine Erfahrungen mit objektorientierten Programmiersprachen wie C++, C# oder Java gemacht hat, der kann sich damit unter Umständen schwer tun. Doch es handelt sich bei der Objektorientierung um eine der wichtigsten und kritischsten Aspekte der Powershell. Daher ist ein adäquates Verständnis dafür dringend nötig.
Um das Arbeiten mit Objekten in diesem Kontext zu verstehen, sollte man die höheren Schwierigkeitsgrade – wie etwa das Konzept der Methoden – zunächst außen vor lassen. Üblicherweise versuchen viele Lehrmittel zur Objektorientierung eine Analogie zu alltäglichen Gegenständen, wie etwa Autos oder Fahrräder, herzustellen. Wenn nun ein Auto ein Objekt ist, dann ist seine Farbe, sein Hersteller oder seine Antriebsart eine Property des Objekts.
Kommen dann die Methoden ins Spiel, handelt es sich um Aktionen wie das Beschleunigen das Bremsen, das Abbiegen (nach links und/oder nach rechts). Doch für Leute ohne Programmierkenntnisse eignet sich dieses Vorgehen eher nicht so gut. Zudem darf man dann auch nicht zu schnell in die Programmierkonzepte einsteigen. Das ist für das Arbeiten mit der Powershell auch gar nicht zwingend nötig.
Die Charakteristik der Objektorientierung lässt sich aber direkter an der Powershell herausarbeiten. Dazu kann man sich die Ausgabe des Cmdlets (Programms) „Get-Process“ ansehen. Dabei handelt es sich um eine Tabelle. Sie besitzt sechs oder sieben Spalten, in denen verschiedene Informationen angezeigt werden. Doch diese Informationen sind nicht alles, was das Betriebssystem über Prozesse weiß. Windows besitzt viel mehr Informationen – nur das alles würde sich kaum auf den Bildschirm darstellen lassen – ganz zu schweigen von der Übersichtlichkeit, die dann verloren geht.
Man kann sich vorstellen, dass Get-Process eine extrem umfangreiche Tabelle erzeugt, in der alles vorliegt, was das Betriebssystem über den Prozess weiß. Doch dann werden die Spalten daraus erzeugt, aber nur mit so vielen Informationen, dass es in das Bildschirmformat passt. Dazu gibt es von Microsoft eine Konfigurationsdatei, in der festgelegt ist, welche Spalten in der Tabelle standardmäßig angezeigt werden sollen.
Doch man kann vorgeben – sprich filtern – was angezeigt werden soll. Dazu muss man nur eine der Spalten namentlich angeben. Hierzu ein Beispiel:
Get-Process | Where { $_.Name -ne ’svchost‘ }
Dieser Filtervorgang wird die Tabellen-Reihe darstellen, in denen die Spalten “Name” nicht die Zeichenkette "svchost" aufweist.
Bei den beiden Zeichen $_ handelt es sich um einen Platzhalter, der für die Tabellen-Reihen steht. Damit wird vom Prinzip her gesagt: „Gib mir die Spalte Name aus jeder Reihe“. Die Angabe von $_ funktioniert allerdings nur in einigen Situationen.
Man kann aber auch die Reihen neu sortieren – ebenfalls über die Angabe eines Spalten-Namens. Zudem lassen sich auch verschiedene Spalten auswählen, wenn man das haben will:
Get-Process | Sort VM | Select Name,ID,VM
Ein eleganter Trick in diesem Zusammenhang ist, die Shell anzuweisen, dass sie Keine Tabelle verwendet und dafür aber diese extreme umfangreiche Tabelle zu einer Liste umformatiert. Auf diese Weise lassen sich alle Spalten – die nun als Einträge in der Liste vorliegen – auf dem Bildschirm darstellen.
Es gibt auch eine Möglichkeit, herauszufinden, welche zusätzlichen Tabellenspalten für einen zur Verfügung stehen:
Get-Process | Format-List *
Wenn diese Aussagen sich beim Leser einigermaßen gesetzt haben, kann man daran gehen, die Analogien herzustellen und so die Objektorientierung zu verdeutlichen: Zwischen der Tabelle der Informationen und dem Begriff Objekt besteht eine Korrelation:
Ein „Objekt“ ist dabei nichts anderes als eine Reihe in der Tabelle. Eine Property entspricht dann einer Tabellenspalte. Damit sollte dann ein Verstehen der Verknüpfung zwischen diesen beiden Welten geglückt sein – und das auf einer weitaus IT-näheren Ebene als das bei einer Analogie mit Autos oder Fahrrädern der Fall ist.