Wie man den Where-Object-Befehl in PowerShell verwendet

  1. Das Where-Object Cmdlet in PowerShell
  2. Erstellen von Filterbedingungen mit Skriptblöcken in PowerShell
  3. Verwendung von Where-Object, um Objekte in PowerShell zu filtern
  4. Erstellen von Filterbedingungen mit Parametern in PowerShell
  5. Verwendung mehrerer bedingter Anweisungen
Wie man den Where-Object-Befehl in PowerShell verwendet

Wenn Sie mit den Eigenschaften von Windows PowerShell in einer Sammlung von Objekten arbeiten, müssen Sie manchmal eine Möglichkeit finden, all die spezifischen Dinge herauszufiltern, die Sie nur benötigen. Daher ist es eine wesentliche Technik, zu wissen, wie man das Where-Object Cmdlet von Windows PowerShell verwendet, um Ihre Fähigkeiten in Windows PowerShell zu erweitern.

Das Where-Object Cmdlet ist ein wertvoller Befehl zum Filtern von Objekten. In diesem Artikel werden wir verschiedene Möglichkeiten lernen, einen Where-Object Befehl zu konstruieren, seine Syntax und die Verwendung mehrerer bedingter Anweisungen.

Das Where-Object Cmdlet in PowerShell

Das einzige Ziel des Where-Object Cmdlets in Windows PowerShell ist es, die Ausgabe eines Befehls zu filtern und bestimmte Informationen zurückzugeben, die wir drucken möchten.

Zusammenfassend lässt sich sagen, dass das Where-Object Cmdlet ein Filter ist. Es ermöglicht uns, eine Bedingung zu formulieren, die entweder True oder False zurückgibt. Abhängig vom Ergebnis der Situation gibt das Cmdlet entweder die Ausgabe zurück oder nicht.

Sie können diese Bedingung auf zwei Arten formulieren: Skriptblöcke und Parameter.

Erstellen von Filterbedingungen mit Skriptblöcken in PowerShell

Skriptblöcke sind ein wesentlicher Bestandteil in Windows PowerShell. Sie werden an Hunderten von Stellen in der Skriptsprache verwendet. Ein Skriptblock ist eine anonyme Funktion, die Code kategorisiert und an verschiedenen Stellen ausführt.

Beispiel Skriptblock:

{$_.StartType -EQ 'Automatic'}

Mit der Windows PowerShell-Pipeline könnten Sie diese Objekte dann an das Where-Object Cmdlet weiterleiten und den FilterScript Parameter verwenden. Da der FilterScript Parameter einen Skriptblock akzeptiert, können wir eine Bedingung erstellen, um zu überprüfen, ob die Eigenschaft jedes Objekts dem spezifischen Wert entspricht, wie im Beispiel unten.

Beispielcode:

Get-Service | Where-Object -FilterScript { $_.StartType -eq 'Automatic' }
Hinweis
Viele Leute verwenden positionsabhängige Parameter mit dem Where-Object Cmdlet und schließen den Namen des FilterScript Parameters nicht ein. Stattdessen geben sie allein den Skriptblock wie Where-Object {$_.StartType -eq 'Automatic'} an, um eine schnellere und sauberere Art des Skriptens zu ermöglichen.

Während dieser Syntax-Typ in diesem speziellen Szenario funktioniert, macht das Konzept eines Skriptblocks mit den geschweiften Klammern ({}) den Code weniger lesbar und für weniger erfahrene Windows PowerShell-Nutzer schwieriger. Dieses Lesbarkeitsproblem veranlasste das Windows PowerShell-Team, Parameter einzuführen.

Verwendung von Where-Object, um Objekte in PowerShell zu filtern

Das Get-ChildItem erhält die Liste aller Dateien und Ordner am angegebenen Speicherort. Angenommen, Sie möchten nur die .csv-Dateien im Verzeichnis anzeigen.

Das folgende Beispiel zeigt, wie man das Where-Object Cmdlet verwendet, um nur .csv-Dateien zu filtern und auszuwählen.

Get-ChildItem | Where-Object { $_.extension -eq ".csv" }

Im obigen Skript wird die Ausgabe von Get-ChildItem an das Where-Object Cmdlet weitergeleitet. Das Where-Object filtert die Ausgabe, bei der die Dateierweiterung .csv ist.

