Megosztás a következőn keresztül:


about_Automatic_Variables

Rövid leírás

A PowerShell által létrehozott és karbantartott állapotinformációkat tároló változókat ismerteti.

Elméletileg a legtöbb változó írásvédettnek minősül. Annak ellenére, hogy megírhatók , a visszamenőleges kompatibilitás érdekében nem szabad őket írni.

Íme a PowerShell automatikus változóinak listája:

Hosszú leírás

$$

Az utolsó jogkivonatot tartalmazza a munkamenet által fogadott utolsó sorban.

$?

Az utolsó parancs végrehajtási állapotát tartalmazza. Igaz értéket tartalmaz, ha az utolsó parancs sikeres volt, és hamis, ha nem sikerült. Az elemzési hibák nem eredményeznek végrehajtást, ezért nem befolyásolják a hiba értékét $?.

Olyan parancsmagok és speciális függvények esetében, amelyek egy folyamat több szakaszában futnak, például mindkettőben process és end blokkban, híváskor this.WriteError() vagy $PSCmdlet.WriteError() bármely időpontban Hamis értékre vannak állítva$?, ahogyan az és $PSCmdlet.ThrowTerminatingError()a this.ThrowTerminatingError() .

A Write-Error parancsmag végrehajtása után a parancsmag mindig False (Hamis) értékre állítja $? a parancsmagot, de az azt hívó függvény esetében nem lesz Hamis értékre állítva $? :

function Test-WriteError
{
    Write-Error "Bad"
    "The `$? variable is: $?"
}

Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError : Bad
At line:7 char:1
+ Test-WriteError
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Test-WriteError

The $? variable is: False
Now the $? variable is: True

Az utóbbi célra $PSCmdlet.WriteError() inkább azt kell használni.

A natív parancsok (végrehajthatók) $? értéke Igaz, ha $LASTEXITCODE 0, és false (Hamis) értékre van állítva, ha $LASTEXITCODE bármilyen más érték.

Feljegyzés

A PowerShell 7-ig zárójelben(...), alkifejezési szintaxisban $(...)vagy tömbkifejezésben @(...) lévő utasítást mindig reset$? Igaz értékre kell tördelni. Például (Write-Error) igazként jelenik meg$?. Ez a viselkedés megváltozott a PowerShell 7-ben, így $? mindig az utolsó parancsfuttatás tényleges sikerességét tükrözi ezekben a kifejezésekben.

$^

A munkamenet által fogadott utolsó sor első jogkivonatát tartalmazza.

$_

Ugyanaz, mint $PSItema . current A folyamatobjektum objektumát tartalmazza. Ezt a változót olyan parancsokban használhatja, amelyek műveletet hajtanak végre egy folyamat minden objektumán.

További információ: about_PSItem.

$args

Egy függvénynek, szkriptnek vagy szkriptblokknak átadott, be nem jelentett paraméterek értékeinek tömbje. Függvény létrehozásakor deklarálhatja a paramétereket a param kulcsszóval, vagy hozzáadhatja a paraméterek vesszővel tagolt listáját zárójelben a függvény neve után.

Egy eseményműveletben a $args változó olyan objektumokat tartalmaz, amelyek a feldolgozandó esemény eseményargumentumait jelölik. Ez a változó csak az Action eseményregisztrációs parancs blokkja alatt van feltöltve. A változó értéke a visszaadott objektum Get-Event SourceArgs tulajdonságában PSEventArgs is megtalálható.

$ConsoleFileName

A munkamenetben legutóbb használt konzolfájl (.psc1) elérési útját tartalmazza. Ezt a változót akkor tölti ki a rendszer, ha a PSConsoleFile paraméterrel indítja el a PowerShellt, vagy amikor a parancsmaggal exportálja a Export-Console beépülő modulok nevét egy konzolfájlba.

Ha paraméterek nélkül használja a Export-Console parancsmagot, az automatikusan frissíti a munkamenetben legutóbb használt konzolfájlt. Ezzel az automatikus változóval meghatározhatja a frissíteni kívánt fájlt.

