Format-Table, Format-List, Out-GridView: Ausgabe formatieren in PowerShell


    Tags:

    Filtern mit Out-GridViewDer Output von Power­Shell ent­hält oft viele Attri­bute, so dass die Dar­stel­lung un­über­sicht­lich wird. Daher können spezielle Cmdlets die Aus­gabe von Befehlen filtern und neu an­ordnen. 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 tabel­larischen Format, wobei längere Werte abgeschnitten werden. Pager wie more helfen hier nicht, weil sie nur das Durchlaufen mehr­seitiger Ergebnisse verhindern.

    Die standardmäßige Ausgabe von vielen Cmdlets schneidet lange Werte von Attributen ab.

    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 tabel­larischen Darstellung, die bei den meisten Cmdlets vorein­gestellt 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.

    Extrembeispiel einer Tabellenformatierung: Vor PowerShell 5 presst ft möglichst alle Spalten in die Ausgabe.

    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.

    Seit PowerShell 5 übernimmt ft nur die Eigenschaften, die in auf eine Seite passen.

    Ausgabe in Listenform darstellen

    Trotz dieser Möglich­keiten 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 standard­mäßig, beispiels­weise Get-ADUser.

    Bei der Listendar­stellung erscheint jeder Wert in einer eigenen Zeile. Beim obigen Beispiel würde sich der Aufruf folgendermaßen ändern (es fehlt hier auch der optionale Parameter­name 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 zusammen­zufassen, 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

    Gruppieren von AD-Benutzerkonten nach 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.

    Einrichten eines Filters in Out-GridView

    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.

    Keine Kommentare