about_Automatic_Variables

Rövid leírás

A PowerShell állapotinformációit tároló változókat ismerteti. Ezeket a változókat a PowerShell hozza létre és tartja karban.

Hosszú leírás

Elméletileg ezek a változók írásvédettnek minősülnek. 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:

$$

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

$?

Az utolsó parancs végrehajtási állapotát tartalmazza. Igaz értéket tartalmaz , ha az utolsó parancs sikeres volt, és Hamis értéket, ha nem sikerült.

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, a hívás this.WriteError() vagy $PSCmdlet.WriteError() bármely időpontban False (Hamis) értékre van állítva$?, ahogy a és $PSCmdlet.ThrowTerminatingError()a is.this.ThrowTerminatingError()

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

function Test-WriteError
{
    Write-Error "Bad"
    $? # $false
}

Test-WriteError
$? # $true

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

Natív parancsok (végrehajtható fájlok) $? esetén a értéke Igaz , ha $LASTEXITCODE 0, és False (Hamis ) értékre, ha $LASTEXITCODE bármilyen más értékről van szó.

Megjegyzés

Amíg a PowerShell 7-ig, amely zárójelben tartalmaz egy utasítást, a szubexpressziós (...)szintaxis $(...) vagy a tömbkifejezés @(...) mindig True (Igaz) értékre nem áll vissza$?, így az (Write-Error)Igaz értékként jelenik meg$?. Ez megváltozott a PowerShell 7-ben, így $? mindig az utolsó parancsfuttatás sikerességét tükrözi ezekben a kifejezésekben.

$^

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

$_

Ugyanaz, mint a $PSItem. A folyamatobjektum aktuális objektumát tartalmazza. Ezt a változót olyan parancsokban használhatja, amelyek egy folyamat minden objektumán végrehajtanak egy műveletet.

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 elválasztott 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 feldolgozott esemény eseményargumentumait képviselik. Ez a változó csak az Action eseményregisztrációs parancs blokkjában van feltöltve. A változó értéke a visszaadott PSEventArgs objektum Get-EventSourceArgs tulajdonságában 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, amikor elindítja a PowerShellt a PSConsoleFile paraméterrel, 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

A jelenleg 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 a Kihagyás értékkel. További információ: about_CommonParameters.

$Event

Egy PSEventArgs objektumot tartalmaz, amely a feldolgozott eseményt jelöli. Ez a változó csak egy Action eseményregisztrációs parancs blokkjában van feltöltve, például Register-ObjectEvent: . Ennek a változónak az értéke ugyanaz az objektum, amelyet a parancsmag ad Get-Event vissza. A változó tulajdonságait Event ( például $Event.TimeGenerated) egy szkriptblokkban Action használhatja.

$EventArgs

Olyan objektumot tartalmaz, amely a feldolgozandó esemény EventArgs függvényéből származtatott első eseményargumentumot jelöli. Ez a változó csak az Action eseményregisztrációs parancs blokkjában van feltöltve. A változó értéke a visszaadott PSEventArgs objektumGet-EventSourceEventArgs tulajdonságában is megtalálható.

$EventSubscriber

Egy PSEventSubscriber objektumot 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 blokkjában van feltöltve. Ennek a változónak az értéke ugyanaz az objektum, amelyet a parancsmag ad Get-EventSubscriber vissza.

$ExecutionContext

Tartalmaz egy EngineIntrinsics objektumot, 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 parancsokban és szkriptekben a False (Hamis) értéket jelölheti a sztring "false"használata helyett. A sztring igazként értelmezhető, ha nem üres sztringgé vagy nem nulla egész számmá konvertálja.

$foreach

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

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek felhasználhatók a ciklusértékek lekérésére és az aktuális ciklus iterációjának módosítására. 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 a "$env:USERPROFILE" Windows környezeti változó értékét használja.C:\Users\<UserName> A Unix esetében 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 a $env:HOMEDRIVE$env:HOMEPATHértéke.

$Host

Egy 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 parancsokban, vagy megjelenítheti vagy módosíthatja a gazdagép tulajdonságait, például $Host.version vagy $Host.CurrentCulture, vagy $host.UI.RawUI.SetBackGroundColor("Red").

$input

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

  • A , processvagy end blokk nélküli beginfüggvényekben 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 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.

    Megjegyzés

    Nem használhatja a változót $input a process blokkban és a end blokkban ugyanabban a függvényben vagy szkriptblokkban.

Mivel $input ez egy enumerátor, a tulajdonságainak elérése miatt $input a továbbiakban nem lesz elérhető. 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 felhasználhatók a ciklusértékek lekérésére és az aktuális ciklus iterációjának módosítására. További információ: Enumerátorok használata.

A $input változó a paraméter által -Commandpwsh megadott parancs számára is elérhető, amikor a parancssorból meghívja. 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 a .NET Core-futtatókörnyezeten (CoreCLR) fut-e. Ellenkező esetben a tartalmazza a parancsot $False.

$IsLinux

