Tento příspěvek je součástí pokračujícího seriálu blogů, který píše Adam Gordon. Každý týden vás Adam provede jedním příkazem prostředí PowerShell a ukáže vám, kdy a jak který příkaz použít. Tento týden se Adam zabývá příkazem Where-Object.
Kdy použít Where-Object
Komanda Where-Object vybírá objekty, které mají určité hodnoty vlastností, z kolekce objektů, které jsou jí předány.
Počínaje prostředím Windows PowerShell 3.0 existují dva různé způsoby, jak sestavit příkaz Where-Object.
- Blok skriptu. Pomocí bloku skriptu můžete zadat název vlastnosti, operátor porovnání a hodnotu vlastnosti. Where-Object vrátí všechny objekty, pro které je příkaz bloku skriptů pravdivý.
- Příkaz porovnání. Můžete také napsat příkaz porovnání, který se mnohem více podobá přirozenému jazyku.
Jak používat Where-Object
Získat zastavené služby:
(1.) Get-Service | Where-Object {$_.Status -eq „Stopped“}
(2.) Get-Service | where Status -eq „Stopped“
Těmito příkazy získáte seznam všech služeb, které jsou aktuálně zastaveny.
Automatická proměnná $_ představuje každý objekt, který je předán rutině Where-Object.
Příkaz (1.) používá formát bloku skriptu, příkaz (2.) používá formát porovnávacího příkazu.
Získat procesy na základě pracovní sady:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Tyto příkazy vypisují procesy, které mají pracovní sadu větší než 25 000 kilobajtů (KB).
Protože hodnota vlastnosti WorkingSet je uložena v bajtech, hodnota 25 000 se vynásobí 1 024.
Syntaxe bloku skriptu a příkazu je ekvivalentní a lze ji používat zaměnitelně.
Používejte formát příkazu porovnání:
(1.) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2.) Get-Process | where Handles -GE 1000
Tento příklad ukazuje, jak použít nový formát příkazu porovnání rutiny Where-Object.
Příkaz (1.) používá formát příkazu porovnání. V tomto příkazu se nepoužívají žádné aliasy a všechny parametry obsahují název parametru.
Příkaz (2.) představuje přirozenější použití formátu příkazu porovnání. Alias where nahrazuje název rutiny Where-Object a všechny nepovinné názvy parametrů jsou vynechány.
Použití více podmínek:
Get-Module -ListAvailable | where {($_.Name -notlike „Microsoft*“ -and $_.Name -notlike „PS*“) -and $_.HelpInfoUri}
Příkaz používá parametr -ListAvailable rutiny Get-Module k získání všech modulů v počítači.
Operátor pipeline (|) odešle moduly rutině Where-Object, která získá moduly, jejichž názvy nezačínají písmeny Microsoft nebo PS a mají hodnotu vlastnosti HelpInfoURI, která prostředí PowerShell říká, kde má najít aktualizované soubory nápovědy pro daný modul.
Příkazy porovnání jsou spojeny logickým operátorem And.
Příklad používá formát bloku příkazů skriptů.
POZNÁMKA: Logické operátory, jako jsou And a Or, jsou platné pouze v blocích skriptů. Nelze je použít ve formátu porovnávacího příkazu příkazu Where-Object.
Přečtěte si příkaz z minulého týdne:
Potřebujete školení PowerShell? Podívejte se na online kurzy IT školení PowerShell od ITProTV.