Verwenden des Where-Object Befehl in PowerShell
-
Das Cmdlet
Where-Object
in PowerShell - Erstellen von Filterbedingungen mit Skriptblöcken in PowerShell
- Erstellen von Filterbedingungen mit Parametern in PowerShell
- Verwenden mehrerer bedingter Anweisungen
Wenn Sie mit Windows PowerShell-Eigenschaften in einer Sammlung von Objekten arbeiten, benötigen Sie manchmal eine Möglichkeit, alle spezifischen Dinge zu filtern, die Sie nur benötigen. Daher ist die Kenntnis der Verwendung des Windows PowerShell-Cmdlets Where-Object
eine wichtige Technik, die Sie in Ihrem Windows PowerShell-Skillset haben sollten.
Das Cmdlet Where-Object
ist ein wertvoller Befehl zum Filtern von Objekten. In diesem Artikel lernen wir verschiedene Möglichkeiten zum Erstellen eines Where-Object
-Befehl, seine Syntax und die Verwendung mehrerer bedingter Anweisungen kennen.
Das Cmdlet Where-Object
in PowerShell
Das einzige Ziel des Windows PowerShell-Cmdlet Where-Object
besteht darin, die Ausgabe eines Befehls zu filtern und bestimmte Informationen zurückzugeben, die wir ausdrucken möchten.
Zusammenfassend ist das Cmdlet Where-Object
ein Filter. Es erlaubt uns, eine Bedingung zu konstruieren, die entweder True
oder False
zurückgibt. Je nach Ergebnis der Situation gibt das Cmdlet dann entweder die Ausgabe zurück oder nicht.
Sie können diese Bedingung auf zwei Arten erstellen: Skriptblöcke und Parameter.
Erstellen von Filterbedingungen mit Skriptblöcken in PowerShell
Skriptblöcke sind eine wichtige Komponente in Windows PowerShell. Sie werden an Hunderten von Stellen in der gesamten Skriptsprache verwendet. Ein Skriptblock ist eine anonyme Funktion, die Code kategorisiert und an verschiedenen Stellen ausführt.
Beispiel-Skriptblock:
{$_.StartType -EQ 'Automatic'}
Mithilfe der Windows PowerShell-Pipeline könnten Sie diese Objekte dann an das Cmdlet Where-Object
weiterleiten und den Parameter FilterScript
verwenden. Da der Parameter FilterScript
einen Skriptblock akzeptiert, können wir eine Bedingung erstellen, um zu prüfen, ob die Eigenschaft jedes Objekts gleich dem spezifischen Wert ist, wie im folgenden Beispiel.
Beispielcode:
Get-Service | Where-Object -FilterScript {$_.StartType -eq 'Automatic'}
Hinweis: Viele Benutzer verwenden Positionsparameter mit dem Cmdlet Where-Object
und schließen den Parameternamen FilterScript
nicht ein. Stattdessen stellen sie nur den Skriptblock wie Where-Object {$_.StartType -eq 'Automatic'}
für eine schnellere und sauberere Art des Skriptens zur Verfügung.
Während diese Art von Syntax für dieses spezielle Szenario funktioniert, macht das Konzept eines Skriptblocks mit den geschweiften Klammern ({}
) den Code weniger lesbar und für weniger erfahrene Windows PowerShell-Benutzer schwieriger. Dieses Lesbarkeitsproblem veranlasste das Windows PowerShell-Team, Parameter einzuführen.
Erstellen von Filterbedingungen mit Parametern in PowerShell
Die in Windows PowerShell 3.0 eingeführten Parameter haben einen eher natürlichen Fluss in Bezug darauf, wie sie geschrieben werden. Lassen Sie uns anhand desselben vorherigen Beispiels Parameter verwenden, um eine bestimmte Ausgabe zu filtern.
Beispielcode:
Get-Service | Where-Object -Property StartType -eq 'Automatic'
Beachten Sie oben, dass der Befehl anstelle eines Skriptblocks die Objekteigenschaft als Parameterwert für den Property-Parameter angibt. Außerdem ist der Operator -eq
jetzt ein Parameter, mit dem Sie ihm den Wert Automatic
übergeben können.
Durch die Verwendung von Parametern auf diese Weise entfällt jetzt die Notwendigkeit eines Skriptblocks. Obwohl Microsoft Parameter als sauberere Art der Skripterstellung eingeführt hat, haben wir einen hervorragenden Grund, Skriptblöcke zu verwenden, die wir im nächsten Abschnitt des Artikels besprechen werden.
Verwenden mehrerer bedingter Anweisungen
Sie können zwei oder mehr Bedingungen mit einem Operator (wie -and
oder -or
) kombinieren, um sie mit einem Skriptblock auszuwerten. Wir müssen jedoch eine bestimmte Windows PowerShell-Komponente namens subexpressions verwenden, um jede Bedingung erfolgreich auszuwerten.
In Windows PowerShell können wir Unterausdrücke verwenden, um einen Ausdruck innerhalb einer Filtersyntax wie Where-Object
auszuführen. Wir tun dies, indem wir die 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