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

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' }
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
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn