Tags: PowerShell
Der Output von PowerShell enthält oft viele Attribute, so dass die Darstellung unübersichtlich wird. Daher können spezielle Cmdlets die Ausgabe von Befehlen filtern und neu anordnen. Selbst eine GUI-Option steht dafür bereit.
Ruft man Cmdlets wie Get-Process, Get-Eventlog oder Get-ChildItem auf, dann spucken sie per Voreinstellung relativ viele Attribute der angezeigten Objekte aus. In den meisten Fällen erfolgt die Ausgabe in einem tabellarischen Format, wobei längere Werte abgeschnitten werden. Pager wie more helfen hier nicht, weil sie nur das Durchlaufen mehrseitiger Ergebnisse verhindern.
Attribute filtern
Manchmal reicht es aus, nicht benötigte Properties unter Verwendung von Select-Object auszufiltern, so dass für die übrigen Spalten mehr Platz bleibt. Die bessere Wahl sind aber zumeist Format-Table (Alias ft) und Format-List (Alias fl). Sie können über den Parameter Property ebenfalls die angezeigten Eigenschaften filtern und bieten darüber hinaus zusätzliche Optionen für die Darstellung:
Get-ChildItem *.ps1 | ft -Property Name, CreationTime, Attributes, Length
Dieses Beispiel zeigt alle PowerShell-Scripts im aktuellen Verzeichnis an und gibt ihren Namen, das Erstellungsdatum, die Dateiattribute und die Dateigröße in einer Tabelle aus.
Bleibt man bei der tabellarischen Darstellung, die bei den meisten Cmdlets voreingestellt ist, dann kann ft mit dem Parametern Wrap und Autosize das Problem der abgeschnittenen Attributwerte beheben:
Get-Package| ft -Wrap
In diesem Beispiel bricht die Anzeige der lokal installierten Programme den Namen und Urspungs-URL um, die sonst nicht in die Spalte passen würden. Die Option Autosize dagegen passt die Spaltenbreite an, so dass jedoch bei langen Werten ein horizontales Scrollen erforderlich sein kann.
In der Ausgabe von Format-Table zeigen sich jedoch Unterschiede zwischen PowerShell 5 und früheren Versionen. Die neue Variante begrenzt die Zahl der Attribute automatisch so, dass der Output ins Fenster passt, selbst wenn man etwa mit
Get-WmiObject -Class Win32_OperatingSystem | ft -Property *
sämtliche Eigenschaften ausgewählt hat.
Ausgabe in Listenform darstellen
Trotz dieser Möglichkeiten von ft, auch lange Werte vollständig darzustellen, empfiehlt sich häufig der Wechsel zu einer Ausgabe in Listenform. Manche Cmdlets, die viele Daten zurückgeben, nutzen dieses Format standardmäßig, beispielsweise Get-ADUser.
Bei der Listendarstellung erscheint jeder Wert in einer eigenen Zeile. Beim obigen Beispiel würde sich der Aufruf folgendermaßen ändern (es fehlt hier auch der optionale Parametername für Property):
Get-WmiObject -Class Win32_OperatingSystem| fl *
Mehrere Schalter von Format-Table wie HideTableHeaders (zum Weglassen der Spaltenüberschriften), Wrap und Autosize haben bei Format-List keinen Sinn und werden entsprechend nicht unterstützt.
Daten gruppieren
Beiden Cmdlets gemeinsam ist jedoch die Fähigkeit, Daten nicht nur zu filtern, sondern wie Group-Object auch anhand bestimmter Attribute zu gruppieren. Eine Anwendung dafür wäre beispielsweise, die Benutzer des AD in der Ausgabe zusammenzufassen, wenn sie einen gemeinsamen Manager haben:
Get-ADUser -Filter * -SearchBase "OU=IT,DC=contoso,DC=de" `
-Properties Name,GivenName,Surname,Manager |
Format-List -GroupBy Manager
Dieses Beispiel ließe sich auch auf andere Attribute wie City, Office oder StreetAddress anwenden.
Grafische Darstellung mit Out-GridView
Einen anderen Weg als die beiden textorientierten Cmdlets beschreitet Out-GridView. Es stellt den Output von PowerShell-Objekten in tabellarischer Form auf der grafischen Oberfläche dar. Während Format-Table oder Format-List schon vorab Angaben erwarten, wie der Output zu filtern oder zu sortieren ist, kann man dies auf der GUI nachträglich über die entsprechenden Controls erledigen.
So lassen sich nach dem Laden der Daten über die Schaltfläche Kriterien hinzufügen jene Felder auswählen, die man für einen Filter verwenden möchte. Das Sortieren erfolgt, wie bei solchen GUI-Elementen üblich, durch Klicken in die Spaltenüberschriften. Attribute lassen sich umsortieren oder entfernen bzw. wieder hinzufügen, indem man das Kontextmenü einer Spaltenüberschrift öffnet.
Aufgrund dieses Konzepts unterstützt Out-GridView kaum Parameter. Mit title kann man den Fenstertitel ändern, in dem standardmäßig der Befehl steht, in dem das Cmdlet aufgerufen wurde. Zusätzliche Optionen eröffnet der Schalter Passthru, weil er die ausgewählten Elemente nach dem Schließen der Tabelle in der Pipeline weitergibt. Damit lässt sich etwa ein einfaches Auswahlmenü realisieren oder man kann bestimmte Daten durch Anklicken exportieren.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links