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:
- $$
- $?
- $^
- $_
- $args
- $ConsoleFileName
- $Error
- $Event
- $EventArgs
- $EventSubscriber
- $ExecutionContext
- $false
- $foreach
- $HOME
- $Host
- $input
- $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
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 $PSItem
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.
$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.TimeGenerated
egy 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 ,
process
vagyend
blokk nélkülibegin
fü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 aend
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ó általexit
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
- A szkript meghív egy másik szkriptet, amely a kulcsszót
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 exit
a 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
$null
egy 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 $null
hasonló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
.
- A MoveNext hívása törli a 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 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