$Error

Hibaobjektumok tömbje, amelyek a legutóbbi hibákat jelölik. A legutóbbi hiba a tömb $Error[0]első hibaobjektuma.

Ha meg szeretné akadályozni, hogy hiba legyen hozzáadva a $Error tömbhöz, használja az ErrorAction common paramétert figyelmen kívül hagyás értékkel. További információ: about_CommonParameters.

$Event

Olyan objektumot PSEventArgs tartalmaz, amely a feldolgozott eseményt jelöli. Ez a változó csak az Action eseményregisztrációs parancs blokkja alatt van feltöltve, például Register-ObjectEvent. Ennek a változónak az értéke ugyanaz az objektum, amelyet a Get-Event parancsmag visszaad. A változó tulajdonságait használhatja Event például $Event.TimeGeneratedegy Action szkriptblokkban.

$EventArgs

Egy objektumot tartalmaz, amely a feldolgozott esemény EventArgs-jeiből származó első eseményargumentumot jelöli. Ez a változó csak az Action eseményregisztrációs parancs blokkja alatt van feltöltve. A változó értéke a visszaadott objektum Get-Event SourceEventArgs tulajdonságában PSEventArgs is megtalálható.

$EventSubscriber

Olyan objektumot PSEventSubscriber tartalmaz, amely a feldolgozott esemény esemény-előfizetőjét jelöli. Ez a változó csak az Action eseményregisztrációs parancs blokkja alatt van feltöltve. Ennek a változónak az értéke ugyanaz az objektum, amelyet a Get-EventSubscriber parancsmag visszaad.

$ExecutionContext

Egy EngineIntrinsics objektumot tartalmaz, amely a PowerShell-gazdagép végrehajtási környezetét jelöli. Ezzel a változóval megkeresheti a parancsmagok számára elérhető végrehajtási objektumokat.

$false

Hamis értéket tartalmaz. Ezzel a változóval a sztring "false"használata helyett a parancsokban és szkriptekben a Hamis értéket jelölheti. A sztring akkor értelmezhető Igaz értékként, ha nem üres sztringgé vagy nem nulla egész számmá alakítja át.

$foreach

Egy ForEach-ciklus enumerátorát (nem az eredményként kapott értékeket) tartalmazza. A $ForEach változó csak akkor létezik, ha a ForEach ciklus fut; a ciklus befejezése után törlődik.

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek a ciklusértékek lekérésére és a ciklus iterációjának current módosítására használhatók. További információ: Enumerátorok használata.

$HOME

A felhasználó kezdőkönyvtárának teljes elérési útját tartalmazza. Ez a változó általában C:\Users\<UserName>a "$env:USERPROFILE" Windows környezeti változó értékét használja.

Fontos

A Windows átirányíthatja a felhasználó profiljának helyét. Ez azt jelenti, hogy lehet, hogy $HOME nem ugyanaz az érték, mint "$env:HOMEDRIVE$env:HOMEPATH"a .

$Host

Olyan objektumot tartalmaz, amely a current PowerShell gazdagépalkalmazását jelöli. Ezzel a változóval megjelenítheti a gazdagépet a current parancsokban, vagy megjelenítheti vagy módosíthatja a gazdagép tulajdonságait, például $Host.version vagy $Host.CurrentCulture.$Host.UI.RawUI.BackGroundColor = "Red"

$input

Egy olyan enumerátort tartalmaz, amely számba adja a függvénynek átadott összes bemenetet. A $input változó csak függvények, szkriptblokkok (amelyek névtelen függvények) és szkriptfájlok számára érhető el (amelyek mentett szkriptblokkok).

  • Egy , processvagy end blokk nélküli beginfüggvényben a $input változó számba adja a függvény összes bemenetének gyűjteményét.

  • A blokkban a begin $input változó nem tartalmaz adatokat.

  • A blokkban a process $input változó a current folyamatban lévő objektumot tartalmazza.

  • A blokkban a end $input változó számba adja a függvény összes bemenetének gyűjteményét.

    Feljegyzés

    A változó nem használható mind a $input process blokkban, mind a end blokkban ugyanabban a függvényben vagy szkriptblokkban.

