Where-Object cmdlet

Gyakran fordul az elő, hogy nem minden gyűjtemény-elemmel szeretnénk foglalkozni, hanem csak bizonyos tulajdonsággal rendelkezőkkel, és ezeket szeretnénk tovább küldeni a csővezetékünkben feldolgozásra, a szűrőfeltételünknek nem megfelelő elemeket egyszerűen el szeretnénk dobni. Ugyan ezt meg lehet tenni a ForEach-Object és az IF kombinációjával, de van egy direkt erre kitalált cmdletünk is, a Where-Object:

[1] PS C:\> $tömb = 1,2,"szöveg", 3

[2] PS C:\> $tömb | Where-Object {$_ -is [int]} | ForEach-Object {$_*2}

2

4

6

Ugyan a Where-Object nem vezérlő utasítás, a hagyományos programozási értelemben, de mivel a csővezetékek kezelése annyira tipikus a PowerShellben, ezért minden csővezetéket „vezérlő” utasítást is nyugodtan sorolhatunk ebbe a kategóriába.

Ha alaposabban megnézzük a Where-Object súgóját legalább PowerShell 3.0-nál, akkor ezt látjuk:

PS C:\> get-help Where-Object

 

NAME

    Where-Object

 

SYNOPSIS

    Selects objects from a collection based on their property values.

 

 

SYNTAX

    Where-Object [-Property] <String> [[-Value] <Object>] [-EQ] [-InputObject

    <PSObject>] [<CommonParameters>]

 

    Where-Object [-Property] <String> [[-Value] <Object>] [-InputObject <PSObj

    ect>] -Contains [<CommonParameters>]

 

    Where-Object [-FilterScript] <ScriptBlock> [-InputObject <PSObject>] [<Com

    monParameters>]

 

    Where-Object [-Property] <String> [[-Value] <Object>] [-InputObject <PSObj

    ect>] -GE [<CommonParameters>]

A vastagon kiemelt 3. szintaxis az eredeti működést mutatja, viszont itt is találunk a gyakori felhasználást lehetővé tevő egyszerűsített üzemmódokat megvalósító lehetőségeket is. Például a 4. szintaxist felhasználva:

PS C:\> Get-Process | Where-Object -Property Ws -GE 130mb

 

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName

-------  ------    -----      ----- -----   ------     -- -----------

    557      68   224668     235556   981    67,60   1412 powershell_ise

   1207      79   136624     175092   768   881,59  11120 WINWORD

Vagy pozícionális paraméterezést felhasználva szinte már a hétköznapi beszédhez hasonló kifejezést kapunk:

     PS C:\> Get-Process | Where WS -ge 130mb

 

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName

-------  ------    -----      ----- -----   ------     -- -----------

    556      68   224628     235532   981    67,64   1412 powershell_ise

   1217      79   159616     197680   795   952,37  11120 WINWORD

És ezért kell ilyen sok szintaxis a Where-Object-hez, hogy minden, a tulajdonságokra értelmezhető operátor (-eq, -contains, -ge, -ne, …) használható legyen.



Word To HTML Converter