Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
A PowerShell által létrehozott és karbantartott állapotinformációkat tároló változókat ismerteti.
Hosszú leírás
Elméletileg a legtöbb változót inkább csak olvashatónak tekintik. Annak ellenére, hogy írhatók, a visszamenőleges kompatibilitás érdekében nem írni.
Íme a PowerShell automatikus változóinak listája:
$$$?$^$_$args$ConsoleFileName$EnabledExperimentalFeatures$Error$Event$EventArgs$EventSubscriber$ExecutionContext$false$foreach$HOME$Host$input$IsCoreCLR$IsLinux$IsMacOS$IsWindows$LASTEXITCODE$Matches$MyInvocation$NestedPromptLevel$null$PID$PROFILE$PSBoundParameters$PSCmdlet$PSCommandPath$PSCulture$PSDebugContext$PSEdition$PSHOME$PSItem$PSScriptRoot$PSSenderInfo$PSUICulture$PSVersionTable$PWD$Sender$ShellId$StackTrace$switch$this$true
$$
Tartalmazza az utolsó tokent, amelyet a munkamenet az utolsó sorban kapott meg.
$?
Az utolsó parancs végrehajtási állapotát tartalmazza. Tartalmazza a True értéket, ha az utolsó parancs sikeres volt, és a Hamis értéket, ha nem sikerült. Az elemzési hibák nem eredményeznek végrehajtást, ezért nem befolyásolják a $?értékét.
Olyan parancsmagok és speciális függvények esetében, amelyek egy folyamat több szakaszában futnak, például a process és end blokkokban, a this.WriteError() vagy $PSCmdlet.WriteError() hívása bármely ponton a $? értékét Hamis -re állítja, akárcsak a this.ThrowTerminatingError() és $PSCmdlet.ThrowTerminatingError()esetében.
A Write-Error parancsmag a végrehajtás után mindig a $?False értékre állítja, de nem állítja be a $?False értékre az azt hívó függvény esetében:
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 inkább $PSCmdlet.WriteError() kell használni.
Natív parancsok (végrehajthatók) esetén a $?True értékre van állítva, ha $LASTEXITCODE értéke 0, és False értékre van állítva, ha $LASTEXITCODE bármilyen más érték.
Jegyzet
A PowerShell 7-ig zárójelben (...), alkifejezés szintaxisa $(...)vagy tömbkifejezés @(...) mindig állítsa vissza $?Igaz. Például (Write-Error) mutatja $? mint Igaz. Ez a viselkedés megváltozott a PowerShell 7-ben, így a $? mindig a legutóbbi 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 $PSItem. Tartalmazza az aktuális objektumot 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áadhat egy vesszővel tagolt paraméterlistát a függvény neve után zárójelben.
Egy eseményműveletben a $args változó olyan objektumokat tartalmaz, amelyek a feldolgozandó esemény eseményargumentumait képviselik. Ezt a változót csak az eseményregisztrációs parancs Action blokkja tölti ki. A változó értéke a által visszaadott PSEventArgs objektum Get-Event 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, ha a PSConsoleFile paraméterrel indítja el a PowerShellt, vagy amikor a Export-Console parancsmaggal exportálja a beépülő modulok nevét egy konzolfájlba.
Ha a Export-Console parancsmagot paraméterek nélkül használja, 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 a ErrorAction gyakori paramétert, amelynek értéke Figyelmen kívül hagyja. További információért lásd about_CommonParameters.
$Event
Egy PSEventArgs objektumot tartalmaz, amely a feldolgozott eseményt jelöli. Ezt a változót csak egy eseményregisztrációs parancs Action blokkja tölti ki, például Register-ObjectEvent. Ennek a változónak az értéke ugyanaz az objektum, amelyet a Get-Event parancsmag ad vissza. A változó tulajdonságait használhatja Event például $Event.TimeGeneratedegy Action szkriptblokkban.
$EventArgs
Olyan objektumot tartalmaz, amely a feldolgozás alatt álló esemény EventArgs osztályából származó első eseményargumentumot jelképezi. Ezt a változót csak az eseményregisztrációs parancs Action blokkja tölti ki. A változó értéke a SourceEventArgsPSEventArgs objektum azon tulajdonságában is megtalálható, amelyet Get-Event visszaad.
$EventSubscriber
Egy PSEventSubscriber objektumot tartalmaz, amely a feldolgozott esemény esemény-előfizetőjét jelöli. Ezt a változót csak az eseményregisztrációs parancs Action blokkja tölti ki. Ennek a változónak az értéke ugyanaz az objektum, amelyet a Get-EventSubscriber parancsmag ad vissza.
$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
tartalmaz Hamis. A változó segítségével Hamis jelölhető parancsokban és szkriptekben a sztring "false"használata helyett. A sztring Igaz-ként értelmezhető, ha nem üres sztringgé vagy nem nulla egész számmá van alakítva.
$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 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óért lásd: Számlálók használata.
$HOME
A felhasználó kezdőkönyvtárának teljes elérési útját tartalmazza. Windows rendszeren ez a változó a "$Env:USERPROFILE" Windows környezeti változó értékét használja, általában C:\Users\<UserName>. 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 $HOME nem biztos, hogy ugyanaz az érték, mint "$Env:HOMEDRIVE$Env:HOMEPATH".
$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 parancsokban, vagy megjelenítheti vagy módosíthatja a gazdagép tulajdonságait, például $Host.Version vagy $Host.CurrentCulturevagy $Host.UI.RawUI.BackGroundColor = "Red".
Jegyzet
A $Host.PrivateData színbeállításai helyébe a $PSStyle beállítási változó lépett. További információkért lásd: 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
begin,processvagyendblokk nélküli függvényben a$inputváltozó számba adja a függvény összes bemenetének gyűjteményét.A
beginblokkban a$inputváltozó nem tartalmaz adatokat.A
processblokkban a$inputváltozó tartalmazza a folyamat aktuális objektumát.A
endblokkban a$inputváltozó számba adja a függvény összes bemenetének gyűjteményét.Jegyzet
A változó nem használható mind a
$inputprocessblokkban, mind aendblokkban ugyanabban a függvényben vagy szkriptblokkban.
Mivel a $input felsoroló, bármely tulajdonsága elérésének hatására a $input már nem érhető el. A $input egy másik változóban is tárolhatja a $input tulajdonságainak újrafelhasználásához.
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óért lásd: Számlálók használata.
A $input változó a parancssorból való meghíváskor a -Commandpwsh paramétere által 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
$true tartalmaz, ha az aktuális munkamenet a .NET Core Futtatókörnyezetben (CoreCLR) fut. Egyéb esetben $falsetartalmaz.
$IsLinux
$true tartalmaz, ha az aktuális munkamenet Linux operációs rendszeren fut.
Egyéb esetben $falsetartalmaz.
$IsMacOS
$true tartalmaz, ha az aktuális munkamenet macOS operációs rendszeren fut.
Egyéb esetben $falsetartalmaz.
$IsWindows
$true tartalmaz, ha az aktuális munkamenet Windows operációs rendszeren fut. Egyéb esetben $falsetartalmaz.
$LASTEXITCODE
A legutóbb futtatott natív program vagy PowerShell-szkript kilépési kódját tartalmazza.
PowerShell-szkriptek esetén a $LASTEXITCODE értéke a szkript meghívásától és a exit kulcsszó használatától függ:
Ha egy szkript a
exitkulcsszót használja:$LASTEXITCODEaexitkulcsszó által megadott értékre van beállítva. További információért tekintse meg az about_Language_Keywordsrészt.Ha egy szkriptet közvetlenül hívnak meg, például
./Test.ps1, vagy a hívó operátorral (&), mint a(z)& ./Test.ps1esetében:A
$LASTEXITCODEértéke csak akkor változik, ha:- A szkript meghív egy másik szkriptet, amely a
exitkulcsszót használja - A szkript natív parancsot hív meg
- A szkript a
exitkulcsszót használja
- A szkript meghív egy másik szkriptet, amely a
Ha
pwsha Fájl paraméterrel meghív egy szkriptet, a$LASTEXITCODEa következőre van állítva:-
1, ha a szkript kivétel miatt leállt - A szkriptben használt
exitkulcsszó által megadott érték -
0, ha a szkript sikeresen befejeződött
-
Ha egy szkriptet
pwshhív meg a Command paraméterrel, a$LASTEXITCODEa következőre van állítva:-
1, ha a szkript kivétel miatt leállt, vagy ha az utolsó parancs eredménye$?lett$false -
0, ha a szkript sikeresen befejeződött, és az utolsó parancs eredménye$?-ről$true-re változott
-
A Fájl és Parancs paraméterekkel kapcsolatos további információkért lásd: about_Pwsh.
$Matches
A $Matches változó a -match és -notmatch operátorokkal működik. Amikor skaláris bemenetet küld a -match vagy -notmatch operátornak, és bármelyik észleli az egyezést, logikai értéket adnak vissza, és feltöltik a $Matches automatikus változót a megfeleltetendő sztringértékek kivonattáblájával. A $Matches kivonattáblát akkor is feltöltheti rögzítésekkel, ha a -match operátorral normál kifejezéseket használ.
A -match operátorral kapcsolatos további információkért nézze meg a about_Comparison_Operatorsrészt. A reguláris kifejezésekről további információt a about_Regular_Expressionscí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 a -match és a -notmatch műveletek. A switch utasítással kapcsolatos további információkért lásd: about_Switch.
Jegyzet
Ha $Matches egy munkamenetben töltődik fel, megőrzi a megfeleltetett értéket, amíg egy másik megfelelés felül nem írja. Ha a -match-t ismét használják, és nem talál egyezést, akkor nem állítja vissza a $Matches-t $null-re. A korábban egyeztetett érték $Matches marad, 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 System.Management.Automation.InvocationInfo objektumban található információkat, amelyeket $MyInvocation az aktuális szkriptben ad vissza, például 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 kezdődően a MyInvocation az alábbi ú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.
Az $PSScriptRoot és $PSCommandPath automatikus változókkal ellentétben a PSScriptRoot és PSCommandPath tulajdonságai az $MyInvocation automatikus változó esetében az indítóról vagy hívó szkriptről tartalmaznak információt, nem az aktuális szkriptről.
$NestedPromptLevel
Az aktuális prompt szintet tartalmazza. A 0 érték az eredeti parancssori szintet jelzi. Az érték növekszik, amikor belépsz egy beágyazott szintre, és csökken, amikor kilépsz onnan.
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 parancssorhoz való visszatéréshez töltse ki a parancsot, vagy írja be a exit.
A $NestedPromptLevel változó segít nyomon követni a prompt szintet. Létrehozhat egy másik 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 a $null értékekkel vagy helyőrzőkkel rendelkező objektumként kezeli, így a $null használatával üres értékeket jelölhet egy értékgyűjteményben.
Ha például $null szerepel egy gyűjteményben, akkor az objektumok egyikének számít.
$a = "one", $null, "three"
$a.Count
3
Ha a $null változót a ForEach-Object parancsmagra csövezi, akkor a $nullértéket hoz létre, ugyanúgy, mint a többi objektum esetében.
"one", $null, "three" | ForEach-Object {"Hello " + $_}
Hello one
Hello
Hello three
Ennek eredményeképpen nem használhatja a $null értéket paraméterérték nélküliként. A $null paraméterértéke 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 parancsot használva 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 a Test1 függvénynek. A $PSBoundParameters elemek a Kulcs és a Értékformá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 hozzáadja a WhatIf és Erősítse meg paramétereket a parancsmaghoz dinamikusan.
Az $PSCmdlet automatikus változóval kapcsolatos 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-től kezdődően $PSCulture 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 az adott runspace $PSCulture é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 Get-Culture használatával megjelenítheti a számítógép kulturális környezetét.
$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 egy PsDebugContext objektumot tartalmaz, 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 Hely tulajdonság a hibakeresés alatt álló szkript elérési útját jelzi.
$PSEdition
Ugyanazt az értéket tartalmazza a $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 a Windows rendszerekben C:\Program Files\PowerShell\7. Ezt a változót a PowerShell-fájlok elérési útjaiban használhatja. Például az alábbi parancs a Súgószót keresi a fogalmi súgótémakörök között.
Select-String -Pattern Help -Path $PSHOME\en-US\*.txt
$PSItem
Ugyanaz, mint $_. Tartalmazza az aktuális objektumot 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, ApplicationArguments, amely alapértelmezés szerint csak az eredeti munkamenetből származó $PSVersionTable tartalmazza. Ha adatokat szeretne hozzáadni az ApplicationArguments tulajdonsághoz, használja a parancsmag New-PSSessionOption paraméterét.
Fontos
Mivel ez a tulajdonság kifejezetten az ügyfél által megadott adatokat tartalmaz, biztonsági döntésekhez használva a támadók megkerülhetik az engedélyezési vezérlőket. Soha ne használja ezeket az adatokat megbízhatósági döntésekhez. Ellenőrizze az összes felhasználói bemenetet , ha más alkalmazáslogikához használják.
$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 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 Windows PowerShell 5.1-hez
Coreértékkel rendelkezik olyan csökkentett erőforrásigényű kiadásokon, mint a Windows Nano Server vagy a Windows IoT. - 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 – Az operációs rendszer által futtatott platform. Linux és macOS alatt az érték Unix. Lásd:
$IsMacOSés$IsLinux. - PSCompatibleVersions – Az aktuális verzióval kompatibilis PowerShell-verziók
- PSRemotingProtocolVersion – A PowerShell távfelügyeleti protokolljának verziója.
- SerializationVersion – 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.
Jegyzet
A PowerShell folyamatonként több futtatóteret támogat. Minden futtatótér saját jelenlegi könyvtárral. 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. Ennek a változónak az értéke a PSEventArgs objektum feladó tulajdonságában is megtalálható, amelyet a Get-Event visszaad.
$ShellId
Az aktuális rendszerhéj azonosítóját tartalmazza.
$StackTrace
A legutóbbi hiba veremkövetését tartalmazza.
$switch
A switch utasítás eredményei helyett az enumerátort tartalmazza. A $switch változó csak akkor létezik, ha a switch utasítás fut; akkor törlődik, amikor a switch utasítás végrehajtja a végrehajtást. 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óért lásd: Számlálók használata.
$this
A $this változó olyan szkriptblokkokban használatos, amelyek az osztályokat kiterjesztve magukra az osztálypéldányra hivatkoznak.
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ókért lásd a about_Types.ps1xmlrészt.
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óért lásd a about_Classesrészt.
A $this változót azok a .NET-eseményosztályok is használják, amelyek szkriptblokkokat használnak az eseménykezelő delegáltjaiké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
Igaztartalmaz. Az Igaz értéket ezzel a változóval jelölheti parancsokban és szkriptekben.
Enumerátorok használata
A $input, $foreachés $switch változók mind olyan 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 közül a break és a continue parancsokat.
A folyamatbemenetet elfogadó függvényekben ajánlott paramétereket használni a ValueFromPipeline vagy ValueFromPipelineByPropertyName attribútumokkal.
További információért lásd a about_Functions_Advanced_Parameterscímű részt.
Következő lépés
A MoveNext metódus a gyűjtemény következő elemére viszi tovább az enumerátort.
MoveNextTrue ad vissza, ha az enumerátor sikeresen haladt, False, ha az enumerátor túllépte a gyűjtemény végét.
Jegyzet
A MoveNext által visszaadott logikai értéket a rendszer elküldi a kimeneti streambe.
A kimenet elnyomásához végezze el a [void] típuskonverziót, vagy irányítsa át a Out-Nullparancsba.
$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ő elemének előtt.
Current
A Current tulajdonság megszerzi a gyűjteményben vagy a csővezetékben található elemet az enumerátor aktuális pozíciójában.
A Current tulajdonság mindaddig ugyanazt a tulajdonságot adja vissza, amíg MoveNext nem hívja meg.
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ódussal visszaállítja a $input változót 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 $input változó a függvénybe becsatolt összes értéket jelöli.
- A
$inputváltozó elérése törli az ö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 léptethető tovább.
- A MoveNext hívása törli a
$inputváltozót.
- A MoveNext hívása törli a
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 Current tulajdonsággal az 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 töltődik, kivéve ha kifejezetten meghívja a MoveNext-t. A Current tulajdonság többször is elérhető a folyamatblokkban az érték 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
A $input 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. A Current tulajdonság használatával érheti el az aktuális gyűjteményelemet, valamint a Reset és MoveNext metódust az érték módosításához.
Jegyzet
A foreach ciklus minden iterációja 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ényen ($Num) keresztüli iteráláshoz 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
A Reset metódus használatával alaphelyzetbe állítja a gyűjtemény aktuális elemét. Az alábbi példa kétszer végigmegy az első két elemen , mert a Reset metódus hívásra kerül. Az első két ciklus után a if utasítás meghiúsul, és a ciklus á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ó pontosan ugyanazokkal a szabályokkal rendelkezik, mint a $foreach változó. Az alábbi példa az összes enumerátori fogalmat szemlélteti.
Jegyzet
Figyelje meg, hogy a NemÉrtékelt eset végre nem hajtódik, annak ellenére, hogy utána a break metódus után nincs 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