Mivel $input enumerátorról van szó, a tulajdonságok elérése miatt $input a továbbiakban nem érhető el. A tulajdonságok újrafelhasználásához egy másik változóban is tárolhatja$input.$input

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek a ciklusértékek lekérésére és a ciklus iterációjának current módosítására használhatók. További információ: Enumerátorok használata.

A $input változó a parancssorból meghívandó paraméter powershell.exe által -Command megadott parancs számára is elérhető. Az alábbi példa a Windows command shellből fut.

echo Hello | powershell -Command """$input World!"""

$LASTEXITCODE

A legutóbb futtatott natív program vagy PowerShell-szkript kilépési kódját tartalmazza.

PowerShell-szkriptek esetén a parancsprogram meghívásának $LASTEXITCODE módjától és a exit kulcsszó használatától függ:

  • Ha egy szkript a kulcsszót exit használja:

    $LASTEXITCODE a kulcsszó által exit megadott értékre van beállítva. További információ: about_Language_Keywords.

  • Ha egy szkriptet közvetlenül, például ./Test.ps1, vagy a híváskezelővel (&) hív meg, például & ./Test.ps1:

    Az érték $LASTEXITCODE csak akkor változik, ha:

    • A szkript meghív egy másik szkriptet, amely a kulcsszót exit használja
    • A szkript natív parancsot hív meg
    • A szkript a kulcsszót exit használja
  • Ha egy szkriptet a Fájl paraméterrel powershell.exe hív meg, $LASTEXITCODE a következő értékre van állítva:

    • 1 ha a szkript kivétel miatt leállt
    • A kulcsszó által exit megadott érték, ha a szkriptben használják
    • 0 ha a szkript sikeresen befejeződött
  • Ha a parancsparaméter használatával powershell.exe meghív egy szkriptet, $LASTEXITCODE a következőre van állítva:

    • 1 ha a szkript kivétel miatt leállt, vagy ha az utolsó parancs eredménye a következőre van állítva $? : $false
    • 0 ha a szkript sikeresen befejeződött, és az utolsó parancs eredménye a következőre van állítva $? : $true

A fájl- és parancsparaméterekről további információt a about_PowerShell_exe talál.

$Matches

A $Matches változó együttműködik az operátorokkal és -notmatch az -match operátorokkal. Amikor skaláris bemenetet küld az vagy -notmatch az -match operátornak, és bármelyik észlel egyezést, logikai értéket adnak vissza, és feltöltik az $Matches automatikus változót egy kivonattáblával az esetlegesen megfelelt sztringértékek közül. A $Matches kivonattábla akkor is kitölthető rögzítésekkel, ha reguláris kifejezéseket használ az -match operátorral.

Az operátorral kapcsolatos további információkért lásd: -match about_Comparison_Operators. A reguláris kifejezésekről további információt a about_Regular_Expressions talál.

A $Matches változó egy switch utasításban is működik a -Regex paraméterrel. Ugyanúgy van feltöltve, mint az -match operátorok.-notmatch Az utasítással kapcsolatos további információkért lásd: switch about_Switch.

Feljegyzés

Amikor $Matches feltöltődik egy munkamenetben, az megőrzi a megfeleltetett értéket, amíg egy másik egyezés felülírja. Ha -match a rendszer ismét használja, és nem talál egyezést, akkor nem reset$Matches kell.$null A korábban egyeztetett érték megmarad, $Matches amíg egy másik egyezést nem talál.

$MyInvocation

A parancsra vonatkozó current információkat tartalmaz, például a nevet, paramétereket, paraméterértékeket, valamint a parancs indításának, meghívásának vagy meghívásának módját, például a parancsot meghívó current szkript nevét.

