Dies ist ein Teil einer fortlaufenden Blogserie, die von Adam Gordon geschrieben wird. Jede Woche führt Adam Sie durch einen PowerShell-Befehl und zeigt Ihnen, wann und wie Sie ihn verwenden können. Diese Woche behandelt Adam Where-Object.
Wann verwenden Sie Where-Object
Das Cmdlet „Where-Object“ wählt Objekte mit bestimmten Eigenschaftswerten aus der Auflistung von Objekten aus, die an das Cmdlet übergeben werden.
Ab Windows PowerShell 3.0 gibt es zwei verschiedene Möglichkeiten, einen Where-Object-Befehl zu erstellen.
- Skriptblock. Sie können einen Skriptblock verwenden, um den Eigenschaftsnamen, einen Vergleichsoperator und den Eigenschaftswert anzugeben. Where-Object gibt alle Objekte zurück, für die die Skriptblockanweisung wahr ist.
- Vergleichsanweisung. Sie können auch eine Vergleichsanweisung schreiben, die der natürlichen Sprache sehr viel ähnlicher ist.
Wie Sie Where-Object verwenden
Gegen Sie angehaltene Dienste:
(1.) Get-Service | Where-Object {$_.Status -eq „Gestoppt“}
(2.) Get-Service | where Status -eq „Gestoppt“
Diese Befehle rufen eine Liste aller Dienste ab, die derzeit gestoppt sind.
Die automatische Variable $_ steht für jedes Objekt, das an das Cmdlet Where-Object übergeben wird.
Der (1.) Befehl verwendet das Skriptblockformat, der (2.) Befehl verwendet das Vergleichsanweisungsformat.
Prozesse basierend auf WorkingSet abrufen:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Diese Befehle listen Prozesse auf, deren Working Set größer als 25.000 Kilobytes (KB) ist.
Da der Wert der WorkingSet-Eigenschaft in Bytes gespeichert wird, wird der Wert von 25.000 mit 1.024 multipliziert.
Der Skriptblock und die Anweisungssyntax sind gleichwertig und können austauschbar verwendet werden.
Verwenden Sie das Format der Vergleichsanweisung:
(1.) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2.) Get-Process | where Handles -GE 1000
Dieses Beispiel zeigt, wie das neue Vergleichsanweisungsformat des Cmdlets Where-Object verwendet wird.
Der (1.) Befehl verwendet das Vergleichsanweisungsformat. In diesem Befehl werden keine Aliasnamen verwendet, und alle Parameter enthalten den Parameternamen.
Der (2.) Befehl ist die natürlichere Verwendung des Vergleichsanweisungsformats. Der Where-Alias wird durch den Namen des Cmdlets „Where-Object“ ersetzt, und alle optionalen Parameternamen werden weggelassen.
Verwenden Sie mehrere Bedingungen:
Get-Module -ListAvailable | where {($_.Name -notlike „Microsoft*“ -und $_.Name -notlike „PS*“) -und $_.HelpInfoUri}
Der Befehl verwendet den Parameter -ListAvailable des Cmdlets Get-Module, um alle Module auf dem Computer abzurufen.
Ein Pipelineoperator (|) sendet die Module an das Cmdlet „Where-Object“, das Module abruft, deren Namen nicht mit Microsoft oder PS beginnen und die einen Wert für die HelpInfoURI-Eigenschaft haben, die PowerShell mitteilt, wo aktualisierte Hilfedateien für das Modul zu finden sind.
Die Vergleichsanweisungen sind durch den logischen Operator And verbunden.
Das Beispiel verwendet das Skriptblockbefehlsformat.
Hinweis: Logische Operatoren wie And und Or sind nur in Skriptblöcken gültig. Sie können sie nicht im Format der Vergleichsanweisung eines Where-Object-Befehls verwenden.
Lernen Sie den Befehl von letzter Woche: Get-WinEvent.
Brauchen Sie PowerShell-Schulungen? Schauen Sie sich die PowerShell-Online-IT-Schulungen von ITProTV an.