19Aug
In dieser Ausgabe von Geek School betrachten wir das Formatieren, Filtern und Vergleichen von Objekten in der Pipeline.
Lesen Sie sich die vorherigen Artikel in der Serie durch:
- Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
- Lernen mit Cmdlets in PowerShell
- Lernen Verwenden von Objekten in PowerShell
Und bleiben Sie für den Rest der Serie die ganze Woche dran.
Standard-Formatierung
Als ich mit PowerShell anfing, dachte ich, alles sei magisch, aber die Wahrheit ist, dass es nur ein bisschen Zeit braucht, um zu verstehen, was unter der Haube passiert. Dasselbe gilt für das PowerShell-Formatierungssystem. Wenn Sie das Cmdlet Get-Service ausführen, zeigt die generierte Ausgabe nur 3 Eigenschaften an: Status, Name und DisplayName.
Aber wenn Sie Get-Service an Get-Member übergeben, sehen Sie, dass die ServiceController-Objekte viel mehr als nur diese drei Eigenschaften haben. Was ist also los?
Die Antwort liegt in einer versteckten Datei, die definiert, wie die meisten integrierten Cmdlets ihre Ausgabe anzeigen. Um etwas zu verstehen, tippe folgendes in die Shell und drücke Enter.
-Editor C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Wenn wir die Find-Funktion von Notepad verwenden, können wir schnell zu dem Abschnitt springen, in dem die Ausgabe des Get-Service-Cmdlets durch Suchen nach dem ServiceController beschrieben wirdArt.
Plötzlich sehen Sie, dass PowerShell unter der Haube alle Objekte in der Pipeline vom Typ ServiceController formatiert und eine Tabelle mit drei Spalten erstellt: Status, Name und DisplayName. Aber was ist, wenn der Typ, mit dem Sie es zu tun haben, keinen Eintrag in dieser Datei oder irgendeine andere Datei im Format hat? Na, dann ist es eigentlich ganz einfach. Wenn das aus der Pipeline hervorgehende Objekt über 5 oder mehr Eigenschaften verfügt, zeigt PowerShell alle Eigenschaften des Objekts in einer Liste an. Wenn es weniger als 5 Eigenschaften hat, zeigt es sie in einer Tabelle an.
Formatieren Ihrer Daten
Wenn Sie mit der Standardformatierung eines Objekts oder Typs nicht zufrieden sind, können Sie Ihre eigene Formatierung rollen. Es gibt drei Cmdlets, die Sie dafür benötigen.
- Format-Liste
- Format-Tabelle
- Format-Wide
Format-Wide 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 Eigenschaft name enthalten, wird die erste Eigenschaft des Objekts verwendet, nachdem die Eigenschaften alphabetisch sortiert wurden.
Get-Service |Format-Wide
Wie Sie sehen können, werden standardmäßig zwei Spalten verwendet. Sie können jedoch angeben, welche Eigenschaft Sie verwenden möchten und wie viele Spalten angezeigt werden sollen.
Get-Service |Format-Wide - Eigenschaft Anzeigename - Spalte 6
Wenn etwas standardmäßig als Tabelle formatiert ist, können Sie es mithilfe des Cmdlets Format-List jederzeit zur Listenansicht umschalten. Sehen wir uns die Ausgabe des Cmdlets Get-Process an.
Diese tabellarische Ansicht passt sehr gut zu dieser Art von Informationen, aber tun wir so, als ob wir sie in Listenform anzeigen möchten. Alles, was wir wirklich tun müssen, ist es zu Format-List zu leiten.
Get-Prozess |Format-List
Wie Sie sehen können, werden standardmäßig nur vier Elemente in der Liste angezeigt. Um alle Eigenschaften des Objekts anzuzeigen, können Sie ein Platzhalterzeichen verwenden.
Get-Prozess |Format-Liste -Property *
Alternativ können Sie nur die gewünschten Eigenschaften auswählen.
Get-Prozess |Format-Liste -Property name, id
Format-Tabelle, hingegen nimmt Daten und wandelt sie in eine Tabelle um. Da unsere Daten von Get-Process bereits in Form einer Tabelle vorliegen, können wir sie verwenden, um einfach Eigenschaften auszuwählen, die in der Tabelle angezeigt werden sollen. Ich habe den AutoSize-Parameter verwendet, um alle Daten auf einen einzigen Bildschirm anzupassen.
Get-Prozess |Format-Tabellenname, ID -AutoSize
Filtern und Vergleichen von
Eines der besten Dinge beim Verwenden einer objektbasierten Pipeline ist, dass Sie Objekte jederzeit mit dem Cmdlet "Where-Object" aus der Pipeline filtern können.
Get-Service |Where-Objekt{ $ _. Status -eq "läuft"}
Verwenden von wo Objekt ist eigentlich sehr einfach.$ _ repräsentiert das aktuelle Pipeline-Objekt, aus dem Sie eine Eigenschaft auswählen können, nach der Sie filtern möchten. Hier werden nur Objekte beibehalten, bei denen die Status-Eigenschaft "Running" entspricht. Es gibt einige Vergleichsoperatoren, die Sie im Filterskriptblock verwenden können:
- eq( Gleich)
- neq( Ungleich)
- gt( Größer als)
- ge( Größer als oder gleich)
- lt( Kleiner als)
- le( Kleiner als oder gleich)
- like( Wildcard-Zeichenfolgenübereinstimmung)
Eine vollständige Liste und weitere Informationen können in der konzeptionellen Hilfedatei about_comparison eingesehen werden, es erfordert jedoch einige Zeit, sich an die Where-Obeject-Syntax zu gewöhnen. Das ist alles für diese Zeit!