$MyInvocation csak szkriptek, függvények és szkriptblokkok esetén van feltöltve. A parancs azonosításához current használhatja a szkriptben current visszaadott System.Management.Automation.InvocationInfo objektum $MyInvocation adatait, például egy függvény ($MyInvocation.MyCommand.Name) nevét. Ez hasznos a szkript nevének megkereséséhez current .

A PowerShell 3.0-tól MyInvocation kezdve az alábbi új tulajdonságokat használhatja.

  • PSScriptRoot – A parancsot meghívó current szkript teljes elérési útját tartalmazza. A tulajdonság értéke csak akkor lesz feltöltve, ha a hívó szkript.
  • PSCommandPath – A parancsot meghívó current szkript teljes elérési útját és fájlnevét tartalmazza. A tulajdonság értéke csak akkor lesz feltöltve, ha a hívó szkript.

$PSScriptRoot Az automatikus változóktól eltérően $PSCommandPath az automatikus változó PSScriptRoot és PSCommandPath tulajdonságai $MyInvocation nem a current szkriptről, hanem a meghívóról vagy a hívó szkriptről tartalmaznak információkat.

$NestedPromptLevel

A parancssori current szintet tartalmazza. A 0 érték az eredeti parancssori szintet jelzi. Az érték növekszik, amikor beágyazott szintet ad meg, és a kilépéskor csökken.

A PowerShell például beágyazott parancssort jelenít meg a $Host.EnterNestedPrompt metódus használatakor. A PowerShell beágyazott parancssort is megjelenít, amikor eléri a töréspontot a PowerShell-hibakeresőben.

Beágyazott parancssor megadásakor a PowerShell szünetelteti a current parancsot, menti a végrehajtási környezetet, és növeli a $NestedPromptLevel változó értékét. További beágyazott parancssorok létrehozásához (legfeljebb 128 szintig) vagy az eredeti parancssorba való visszatéréshez hajtsa végre a parancsot, vagy írja be exita parancsot.

A $NestedPromptLevel változó segít nyomon követni a parancssori szintet. Létrehozhat egy másik PowerShell-parancssort, amely tartalmazza ezt az értéket, hogy mindig látható legyen.

$null

$nullegy null vagy üres értéket tartalmazó automatikus változó. Ezzel a változóval egy hiányzó vagy nem definiált értéket jelölhet parancsokban és szkriptekben.

A PowerShell értékekkel vagy helyőrzőkkel rendelkező objektumként kezeli $null , így egy üres értéket jelölhet $null egy értékgyűjteményben.

Ha például $null szerepel egy gyűjteményben, az objektumnak számít.

$a = "one", $null, "three"
$a.count
3

Ha a változót a $null ForEach-Object parancsmaghoz csövezi, az a többi objektumhoz $nullhasonlóan létrehoz egy értéket.

"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three

Ennek eredményeképpen nem lehet $null paraméterértéket jelenteni. A paraméter értéke $null felülbírálja az alapértelmezett paraméterértéket.

Mivel azonban a PowerShell helyőrzőként kezeli a $null változót, az alábbihoz hasonló szkriptekben is használhatja, ami nem működik, ha $null figyelmen kívül hagyják.

$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday","Monday","Tuesday","Wednesday","Thursday",
        "Friday","Saturday"
