A Where() metódus

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ó



Word To HTML Converter