Azt tartalmazza $True , hogy az aktuális munkamenet Linux operációs rendszeren fut-e. Ellenkező esetben a tartalmazza a parancsot $False.

$IsMacOS

Azt tartalmazza $True , hogy az aktuális munkamenet MacOS operációs rendszeren fut-e. Ellenkező esetben a tartalmazza a parancsot $False.

$IsWindows

Azt tartalmazza $TRUE , hogy az aktuális munkamenet Windows operációs rendszeren fut-e. Ellenkező esetben a tartalmazza a parancsot $FALSE.

$LASTEXITCODE

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

PowerShell-szkriptek esetén a értéke $LASTEXITCODE attól függ, hogy a szkript hogyan lett meghívva, és hogy a exit kulcsszót használták-e:

  • Ha egy szkript a kulcsszót exit használja, $LASTEXITCODE a megadott értékre van állítva, függetlenül attól, hogy a szkript hogyan lett meghívva. További információ: about_Language_Keywords.
  • Ha egy szkriptet közvetlenül, például ./Test.ps1, vagy a hívó operátorral (&) & ./Test.ps1hív meg , akkor az értéke $LASTEXITCODE nem változik.
  • Amikor meghív egy szkriptet a paranccsal és a File paraméterrelpwsh, a értéke $LASTEXITCODE értékre 1 van állítva, ha a szkript egy kidobott kivétel miatt leállt, és 0 egyéb esetben.

$Matches

A $Matches változó a és -notmatch az -match operátorral működik. Amikor skaláris bemenetet küld az vagy -notmatch operátornak-match, és bármelyik észleli az egyezést, azok logikai értéket adnak vissza, és feltöltik az $Matches automatikus változót az egyeztetett sztringértékek kivonattáblájával. A $Matches kivonattáblát akkor is feltöltheti 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: -matchabout_Comparison_Operators. A reguláris kifejezésekről további információt a about_Regular_Expressions című témakörben 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 és -notmatch az -match operátor. A utasítással kapcsolatos további információkért switch lásd: about_Switch.

Megjegyzés

Amikor $Matches egy munkamenetben fel van töltve, 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, nem áll 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 elindításának, meghívásának vagy meghívásának módjáról, például az aktuális parancsot meghívó szkript nevéről.

$MyInvocation csak szkriptekhez, függvényekhez és szkriptblokkokhoz van feltöltve. Az aktuális szkriptben visszaadott System.Management.Automation.InvocationInfo objektumban $MyInvocation található információk, például a szkript elérési útja és fájlneve ($MyInvocation.MyCommand.Path) vagy egy függvény neve ($MyInvocation.MyCommand.Name) segítségével 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 a következő új tulajdonságokkal rendelkezik.

  • 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.

A és $PSCommandPath az $PSScriptRoot automatikus változókkal ellentétben az automatikus változó PSScriptRoot és PSCommandPath tulajdonságai $MyInvocation nem az aktuális szkriptről, hanem a meghívóról vagy a hívó szkriptről tartalmaznak információkat.

$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 egy 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 (legfeljebb 128 szint) létrehozásához vagy az eredeti parancssorba való visszatéréshez hajtsa végre a parancsot, vagy írja be a következőt exit: .

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

$null

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

A PowerShell objektumként, azaz explicit helyőrzőként kezeli $null az objektumot, így egy értéksorozat üres értékeit ábrázolhatja $null .

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

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

Ha a változót a $nullForEach-Object parancsmagba csövezi, az a többi objektumhoz hasonlóan létrehoz egy értéket $nulla számára.

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

Ennek eredményeképpen nem használhatja $null a paraméterértékek nélküli értéket. 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, használhatja az alábbihoz hasonló szkriptekben, amelyek figyelmen kívül hagyása esetén nem működne $null .

$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 meghatározá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 paranccsal 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 szkripttel vagy függvénnyel. 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 $PSBoundParameterselemet a Test1 függvénynek. A $PSBoundParameters érték kulcs és érték formátumban jelenik 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 lévő objektum tulajdonságai és metódusai segítségével reagálhat a használati feltételekre. A ParameterSetName tulajdonság például tartalmazza a használt paraméterkészlet nevét, a ShouldProcess metódus pedig dinamikusan adja hozzá a WhatIf és a Confirm paramétereket a parancsmaghoz.

Az automatikus változóval kapcsolatos $PSCmdlet további információkért lásd: 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-ben $PSCulture kezdődően az aktuális PowerShell-futtatótér (munkamenet) kulturális környezetét tükrözi. Ha a kulturális környezet megváltozik egy PowerShell-runspace-ben, a rendszer frissíti a $PSCulture runspace értékét.

A kulturális környezet 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 használatával Get-Culture megjelenítheti a számítógép kulturális környezetét. $PSCulture A a Name tulajdonság értékét tartalmazza.

$PSDebugContext

Hibakeresés közben 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éspontok és InvocationInfo tulajdonságokkal rendelkezik. Az InvocationInfo tulajdonság számos hasznos tulajdonsággal rendelkezik, köztük a Location tulajdonsággal. A Location (Hely ) tulajdonság a hibakeresés alatt álló szkript elérési útját jelzi.