$currentDay = 0
foreach($day in $calendar)
{
    if($day -ne $null)
    {
        "Appointment on $($days[$currentDay]): $day"
    }

    $currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch

$PID

A PowerShell-munkamenetet üzemeltető current folyamatazonosítót (PID) tartalmazza.

$PROFILE

A felhasználó és current a gazdaalkalmazás PowerShell-profiljának current teljes elérési útját tartalmazza. Ezzel a változóval a profilt parancsokban jelölheti. Használhatja például egy parancsban annak megállapítására, hogy létrejött-e profil:

Test-Path $PROFILE

Vagy használhatja egy parancsban egy profil létrehozásához:

New-Item -ItemType file -Path $PROFILE -Force

A parancs segítségével megnyithatja a profilt a notepad.exe:

notepad.exe $PROFILE

$PSBoundParameters

A szkriptnek vagy függvénynek átadott paraméterek és azok current értékeinek szótárát tartalmazza. Ez a változó csak olyan hatókörben rendelkezik értékkel, amelyben a paraméterek deklarálva vannak, például egy szkriptben vagy függvényben. Segítségével megjelenítheti vagy módosíthatja a current paraméterek értékeit, vagy paraméterértékeket adhat át egy másik szkriptnek vagy függvénynek.

Ebben a példában a Test2 függvény átadja a $PSBoundParameters Tesztet1 függvénynek. Ezek $PSBoundParameters kulcs és érték formátumban jelennek meg.

function Test1 {
   param($a, $b)

   # Display the parameters in dictionary format.
   $PSBoundParameters
}

function Test2 {
   param($a, $b)

   # Run the Test1 function with $a and $b.
   Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key   Value
---   -----
a     Power
b     Shell

$PSCmdlet

Olyan objektumot tartalmaz, amely a futtatandó parancsmagot vagy speciális függvényt jelöli.

A parancsmagban vagy a függvénykódban található objektum tulajdonságai és metódusai a használati feltételeknek való válaszadáshoz használhatók. A ParameterSetName tulajdonság például a használt paraméterkészlet nevét tartalmazza, a ShouldProcess metódus pedig dinamikusan adja hozzá a WhatIf és a Confirm paramétereket a parancsmaghoz.

Az automatikus változóval kapcsolatos további információkért lásd: $PSCmdlet about_Functions_CmdletBindingAttribute és about_Functions_Advanced.

$PSCommandPath

A futtatott szkript teljes elérési útját és fájlnevét tartalmazza. Ez a változó minden szkriptben érvényes.

$PSCulture

Az operációs rendszerben jelenleg használt kultúra nevét tartalmazza. A kultúra határozza meg az elemek (például számok, pénznemek és dátumok) megjelenítési formátumát, és egy System.Globalization.CultureInfo objektumban tárolja. A számítógép kulturális környezetének megjelenítésére használható Get-Culture . $PSCulture A Név tulajdonság értékét tartalmazza.

$PSDebugContext

A hibakeresés során ez a változó információkat tartalmaz a hibakeresési környezetről. Ellenkező esetben null értéket tartalmaz. Ennek eredményeképpen meghatározhatja, hogy a hibakereső rendelkezik-e vezérléssel. Feltöltéskor tartalmaz egy PsDebugContext objektumot, amely töréspontokkal és InvocationInfo tulajdonságokkal rendelkezik. Az InvocationInfo tulajdonság számos hasznos tulajdonsággal rendelkezik, beleértve a Location tulajdonságot is. A Location tulajdonság a hibakeresés alatt álló szkript elérési útját jelzi.

$PSEdition

Ugyanazt az értéket tartalmazza a következőben $PSVersionTable.PSEdition: . Ez a változó a modul jegyzékfájljaiban használható, míg $PSVersionTable nem.

$PSHOME

A PowerShell telepítési könyvtárának teljes elérési útját tartalmazza, általában $env:windir\System32\PowerShell\v1.0 Windows-rendszereken. Ezt a változót a PowerShell-fájlok elérési útjaiban használhatja. A következő parancs például a súgó szó fogalmi súgótémakörökben keres:

Select-String -Pattern Help -Path $PSHOME\en-US\*.txt

$PSItem

Ugyanaz, mint $_a . current A folyamatobjektum objektumát tartalmazza. Ezt a változót olyan parancsokban használhatja, amelyek műveletet hajtanak végre egy folyamat minden objektumán.

További információ: about_PSItem.

$PSScriptRoot

A végrehajtó szkript szülőkönyvtárának teljes elérési útját tartalmazza.

A PowerShell 2.0-ban ez a változó csak szkriptmodulokban (.psm1) érvényes. A PowerShell 3.0-tól kezdve minden szkriptben érvényes.

$PSSenderInfo

Információkat tartalmaz a PSSessiont kezdeményező felhasználóról, beleértve a felhasználói identitást és az eredeti számítógép időzónáját. Ez a változó csak PSSessions esetén érhető el.

A $PSSenderInfo változó tartalmaz egy felhasználó által konfigurálható tulajdonságot, az ApplicationArguments tulajdonságot, amely alapértelmezés szerint csak az $PSVersionTable eredeti munkamenetet tartalmazza. Ha adatokat szeretne hozzáadni az ApplicationArguments tulajdonsághoz, használja a New-PSSessionOption parancsmag ApplicationArguments paraméterét.

$PSUICulture

Az operációs rendszerben konfigurált felhasználói felületi (UI-) kultúra nevét tartalmazza. A felhasználói felületi kultúra határozza meg, hogy mely szöveges sztringek használhatók a felhasználói felület elemeihez, például a menükhöz és az üzenetekhez. Ez a rendszer System.Globalization.CultureInfo.CurrentUICulture.Name tulajdonságának értéke. A System.Globalization.CultureInfo objektum lekéréséhez használja a Get-UICulture parancsmagot.

$PSVersionTable

Egy írásvédett kivonatoló táblázatot tartalmaz, amely megjeleníti a PowerShell munkamenetben current futó verziójának részleteit. A táblázat a következő elemeket tartalmazza:

  • BuildVersion – A verzió buildszáma current
  • CLRVersion – A közös nyelvi futtatókörnyezet (CLR) verziója
  • PSCompatibleVersions – A PowerShell azon verziói, amelyek kompatibilisek a current verzióval
  • PSEdition – Ez a tulajdonság a "Desktop" értékkel rendelkezik a Windows Server és a Windows-ügyfélverziók esetében. Ez a tulajdonság a Nano Server vagy a Windows IoT alatt futó PowerShell "Core" értékével rendelkezik.
  • PSRemotingProtocolVersion – A PowerShell távfelügyeleti protokolljának verziója.
  • PSVersion – A PowerShell-verziószám
  • SzerializationVersion – A szerializálási módszer verziója
  • WSManStackVersion – A WS-Management verem verziószáma

$PWD

Egy elérési út objektumot tartalmaz, amely a PowerShell-futtatótér könyvtárhelyének current current teljes elérési útját jelöli.

Feljegyzés

A PowerShell folyamatonként több futtatóteret támogat. Minden runspace saját current könyvtárral rendelkezik. Ez nem ugyanaz, mint a current folyamat könyvtára: [System.Environment]::CurrentDirectory.

$Sender

Az eseményt létrehozó objektumot tartalmazza. Ez a változó csak egy eseményregisztrációs parancs Művelet blokkja alatt van feltöltve. A változó értéke a visszaadott objektum Get-Event Feladó tulajdonságában PSEventArgs is megtalálható.

$ShellId

A rendszerhéj azonosítóját current tartalmazza.

$StackTrace

A legutóbbi hiba veremkövetését tartalmazza.

$switch

Az enumerátor nem egy utasítás eredményként kapott értékeit Switch tartalmazza. A $switch változó csak akkor létezik, ha az Switch utasítás fut; az utasítás végrehajtásakor switch törlődik. További információ: about_Switch.

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek a ciklusértékek lekérésére és a ciklus iterációjának current módosítására használhatók. További információ: Enumerátorok használata.

$this

A $this változó olyan szkriptblokkokban használatos, amelyek osztályokat terjesztenek ki, hogy magukra az osztálypéldányra hivatkozzon.

A PowerShell bővíthető típusrendszere (ETS) lehetővé teszi tulajdonságok hozzáadását az osztályokhoz szkriptblokkok használatával. Egy szkripttulajdonságot vagy szkriptmetódust meghatározó szkriptblokkban a változó a $this kibővítendő osztály objektumpéldányára hivatkozik. A PowerShell például az ETS használatával adja hozzá a BaseName tulajdonságot a FileInfo osztályhoz.

PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List

TypeName   : System.IO.FileInfo
Name       : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0)
             {$this.Name.Remove($this.Name.Length - $this.Extension.Length
             )}else{$this.Name};}

