Verwenden des Where-Object Befehl in PowerShell

  1. Das Cmdlet Where-Object in PowerShell
  2. Erstellen von Filterbedingungen mit Skriptblöcken in PowerShell
  3. Erstellen von Filterbedingungen mit Parametern in PowerShell
  4. Verwenden mehrerer bedingter Anweisungen
Verwenden des Where-Object Befehl in PowerShell

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