$PSEdition

Ugyanazt az értéket tartalmazza a fájlban $PSVersionTable.PSEdition. Ez a változó a modul jegyzékfájljaiban használható, míg $PSVersionTable az 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 rendszerekben. Ezt a változót a PowerShell-fájlok elérési útjaiban használhatja. A következő parancs például a változó szófogalmi súgótémakörökben keres:

Select-String -Pattern Variable -Path $pshome\*.txt

$PSItem

Ugyanaz, mint a $_. A folyamatobjektum aktuális objektumát tartalmazza. Ezt a változót olyan parancsokban használhatja, amelyek műveletet hajtanak végre a 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ó identitását é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ó tartalmazza a felhasználó által konfigurálható 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 parancsmag ApplicationArguments paraméterét New-PSSessionOption .

$PSUICulture

Az operációs rendszerben jelenleg haszná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 rendszer tulajdonságát. A rendszer System.Globalization.CultureInfo objektumának lekéréséhez használja a Get-UICulture parancsmagot.

$PSVersionTable

Egy írásvédett kivonattáblát 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áma
  • PSEdition Ez a tulajdonság a PowerShell 4-hez és az alatta lévő "Desktop" értékhez, valamint a PowerShell 5.1-hez tartozik a teljes kiemelt Windows-kiadásokon. Ez a tulajdonság a Core PowerShell 6-os és újabb verzióihoz, valamint Windows PowerShell 5.1-et a csökkentett erőforrásigényű kiadásokhoz, például a Windows Nano Serverhez vagy a Windows IoT-hoz.
  • 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 jelenlegi verziójával kompatibilis verziói
  • PSRemotingProtocolVersion – A PowerShell távfelügyeleti protokolljának verziója.
  • SzerializálásVersion – A szerializálási módszer verziója
  • WSManStackVersion – A WS-Management verem verziószáma

$PWD

Olyan 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.

Megjegyzés

A PowerShell folyamatonként több futtatóteret is 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űveletblokkjában van feltöltve. A változó értéke a visszaadott PSEventArgs objektum Get-Event Sender tulajdonságában 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

Nem egy utasítás eredményértékét, hanem az enumerátort Switch tartalmazza. A $switch változó csak akkor létezik, ha az Switch utasítás fut; a rendszer törli, amikor az utasítás befejezi a switch végrehajtást. További információ: about_Switch.

Az enumerátorok olyan tulajdonságokat és metódusokat tartalmaznak, amelyek segítségével lekérheti a hurokértékeket, és módosíthatja az aktuális hurok iterációt. További információ: Enumerátorok használata.

$this

A $this változót olyan szkriptblokkokban használják, amelyek kiterjesztik az osztályokat, 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 definiáló 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, így hozzáférést biztosít az osztályban definiált tulajdonságokhoz és metódusokhoz. 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ója.

$true

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

Enumerátorok használata

A $input, $foreachés $switch változók mind enumerátorok, amelyek a kódblokkjuk á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 alaphelyzetbe á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 tekinthető ajánlott eljárásnak.

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

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

    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 teljesítette a gyűjtemény végét.

Megjegyzés

A MoveNext által visszaadott logikai érték a kimeneti streambe lesz elküldve. A kimenetet letilthatja úgy, hogy begépeli a kimenetet [void] , vagy out-null értékűre ássa.

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

Reset

A Reset metódus az enumerátort a kezdeti pozíció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 a MoveNext meghívásáig továbbra is ugyanazt a tulajdonságot adja vissza.

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 alaphelyzetbe Reset állítja a változót $input az aktuális folyamatértékre.

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épteti a $input változót, még akkor is, ha nem fér hozzá.

$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 csövezve lévő ö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 töltődik fel.
  • 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 $input változót.
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 Tulajdonság

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 kitöltve, hacsak nem hívja meg explicit módon a MoveNextet. A Current tulajdonság többször is elérhető a folyamatblokkon belül anélkül, hogy az értékét törölték.

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 az aktuális gyűjteményelemhez, és a és a ResetMoveNext metódussal módosíthatja az értékét.

Megjegyzés

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

A következő hurok csak kétszer fut le. A második iterációban a rendszer az iteráció befejezése előtt áthelyezi a gyűjteményt a harmadik elemre. A második iteráció után már nincs több érték az iteráláshoz, és a hurok leáll.

A MoveNext tulajdonság nincs hatással a gyűjteményen () keresztüli iterálásra kiválasztott változóra.$Num

$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 has not changed: $num"
    }
}
Iteration: 0
        Num: one
        Current: one
Iteration: 1
        Num: two
        Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num has not 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égighalad az első két elemen, 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 végighalad mindhárom elemen.

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() | Out-Null
        ("`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ó pontosan ugyanazokkal a szabályokkal rendelkezik, mint a $foreach változó. Az alábbi példa az enumerátor fogalmait mutatja be.

Megjegyzé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