További információ: about_Types.ps1xml.

Egy PowerShell-osztályban a $this változó maga az osztály példányobjektumára hivatkozik, lehetővé téve az osztályban definiált tulajdonságokhoz és metódusokhoz való hozzáférést. További információ: about_Classes.

A $this változót olyan .NET-eseményosztályok is használják, amelyek szkriptblokkokat használnak az eseménykezelő meghatalmazottjaként. Ebben a forgatókönyvben $this az eseményt létrehozó objektumot jelöli, más néven az esemény feladóját.

$true

Igaz értéket tartalmaz. Ezzel a változóval a parancsokban és szkriptekben az Igaz értéket jelölheti.

Enumerátorok használata

A $input, $foreachés $switch változók mind enumerátorok, amelyek a kódblokk által feldolgozott értékek iterálására szolgálnak.

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek segítségével előre vagy reset iterációt végezhet, vagy lekérheti az iterációs értékeket. Az enumerátorok közvetlen módosítása nem ajánlott eljárás.

  • A ciklusokon belül előnyben kell részesíteni a folyamatvezérlési kulcsszavak törését és folytatását .

  • A folyamatbemenetet elfogadó függvényekben ajánlott paramétereket használni a ValueFromPipeline vagy a ValueFromPipelineByPropertyName attribútumokkal.

    További információ: about_Functions_Advanced_Parameters.

