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 Serie:

wie man auf tinder wischt

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?

Anzeige

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

ist mein Computer 32 Bit

Wenn wir die Find-Funktion von Notepad verwenden, können wir schnell zu dem Abschnitt springen, der die Ausgabe des Get-Service-Cmdlets beschreibt, indem wir nach dem ServiceController-Typ 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. Aber was ist, wenn der Typ, mit dem Sie es zu tun haben, keinen Eintrag in dieser Datei oder in einer anderen Dateiformatdatei hat? 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.

Formatieren Ihrer Daten

Wenn Sie mit der Standardformatierung eines Objekts oder Typs nicht zufrieden sind, können Sie Ihre eigene Formatierung ändern. 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.

Verknüpfung zum Abmelden von Windows

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

Anzeige

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.

So ändern Sie den App-Namen

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 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}

Windows-Remote-Desktop über das Internet

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)
Anzeige

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!

WEITER LESEN