Connect with us

Wie man

Formatieren, Filtern und Vergleichen in PowerShell lernen

Lernen von PowerShell-Variablen, Eingabe und Ausgabe

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

Lesen Sie unbedingt die vorherigen Artikel der Reihe:

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 die Wahrheit ist, dass es nur ein wenig Zeit braucht, um zu verstehen, was unter der Haube vor sich geht. Das gleiche gilt für das PowerShell-Formatierungssystem. Tatsächlich zeigt die generierte Ausgabe beim Ausführen des Cmdlets Get-Service nur 3 Eigenschaften an: Status, Name und DisplayName.

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

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

notepad C:WindowsSystem32WindowsPowerShellv1.0DotNetTypes.format.ps1xml

Wenn wir die Find-Funktion von Notepad verwenden, können wir schnell zu dem Abschnitt springen, der die Ausgabe des Cmdlets Get-Service detailliert beschreibt, indem wir nach dem ServiceController-Typ suchen.

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 in einer anderen Dateiformatdatei hat? Na dann ist es 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.

Formatieren Ihrer Daten

Wenn Sie mit der Standardformatierung eines Objekts oder Typs nicht zufrieden sind, können Sie Ihre eigene Formatierung ausführen. Dazu müssen Sie drei Cmdlets kennen.

  • Format-Liste
  • Format-Tabelle
  • Formatweit

Formatweit 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 name-Eigenschaft enthalten, wird die erste Eigenschaft des Objekts verwendet, nachdem die Eigenschaften alphabetisch sortiert wurden.

Get-Service | Formatweit

Wie Sie sehen, werden standardmäßig auch zwei Spalten verwendet, obwohl Sie sowohl die zu verwendende Eigenschaft als auch die Anzahl der anzuzeigenden Spalten angeben können.

Get-Service | Format-Wide -Eigenschaft DisplayName -Spalte 6

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

Diese tabellarische Ansicht passt eigentlich sehr gut zu dieser Art von Informationen, aber nehmen wir an, wir möchten sie in Listenform anzeigen. Alles, was wir wirklich tun müssen, ist es zu pfeifen Format-Liste.

Get-Prozess | 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-Prozess | Formatliste –Eigenschaft *

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

Get-Prozess | Format-Liste –Eigenschaftsname,id

Format-Tabelle, andererseits nimmt er Daten und wandelt sie in eine Tabelle um. Da unsere Daten von Get-Process bereits in Form einer Tabelle vorliegen, können wir damit leicht 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-Prozess | Format-Tabellenname,id –AutoSize

Filtern und Vergleichen

Einer der besten Vorteile bei der Verwendung einer objektbasierten Pipeline besteht darin, dass Sie mit dem Cmdlet Where-Object jederzeit Objekte aus der Pipeline herausfiltern können.

Get-Service | Where-Object {$_.Status -eq «Running»}

Die Verwendung von where-Objekten ist eigentlich sehr einfach. $_ stellt das aktuelle Pipeline-Objekt dar, 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 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)
  • (Weniger als)
  • le (Weniger als oder gleich)
  • wie (Platzhalter-String-Match)

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

Continue Reading
Click to comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tendencia