Startseite » wie man » Geek School Lernen, Formatieren, Filtern und Vergleichen in PowerShell

    Geek School Lernen, Formatieren, Filtern und Vergleichen in PowerShell

    In dieser Ausgabe der Geek School betrachten wir das Formatieren, Filtern und Vergleichen von Objekten in der Pipeline.

    Lesen Sie unbedingt die vorherigen Artikel der Serie:

    • Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
    • Verwenden von Cmdlets in PowerShell
    • Informationen zum Verwenden von Objekten in PowerShell

    Und bleiben Sie die ganze Woche für den Rest der Serie dran.

    Standardformatierung

    Als ich mit PowerShell anfing, dachte ich, alles sei magisch, aber in Wahrheit dauert es nur ein bisschen Zeit, um zu verstehen, was sich unter der Motorhaube abspielt. Gleiches gilt für das PowerShell-Formatierungssystem. Wenn Sie das Cmdlet Get-Service ausführen, werden in der generierten Ausgabe nur drei Eigenschaften angezeigt: Status, Name und DisplayName.

    Wenn Sie jedoch Get-Service an Get-Member weiterleiten, sehen Sie, dass die ServiceController-Objekte weit mehr als nur diese drei Eigenschaften haben. Was passiert also??

    Die Antwort liegt in einer versteckten Datei, die definiert, wie die meisten integrierten Cmdlets ihre Ausgabe anzeigen. Um ein Verständnis zu erlangen, geben Sie Folgendes in die Shell ein und drücken Sie die Eingabetaste.

    Notizblock C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

    Wenn Sie die Suchfunktion von Notepad verwenden, können Sie schnell zu dem Abschnitt wechseln, der die Ausgabe des Cmdlets Get-Service ausführlich beschreibt, indem Sie nach dem Typ ServiceController suchen.

    Plötzlich können Sie sehen, dass PowerShell unter der Haube alle Objekte in der Pipeline formatiert, die vom Typ ServiceController sind, und eine Tabelle mit drei Spalten erstellt: Status, Name und DisplayName. Was aber, wenn der Typ, mit dem Sie sich befassen, keinen Eintrag in dieser Datei oder eine andere Formatdatei für diese Angelegenheit enthält? Nun, es ist eigentlich ganz einfach. Wenn das aus der Pipeline kommende Objekt 5 oder mehr Eigenschaften hat, zeigt PowerShell alle Eigenschaften des Objekts in einer Liste an. Wenn es weniger als 5 Eigenschaften hat, werden diese in einer Tabelle angezeigt.

    Daten formatieren

    Wenn Sie mit der Standardformatierung eines Objekts oder Typs nicht zufrieden sind, können Sie selbst formatieren. Es gibt drei Cmdlets, die Sie dafür wissen müssen.

    • Format-Liste
    • Format-Tabelle
    • Format breit

    Format breit nimmt einfach eine Sammlung von Objekten und zeigt eine einzelne Eigenschaft jedes Objekts an. Standardmäßig wird nach einer Namenseigenschaft gesucht. Wenn Ihre Objekte keine Namenseigenschaft enthalten, wird die erste Eigenschaft des Objekts verwendet, sobald die Eigenschaften alphabetisch sortiert wurden.

    Get-Service | Format breit

    Wie Sie sehen, werden standardmäßig auch zwei Spalten verwendet. Sie können jedoch sowohl angeben, welche Eigenschaft Sie verwenden möchten, als auch, wie viele Spalten angezeigt werden sollen.

    Get-Service | Format-Wide -Property DisplayName -Column 6

    Wenn etwas standardmäßig als Tabelle formatiert ist, können Sie es jederzeit mithilfe des Cmdlets Format-List in die Listenansicht umschalten. Sehen wir uns die Ausgabe des Cmdlets Get-Process an.

    Diese tabellarische Ansicht passt eigentlich sehr gut zu dieser Art von Informationen, aber lassen Sie uns so tun, als wollten wir sie in Listenform anzeigen. Alles, was wir wirklich tun müssen, ist es zu pfeifen Format-Liste.

    Get-Process | Format-Liste

    Wie Sie sehen, werden standardmäßig nur vier Elemente in der Liste angezeigt. Um alle Eigenschaften des Objekts anzuzeigen, können Sie ein Platzhalterzeichen verwenden.

    Get-Process | Format-List -Property *

    Alternativ können Sie nur die gewünschten Eigenschaften auswählen.

    Get-Process | Format-List - Eigenschaftsname, ID

    Format-Tabelle, Auf der anderen Seite nimmt Daten Daten in eine Tabelle um. Da unsere Daten von Get-Process bereits in Form einer Tabelle vorliegen, können wir damit einfach die Eigenschaften auswählen, die in der Tabelle angezeigt werden sollen. Ich habe den Parameter AutoSize verwendet, um alle Daten auf einen einzigen Bildschirm zu bringen.

    Get-Process | Format-Tabellenname, id -AutoSize

    Filtern und Vergleichen

    Eine der besten Eigenschaften bei der Verwendung einer objektbasierten Pipeline besteht darin, dass Sie zu jedem Zeitpunkt Objekte mit dem Cmdlet Where-Object aus der Pipeline filtern können.

    Get-Service | Where-Object $ _. Status -eq “ausgeführt”

    Verwenden, wo Objekt ist eigentlich sehr einfach. $ _ steht für das aktuelle Pipeline-Objekt, aus dem Sie eine Eigenschaft auswählen können, nach der Sie filtern möchten. Hier wurden nur Objekte aufbewahrt, bei denen die Eigenschaft Status gleich Running ist. Es gibt einige Vergleichsoperatoren, die Sie im Filterskriptblock verwenden können:

    • eq (gleich)
    • neq (nicht gleich)
    • gt (Größer als)
    • ge (größer als oder gleich)
    • lt (weniger als)
    • le (Weniger als oder gleich)
    • wie (Platzhalterzeichenfolge)

    Eine vollständige Liste und weitere Informationen können in der konzeptionellen Hilfedatei about_comparison eingesehen werden. Es dauert jedoch einige Zeit, sich an die Where-Obeject-Syntax zu gewöhnen. Das ist alles für diese Zeit!