Im Jahr 2003 zeigte Microsoft das erste mal wohin es mit dem bis dato auf jeder Windows Version vorhandenen Kommandozeileninterpreter gehen sollte. Die wesentlichen Unterschiede liegen nicht in der farblichen Darstellung der Oberfläche, der Wechsel von schwarz hin zu blau kann nach belieben angepasst werden.
Das Ziel dem Administrator ein Tool zur Verfügung zu stellen mit dem er auf übersichtliche Art und Weise seine Systeme verwalten kann, klang Hoffnungsvoll wenn man die bisherigen Komponenten betrachtet, stellte sich etwas Ernüchterung ein. Auf den ersten Blick bleibt doch alles beim alten, ähnlich wie bei bisher bekannten Shells gibt es eine Pipeline, in der die Resultate der einzelnen Befehle ausgegeben werden. So lassen sich alle bekannten cmd Befehle absetzen.
Objekte
Der große Mehrwert der PowerShell basiert auf der vollständigen Objektorientierung! Die Resultate der Pipeline sind Objekte die Sinnvoll weitergereicht und weiterverarbeitet werden können. Die Objekte unterscheiden sich hinsichtlich ihrer Eigenschaften nicht von denen eines C# oder C++ Programms. Sie besitzen Eigenschaften, Methoden, Aliase, Script-Methoden und Script-Eigenschaften. Nachfolgend soll anhand der Abfrage der IP Adresse verdeutlicht werden nach welchem Prinzip die PowerShell arbeitet. Das Resultat des ipconfig Befehls liefert Informationen in Textform.
Diverse vorhandene Adapter, wobei diese Anzahl noch gering erscheint im Vergleich zu einigen anderen Systemen. Es werden alle gefundenen LAN-, Ethernet- und Tunnel-Adapter angezeigt. Die Abfrage der IP in der PowerShell erfolgt mittels des cmdlets Get-NetIPAddress. Ebenfalls werden einige Informationen über die Adapter geliefert, diese Informationen behalten nicht alle Eigenschaften des jeweiligen Adapters. Da es sich bei den gelieferten Informationen über die Adapter um Objekte handelt, können diese jedoch vielfältig dargestellt und weiterverarbeitet werden. Genau an diesem Punkt bietet die Powershell aufgrund ihrer Objektorientierung Möglichkeiten gezielt gewünschte Informationen abzufragen. Jeder Adapter ist ein Objekt mit bestimmten Eigenschaften und Methoden, um eine Zusammenfassung der verfügbaren Eigenschaften und Methoden eines Objektes zu erhalten hilft einem das cmdlet get-member.
Das cmdlet Get-Member liefert eine vollständige Liste aller verfügbaren Alias-Eigenschaften, Methoden, Eigenschaften, Script-Methoden und Script-Eigenschaften für das cmdlet
Get-NetIPAddress | Get-Member
Eigenschaften
Um gezielt nach bestimmten Adaptern zu suchen werden beim Aufruf des cmdlets die gewünschten Eigenschaften des Adapters übergeben. Angenommen es sollen ausschließlich drahtgebundene Adapter angezeigt werden so wird beim Aufruf der Netzwerkschnittstellen die Eingenschaft InterfaceAlias auf Ethernet gesetzt
Get-NetIPAddress -InterfaceAlias Ethernet
Wenn ausschließlich drahtgebundene IPv4-Adressen angezeigt werden sollen, muss die Eigenschaft „AddressFamily“ auf „IPv4“ gesetzt werden.
Get-NetIPAddress -InterfaceAlias Ethernet -AddressFamily IPv4
Da jedes Objekt eine Vielzahl an Eigenschaften besitzt, wird standardmäßig nur eine Auswahl an Eigenschaften angezeigt. Dies ist ein Sicherheitsmechanismus, da eine ungefilterte Ausgabe einer großen Anzahl von Objekten eine Infrastruktur sehr stark belasten könnte. Möchte man einen Überblick über alle Eigenschaften eines Objektes, sollte dieses gezielt ausgewählt werden und mittels Pipe an das Select-Object cmdlet weiter reichen. Durch die Angabe des Property Parameters können gezielt Eigenschaften abgerufen werden, da wir alle Eigenschaften des Objektes einsehen möchten, erfolgt dies über die Wildcard *.
Get-NetIPAddress -InterfaceAlias Ethernet -AddressFamily IPv4 | Select-Object -Property *
Die Standardmäßige Darstellung der Eigenschaften ist die Listen Form. Bei der Anzahl der Eigenschaften ist dies auch die sinnvollste Darstellung. Die Darstellung der Eigenschaften in Form einer Tabelle ist in diesem Fall keine Alternative. Um mit der Eigenschaft des jeweiligen Objektes zu arbeiten ist es sinnvoll das Objekt im Cache abzulegen. Dies erfolgt über die Zuweisung des Objektes in Form einer Variable. Dabei sollte der Name der Variable möglichst Prägnant, Aussagekräftig und Kurz sein. Bei dieser Form der Zuweisung handelt es sich um das erzeugen einer referenziellen Variablen.
$IPv4_Eth_Ad = Get-NetIPAddress -InterfaceAlias Ethernet -AddressFamily IPv4
Anschließend kann mittels des Aufrufs der Variable auf die Standardmäßigen Eigenschaften zugegriffen werden.
Meistens möchte man von dem jeweiligen Objekt jedoch gezielt einzelne Eigenschaften abfragen, z.B. die IP Adresse oder die Gültigkeitsdauer. Um bei der Eingabe nicht der Gefahr von Tippfehlern zu unterliegen, bietet die PowerShell eine elegante Methode. Folgendes Video soll die Möglichkeiten illustrieren mittels Auto-Complete getätigte Eingaben zu vervollständigen. Dabei handelt es sich nicht um die weiterführende Vervollständigung Namens Intellisense, Intellisense ist erst in der Integrated Scripting Environment enthalten. Beide Verfahren bedienen sich jedoch der gleichen Art und Weise um auf sie zurückzugreifen, die TAB Taste ist für das automatische Einfügen bzw auswählen der gewünschten Eingabe der Schlüssel zur Lösung. Ebenfalls wird direkt auf die Möglichkeiten des „dot sourcing“ eingegangen, dazu folgt der Variable lediglich der benötigte Punkt um anschließend mittels TAB Taste zwischen den Eigenschaften zu wechseln.
„It was a mistake to think that GUIs ever would, could, or even should, eliminate CLIs.“
– Jeffrey Snover –