Ausgabe:

Directory: C:\Users\rhntm


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         3/11/2022   7:57 AM            122 books.csv
-a----          3/8/2022   2:07 PM         780199 house_data.csv
-a----          3/8/2022  10:38 PM            421 play_tennis.csv

Sie können auch Where als Alias für das Where-Object Cmdlet verwenden.

Im Folgenden ist ein weiteres Beispiel, das die Liste der Prozesse mit dem ProcessName Eigenschaftswert filtert. Es werden nur Prozesse angezeigt, die spotify als ProcessName haben.

Get-Process | where { $_.ProcessName -in "spotify" }

Ausgabe:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    550      31    55036      71256       2.81   1820   3 Spotify
    294      21    12328      18144       0.06  13536   3 Spotify
    476      64    96012     141208      20.61  13980   3 Spotify

Sie können den -notin Operator verwenden, um Werte auszuwählen, die nicht in der Sammlung von Objekten enthalten sind.

Zum Beispiel gibt das folgende Beispiel alle Prozesse aus, die nicht spotify als ProcessName haben.

Get-Process | where { $_.ProcessName -notin "spotify" }

Auf diese Weise können Sie das Where-Object Cmdlet verwenden, um die Objekte aus der Sammlung von Objekten basierend auf ihren Eigenschaften zu filtern.

Erstellen von Filterbedingungen mit Parametern in PowerShell

Einführung in Windows PowerShell 3.0, Parameter haben einen natürlicheren Fluss, wie sie geschrieben werden. Verwenden wir dasselbe vorherige Beispiel, um Parameter zu verwenden, um eine spezifische Ausgabe zu filtern.

Beispielcode:

Get-Service | Where-Object -Property StartType -EQ 'Automatic'

Beachten Sie oben, dass anstelle der Verwendung eines Skriptblocks der Befehl die Objekt-Eigenschaft als Parameterwert für den Property-Parameter angibt. Darüber hinaus ist der -eq Operator jetzt ein Parameter, der es Ihnen ermöglicht, den Wert Automatic an ihn weiterzugeben.

Die Verwendung von Parametern auf diese Weise beseitigt nun die Notwendigkeit eines Skriptblocks. Allerdings gibt es einen hervorragenden Grund, Skriptblöcke zu verwenden, den wir im nächsten Abschnitt des Artikels besprechen werden.

Verwendung mehrerer bedingter Anweisungen

Sie können zwei oder mehr Bedingungen kombinieren, indem Sie einen Operator (wie -and oder -or) verwenden, um sie mithilfe eines Skriptblocks zu bewerten. Wir müssen jedoch ein bestimmtes Windows PowerShell-Komponente namens Subausdrücke verwenden, um jede Bedingung erfolgreich zu bewerten.

In Windows PowerShell können wir Subausdrücke verwenden, um einen Ausdruck innerhalb einer Filter-Syntax wie Where-Object auszuführen. Dies tun wir, indem wir jede bedingte Anweisung, die wir ausführen, in Klammern (()) setzen.

Beispielcode:

Get-Process | Where-Object { ($_.CPU -gt 2.0) -and ($_.CPU -lt 10) }

Beispiel Skriptblock:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
------ - ------    ---- - ---- - ------     --  -- ---------- -
334      21    18972      26384       5.23   3808   0 AnyDesk
635      34    13304      51264       9.56   4140   5 notepad
726      36    12820      51196       4.69  12088   5 notepad
802      46    18356      65088       7.98  10784   5 OneDrive
340      18     6472      26436       3.44   1252   5 RuntimeBroker
698      34    14672      44484       3.63   3284   5 RuntimeBroker
323      19     5732      23432       4.00  11200   5 RuntimeBroker
560      18     6440      27752       4.63   8644   5 sihost
632      31    21524      69972       2.81   6392   5 StartMenuExperienceHost
390      18     9756      30832       3.94   3084   5 svchost
523      24     8768      36312       2.17   6300   5 svchost
524      17     6416      21036       4.42  10932   5 SynTPEnh
525      22    15336      38904       3.41   2192   5 TextInputHost
Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Verwandter Artikel - PowerShell Statement