Kezdjük itt egy kis segítségkéréssel, jobb híján itt is egy nem teljesen korrekten meghívott Where() metódusra adott hibajelzéssel:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where()
Cannot find an overload for ".Where({ expression } [, mode [, numberToReturn]]
)" and the argument count: "0".
At line:1 char:1
+ ("ablak", "baba", "cica", "zsiráf").Where()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
Látható, hogy egy kötelező paraméterként egy kifejezést (expression) kell megadnunk, például:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"})
cica
zsiráf
Ez idáig teljesen hasonló a Where-Object cmdlethez. De vajon mi lehet a többi, opcionális paraméter? Megint hívjuk segítségül a hibajelzést:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"},"dummy")
Cannot convert value "dummy" to type "System.Management.Automation.WhereOperat
orSelectionMode". Error: "Unable to match the identifier name dummy to a valid
enumerator name. Specify one of the following enumerator names and try again
: Default, First, Last, SkipUntil, Until, Split"
At line:1 char:1
+ ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"},"dummy")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : SubstringDisambiguationEnumParseThrewAnExceptio
n
Látható a hibajelzésből, hogy a második paraméter egy System.Management.Automation.WhereOperatorSelectionMode típusú objektum. Ez egy felsorolás típus, amelynek a lehetséges értékei:
PS C:\> [enum]::GetNames([System.Management.Automation.WhereOperatorSelectionMo
de])
Default
First
Last
SkipUntil
Until
Split
Az első Where() példában valójában a Default opciót használtuk. Ha emellé teszünk egy számot, akkor a maximális találatszámot határozzuk meg:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"},"default",1)
cica
Ez tulajdonképpen a következő „hagyományos” PowerShell kifejezéssel egyenértékű:
PS C:\> "ablak", "baba", "cica", "zsiráf" | Where-Object {$_ -gt "c"} | Select-
Object -First 1
cica
A „First” opció nagyon hasonló a „Default”-hoz, azzal a különbséggel, hogy itt alaphelyzet szerint 1-et kapunk találatként:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"},"First")
cica
A „Last” opció alaphelyzetben az utolsó olyan elemet adja vissza, ami kielégíti a feltételt:
PS C:\> ("ablak", "baba", "cica", "zsiráf").Where({$_ -gt "c"},"Last")
zsiráf
A „SkipUntil” vagy „Skip” opcióval nem az összes elemet vizsgáljuk, hanem az első olyan elemet, ami igazzá teszi a kifejezést. Ezután ezt, illetve az alaphelyzet szerint az összes további elemet kapjuk meg kimenetként, még akkor is, ha ezen további elemek között olyan is van, amelyik nem teszi igazzá a kifejezést:
PS C:\> ("ablak", "baba", "cica", "zsiráf","ajtó").Where({$_ -gt "c"},"Skip")
cica
zsiráf
ajtó
Az „Until” pont az ellentétét adja a „Skip”-nek, azaz addig adja vissza az elemeket, ameddig a kifejezés nem teljesül:
PS C:\> ("ablak", "baba", "cica", "zsiráf","ajtó").Where({$_ -gt "c"},"Until")
ablak
baba
A „Split” opcióval két részre bontjuk az elemeket, az első csoport tartalmazza azokat az elemeket, amelyek igazzá teszik a kifejezést, a második csoportba a többi elem kerül:
PS C:\> $első, $második = ("ablak", "baba", "cica", "zsiráf","ajtó").Where({$_
-gt "c"},"Split")
PS C:\> $első
cica
zsiráf
PS C:\> $második
ablak
baba
ajtó