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:
Line |
   7 |  Test-WriteError
     |  ~~~~~~~~~~~~~~~
     | Bad
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 a zárójelekben, a részexpressziós szintaxisban vagy egy tömbkifejezésben @(...) lévő utasítás befuttatása mindig igaz értékre vált $? .$(...)(...) 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 . Az aktuális objektumot tartalmazza a folyamatobjektumban. 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.

$EnabledExperimentalFeatures

Az engedélyezett kísérleti funkciók nevének listáját tartalmazza.

$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 az aktuális ciklus iterációjának 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. Windows rendszeren ez a változó általában C:\Users\<UserName>a "$env:USERPROFILE" Windows környezeti változó értékét használja. Unix esetén ez a változó a HOME 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 PowerShell aktuális gazdaalkalmazását jelöli. Ezzel a változóval az aktuális gazdagépet jelenítheti meg a 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"

Feljegyzés

A színbeállításokat $Host.PrivateData a $PSStyle beállítási változó váltotta fel. További információ: about_ANSI_Terminals.

$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 folyamat aktuális objektumát 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 az aktuális ciklus iterációjának 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 pwsh által -Command megadott parancs számára is elérhető. Az alábbi példa a Windows command shellből fut.

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

$IsCoreCLR

Azt tartalmazza $true , hogy az aktuális munkamenet fut-e a .NET Core-futtatókörnyezetben (CoreCLR). Egyéb esetben a következőket tartalmazza $false: .

$IsLinux

Azt tartalmazza $true , hogy az aktuális munkamenet Linux operációs rendszeren fut-e. Egyéb esetben a következőket tartalmazza $false: .

$IsMacOS

Azt tartalmazza $true , hogy az aktuális munkamenet MacOS operációs rendszeren fut-e. Egyéb esetben a következőket tartalmazza $false: .

$IsWindows

Azt tartalmazza $true , hogy az aktuális munkamenet Windows operációs rendszeren fut-e. Egyéb esetben a következőket tartalmazza $false: .

$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 pwsh 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 pwsh 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 parancs paraméterekkel kapcsolatos további információkért lásd: about_Pwsh.

$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 a rendszer nem állítja vissza a következőre $Matches $null: . A korábban egyeztetett érték megmarad, $Matches amíg egy másik egyezést nem talál.

$MyInvocation

Információkat tartalmaz az aktuális parancsról, például a névről, paraméterekről, paraméterértékekről, valamint a parancs indításának, meghívásának vagy meghívásának módjáról, például az aktuális parancsnak nevezett szkript nevéről.

$MyInvocation csak szkriptek, függvények és szkriptblokkok esetén van feltöltve. Az aktuális szkriptben visszaadott System.Management.Automation.InvocationInfo objektumban $MyInvocation található információk, például egy függvény ($MyInvocation.MyCommand.Name) neve alapján azonosíthatja az aktuális parancsot. Ez hasznos az aktuális szkript nevének megkereséséhez.

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

  • PSScriptRoot – Az aktuális parancsot meghívó szkript teljes elérési útját tartalmazza. A tulajdonság értéke csak akkor lesz feltöltve, ha a hívó szkript.
  • PSCommandPath – Az aktuális parancsot meghívó 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.

Az automatikus változó PSScriptRoot és PSCommandPath tulajdonságai $MyInvocation az $PSCommandPath $PSScriptRoot automatikus változótól eltérően az meghívó vagy a hívó szkript adatait tartalmazzák, nem pedig az aktuális szkriptet.

$NestedPromptLevel

Az aktuális parancssori 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 az aktuális 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

Az aktuális PowerShell-munkamenetet futtató folyamat folyamatazonosítóját (PID) tartalmazza.

$PROFILE

Az aktuális felhasználó és az aktuális gazdaalkalmazás PowerShell-profiljának 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 aktuális é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 paraméterek aktuális é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

A PowerShell 7-től $PSCulture kezdődően az aktuális PowerShell-futtatótér (munkamenet) kultúráját tükrözi. Ha egy PowerShell-futtatótérben megváltozik a kultúra, a rendszer frissíti a $PSCulture runspace értékét.

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 C:\Program Files\PowerShell\7 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 . Az aktuális objektumot tartalmazza a folyamatobjektumban. 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 System.Globalization.CultureInfo értéke.Current UICulture.Name rendszertulajdonság. 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 az aktuális munkamenetben futó PowerShell-verzió részleteit jeleníti meg. A táblázat a következő elemeket tartalmazza:

  • PSVersion – A PowerShell-verziószám
  • PSEdition Ez a tulajdonság a PowerShell 4-ben és alatta, valamint a PowerShell 5.1-ben a teljes funkcionalitású Windows-kiadásokhoz tartozó "Desktop" értékkel rendelkezik. Ez a tulajdonság a PowerShell 6-os és újabb verzióihoz, valamint a Core Windows PowerShell 5.1-hez hasonló csökkentett erőforrásigényű kiadásokban, például a Windows Nano Serverben vagy a Windows IoT-ben található.
  • GitCommitId – A forrásfájlok véglegesítési azonosítója a GitHubon,
  • Operációs rendszer – Annak az operációs rendszernek a leírása, amelyen a PowerShell fut.
  • Platform – Platform, amelyen az operációs rendszer fut. Linux és macOS rendszeren a Unix érték. Lásd $IsMacOs és $IsLinux.
  • PSCompatibleVersions – A PowerShell azon verziói, amelyek kompatibilisek az aktuális verzióval
  • PSRemotingProtocolVersion – A PowerShell távfelügyeleti protokolljának verziója.
  • 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 az aktuális PowerShell-futtatótér aktuális könyvtárhelyének teljes elérési útját jelöli.

Feljegyzés

A PowerShell folyamatonként több futtatóteret támogat. Minden runspace saját aktuális könyvtárral rendelkezik. Ez nem ugyanaz, mint a folyamat aktuális 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

Az aktuális rendszerhéj azonosítóját 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 az aktuális ciklus iterációjának 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őreléptetheti vagy visszaállíthatja az iterációt, 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 enumerátor aktuális pozíciójában 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 metódus használatával visszaállítja Reset a $input változót az aktuális folyamat értékére.

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 az Current aktuális 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 elérheti az aktuális gyűjteményelemet, valamint a Reset MoveNext metódusokat az érték módosításához.

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 gyűjtemény aktuális 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