To jest część serii blogów pisanych przez Adama Gordona. W każdym tygodniu Adam przeprowadzi Cię przez polecenie PowerShell, pokazując kiedy i jak używać każdego z nich. W tym tygodniu, Adam omawia Where-Object.
Kiedy używać Where-Object
Ccmdlet Where-Object wybiera obiekty, które mają określone wartości właściwości z kolekcji obiektów, które są do niego przekazywane.
Począwszy od Windows PowerShell 3.0, istnieją dwa różne sposoby konstruowania polecenia Where-Object.
- Blok skryptu. Można użyć bloku skryptu do określenia nazwy właściwości, operatora porównania i wartości właściwości. Polecenie Where-Object zwraca wszystkie obiekty, dla których wyrażenie bloku skryptu jest prawdziwe.
- Instrukcja porównania. Można również napisać instrukcję porównania, która jest znacznie bardziej podobna do języka naturalnego.
Jak używać Where-Object
Get stopped services:
(1.) Get-Service | Where-Object {$_.Status -eq „Stopped”}
(2.) Get-Service | where Status -eq „Stopped”
Polecenia te uzyskują listę wszystkich usług, które są obecnie zatrzymane.
Zmienna automatyczna $_ reprezentuje każdy obiekt, który jest przekazywany do cmdleta Where-Object.
Polecenie (1.) używa formatu bloku skryptu, polecenie (2.) używa formatu deklaracji porównania.
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Te polecenia wyświetlają listę procesów, które mają zestaw roboczy większy niż 25 000 kilobajtów (KB).
Ponieważ wartość właściwości WorkingSet jest przechowywana w bajtach, wartość 25 000 jest mnożona przez 1 024.
Składnia bloku skryptu i instrukcji jest równoważna i może być używana zamiennie.
Użyj formatu instrukcji porównania:
(1.) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2.) Get-Process | where Handles -GE 1000
Niniejszy przykład pokazuje, jak używać nowego formatu instrukcji porównania cmdleta Where-Object.
Polecenie (1.) używa formatu instrukcji porównania. W tym poleceniu nie są używane aliasy, a wszystkie parametry zawierają nazwę parametru.
Polecenie (2.) jest bardziej naturalnym użyciem formatu polecenia porównania. Alias where jest zastępowany nazwą polecenia cmdlet Where-Object, a wszystkie opcjonalne nazwy parametrów są pomijane.
Użycie wielu warunków:
Get-Module -ListAvailable | where {($_.Name -notlike „Microsoft*” -and $_.Name -notlike „PS*”) -and $_.HelpInfoUri}
Polecenie wykorzystuje parametr -ListAvailable cmdletu Get-Module, aby uzyskać wszystkie moduły na komputerze.
Operator potoku (|) wysyła moduły do cmdleta Where-Object, który pobiera moduły, których nazwy nie zaczynają się od Microsoft lub PS i mają wartość dla właściwości HelpInfoURI, która mówi PowerShellowi, gdzie znaleźć zaktualizowane pliki pomocy dla modułu.
Deklaracje porównania są połączone operatorem logicznym And.
Przykład wykorzystuje format polecenia bloku skryptu.
UWAGA: Operatory logiczne, takie jak And i Or, są ważne tylko w blokach skryptu. Nie można ich używać w formacie instrukcji porównania polecenia Where-Object.
Poznaj polecenie z zeszłego tygodnia: Get-WinEvent.
Potrzebujesz szkolenia PowerShell? Sprawdź szkolenia ITProTV z PowerShell online.