MoveNext

A MoveNext metódus a gyűjtemény következő elemére viszi tovább az enumerátort. A MoveNext akkor ad vissza értéket True , ha az enumerátor sikeresen haladt előre, False ha az enumerátor elérte a gyűjtemény végét.

Feljegyzés

A MoveNext által visszaadott logikai érték a kimeneti streambe kerül. Letilthatja a kimenetet úgy, hogy beírja a kimenetet[void], vagy out-null értékre szórja.

$input.MoveNext() | Out-Null
[void]$input.MoveNext()

Reset

A Reset metódus az enumerátort a kezdeti pozíciójára állítja, amely a gyűjtemény első eleme előtt van.

Current

A Current tulajdonság a gyűjtemény vagy folyamat elemét az current enumerátor helyén kapja meg.

A Current tulajdonság mindaddig ugyanazt a tulajdonságot adja vissza, amíg a MoveNext meghívása meg nem történik.

Példák

1. példa: A $input változó használata

Az alábbi példában a $input változó elérése törli a változót a folyamatblokk következő végrehajtásáig. A Reset metódus használatával visszaállítja a $input változót a folyamat értékére current .

function Test
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tInput: $input"
        "`tAccess Again: $input"
        $input.Reset()
        "`tAfter Reset: $input"
    }
}

"one","two" | Test
Iteration: 0
    Input: one
    Access Again:
    After Reset: one
Iteration: 1
    Input: two
    Access Again:
    After Reset: two

A folyamatblokk automatikusan előrelép a $input változón, még akkor is, ha nem éri el.

$skip = $true
function Skip
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        if ($skip)
        {
            "`tSkipping"
            $skip = $false
        }
        else
        {
            "`tInput: $input"
        }
    }
}

"one","two" | Skip
Iteration: 0
    Skipping
Iteration: 1
    Input: two

2. példa: $input használata a folyamatblokkon kívül

A folyamatblokkon kívül a változó a $input függvénybe becsatolt összes értéket jelöli.

  • A változó elérése törli az $input összes értéket.
  • A Reset metódus alaphelyzetbe állítja a teljes gyűjteményt.
  • A Current tulajdonság soha nem lesz feltöltve.
  • A MoveNext metódus hamis értéket ad vissza, mert a gyűjtemény nem lehet speciális.
    • A MoveNext hívása törli a változót$input.
Function All
{
    "All Values: $input"
    "Access Again: $input"
    $input.Reset()
    "After Reset: $input"
    $input.MoveNext() | Out-Null
    "After MoveNext: $input"
}

"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:

3. példa: A $input használata.Current ingatlan

A tulajdonsággal a Current current folyamat értéke többször is elérhető a Reset metódus használata nélkül. A folyamatblokk nem hívja meg automatikusan a MoveNext metódust .

A Current tulajdonság soha nem lesz feltöltve, hacsak nem hívja meg explicit módon a MoveNextet. A Current tulajdonság többször is elérhető a folyamatblokkban az értékének törlése nélkül.

function Current
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tBefore MoveNext: $($input.Current)"
        $input.MoveNext() | Out-Null
        "`tAfter MoveNext: $($input.Current)"
        "`tAccess Again: $($input.Current)"
    }
}

"one","two" | Current
Iteration: 0
    Before MoveNext:
    After MoveNext: one
    Access Again: one
Iteration: 1
    Before MoveNext:
    After MoveNext: two
    Access Again: two

4. példa: A $foreach változó használata

$input A változótól eltérően a $foreach változó mindig a gyűjtemény összes elemét jelöli, amikor közvetlenül hozzáfér. Current A tulajdonság használatával hozzáférhet a current gyűjteményelemhez, és a Reset MoveNext metódusokkal módosíthatja az értékét.

Feljegyzés

A ciklus minden iterációja foreach automatikusan meghívja a MoveNext metódust .

A következő ciklus csak kétszer fut. A második iterációban a gyűjtemény a harmadik elemre kerül, mielőtt az iteráció befejeződik. A második iteráció után már nincs több érték az iterációhoz, és a hurok leáll.

A MoveNext tulajdonság nem befolyásolja a gyűjtemény ($Num) iterálásához választott változót.

$i = 0
foreach ($num in ("one","two","three"))
{
    "Iteration: $i"
    $i++
    "`tNum: $num"
    "`tCurrent: $($foreach.Current)"

    if ($foreach.Current -eq "two")
    {
        "Before MoveNext (Current): $($foreach.Current)"
        $foreach.MoveNext() | Out-Null
        "After MoveNext (Current): $($foreach.Current)"
        "Num hasn't changed: $num"
    }
}
Iteration: 0
        Num: one
        Current: one
Iteration: 1
        Num: two
        Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num hasn't changed: two

Reset A metódus használatával alaphelyzetbe állítja a current gyűjtemény elemét. Az alábbi példa kétszer végigvezeti az első két elemet, mert a Reset metódust meghívják. Az első két ciklus után az if utasítás meghiúsul, és a hurok általában mindhárom elemen végighalad.

Fontos

Ez végtelen ciklust eredményezhet.

$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
    ("`t" * $stopLoop) + "Current: $($foreach.Current)"

    if ($num -eq "two" -and $stopLoop -lt 2)
    {
        $foreach.Reset()
        ("`t" * $stopLoop) + "Reset Loop: $stopLoop"
        $stopLoop++
    }
}
Current: one
Current: two
Reset Loop: 0
        Current: one
        Current: two
        Reset Loop: 1
                Current: one
                Current: two
                Current: three

5. példa: A $switch változó használata

A $switch változónak pontosan ugyanazok a szabályai vannak, mint a változónak $foreach . Az alábbi példa az összes enumerátori fogalmat szemlélteti.

Feljegyzés

Figyelje meg, hogy a NotEvaluated eset soha nem lesz végrehajtva, annak ellenére, hogy a MoveNext metódus után nincs break utasítás.

$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
    "MoveNext" {
        "`tMoveNext"
        $switch.MoveNext() | Out-Null
        "`tAfter MoveNext: $($switch.Current)"
    }
    # This case is never evaluated.
    "NotEvaluated" {
        "`tAfterMoveNext: $($switch.Current)"
    }

    "Reset" {
        if (!$stopInfinite)
        {
            "`tReset"
            $switch.Reset()
            $stopInfinite = $true
        }
    }

    default {
        "Default (Current): $($switch.Current)"
    }
}
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
    Reset
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
Default (Current): End

Lásd még