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
Ismerteti a PowerShell hatókörének fogalmát, és bemutatja, hogyan állíthatja be és módosíthatja az elemek hatókörét.
Hosszú leírás
A PowerShell azzal védi a változókhoz, aliasokhoz, függvényekhez és PowerShell-meghajtókhoz (PSDrive-ok) való hozzáférést, hogy korlátozza azok olvasási és módosítási helyét. A PowerShell hatókörszabályokat használ annak biztosítására, hogy a más hatókörökben lévő elemeken ne hajtson végre véletlen módosításokat.
Hatókörszabályok
A PowerShell indításakor a gazdagép (pwsh.exe) létrehoz egy PowerShell-futtatóteret.
A gazdagépfolyamatok több futtatóteret is tartalmazhatnak. Minden futtatótér saját munkamenet-állapotú és hatókörtárolókkal rendelkezik. A munkamenet állapota és hatókörei nem érhetők el a futtatókörnyezet példányai között.
A hatókör alapvető szabályai a következők:
- A hatókörök beágyazhatók. A külső hatókört szülőhatókörnek nevezzük. A beágyazott hatókörök az adott szülő gyermek hatókörei.
- Az elemek a létrehozott hatókörben és a gyermekhatókörökben is láthatók, hacsak nem teszi kifejezetten privátsá.
- Az aktuális hatókörön kívüli hatókörhöz deklarálhat változókat, aliasokat, függvényeket és PowerShell-meghajtókat.
- A hatókörön belül létrehozott elemek csak abban a hatókörben módosíthatók, amelyben létrehozták, kivéve, ha explicit módon más hatókört ad meg.
- Amikor egy runspace-ben futó kód egy elemre hivatkozik, a PowerShell megkeresi a hatókörhierarchiát, kezdve az aktuális hatókörrel, és halad végig az egyes szülőhatókörön. Ha az elem nem található, a rendszer új elemet hoz létre az aktuális hatókörben. Ha talál egyezést, a rendszer lekéri az elem értékét abból a hatókörből, ahol megtalálható. Ha módosítja az értéket, az elem az aktuális hatókörbe másolt, hogy a módosítás csak az aktuális hatókörre legyen hatással.
- Ha kifejezetten olyan elemet hoz létre, amely a nevét egy másik hatókörben lévő elemgel osztja meg, előfordulhat, hogy az eredeti elemet elrejti az új elem, de nem bírálja felül vagy módosítja.
Szülő- és gyermekhatókörök
Egy szkript vagy függvény meghívásával létrehozhat egy új gyermekhatókört. A hívó hatókör a szülőhatókör. Az úgynevezett szkript vagy függvény a gyermek hatóköre. A hívott függvények vagy szkriptek más függvényeket is meghívhatnak, és olyan gyermekhatókörök hierarchiáját hozhatják létre, amelyek gyökér hatóköre a globális hatókör.
Jegyzet
A modulból származó függvények nem futnak a hívó hatókör gyermek hatókörében. A modulok saját munkamenet-állapotukkal rendelkeznek, amely ahhoz a hatókörhöz van társítva, amelyben a modult importálták. Minden modulkód a saját gyökérhatókörrel rendelkező hatókörök modulspecifikus hierarchiájában fut. További információt a cikk modulok szakaszában talál.
A gyermekhatókör létrehozásakor az összes olyan aliast és változót tartalmazza, amely rendelkezik az AllScope beállítással, valamint néhány automatikus változóval. Ezt a lehetőséget a cikk későbbi részében tárgyaljuk.
Ha nem teszi kifejezetten privátsá az elemeket, a szülő hatókörben lévő elemek elérhetők a gyermekhatókör számára. A gyermekhatókörben létrehozott vagy módosított elemek nem érintik a szülő hatókört, kivéve, ha explicit módon adja meg a hatókört az elemek létrehozásakor.
Egy adott hatókör elemeinek megkereséséhez használja a Get-Variable vagy Get-AliasHatókör paraméterét.
Ha például az összes változót le szeretné kapni a helyi hatókörben, írja be a következőt:
Get-Variable -Scope local
A globális hatókör összes változójának lekéréséhez írja be a következőt:
Get-Variable -Scope global
Amikor változóra, aliasra vagy függvényre hivatkozik, a PowerShell megkeresi az aktuális hatókört. Ha az elem nem található, a rendszer megkeresi a szülőhatókört. Ez a keresés a globális hatókörig ismétlődik. Ha egy változó privát egy szülőhatókörben, a keresés a hatókörláncon keresztül folytatódik. 4. példa egy privát változó hatását jeleníti meg a hatókör-keresésben.
PowerShell-hatókörök nevei
A PowerShell definiálja egyes hatókörök nevét, hogy könnyebb legyen az adott hatókörhöz való hozzáférés. A PowerShell a következő elnevezett hatóköröket határozza meg:
- globális: A PowerShell indításakor vagy új munkamenet vagy futtatótér létrehozásakor érvényes hatókör. A PowerShell indításakor jelen lévő változók és függvények, például az automatikus változók és a beállítási változók a globális hatókörben jönnek létre. A PowerShell-profilok változói, aliasai és függvényei szintén a globális hatókörben jönnek létre. A globális hatókör a fő szülőhatókör egy runspace-ben.
- Helyi: Az aktuális hatókör. A helyi hatókör lehet a globális vagy bármely más hatókör.
- szkript: A szkriptfájl futtatásakor létrehozott hatókör. A szkript parancsai a szkript hatókörében futnak. A szkript parancsai esetében a szkript hatóköre a helyi hatókör.
A hatóköröket támogató parancsmagok esetében a hatókörökre olyan szám hivatkozhat, amely az egyik hatókör egymáshoz viszonyított pozícióját írja le. A 0. hatókör az aktuális (helyi) hatókört jelöli, az 1. hatókör az aktuális hatókör szülője, a 2. hatókör az aktuális hatókör nagyszülője. Ez a minta addig folytatódik, amíg el nem éri a gyökértartományt.
Hatókör-módosítók
A változók, aliasok vagy függvénynevek a következő választható hatókörmódosítók bármelyikét tartalmazhatják:
global:– Azt adja meg, hogy a név szerepel-e a Globális hatókörben.local:– Megadja, hogy a név szerepel-e a Helyi hatókörben. Az aktuális hatókör mindig a Helyi hatókör.private:– Azt adja meg, hogy a név Privát, és csak az aktuális hatókör számára látható.Jegyzet
private:nem hatókör. Ez egy lehetőség,, amely módosítja egy elem akadálymentességét azon hatókörön kívül, amelyben definiálva van.script:– Megadja, hogy a név szerepel-e a szkript hatókörében. szkript hatókör az ősszkriptfájl hatóköre, vagy globális, ha nincs legközelebbi ősszkriptfájl.using:- Egy másik hatókörben definiált változók elérésére szolgál, miközben szkripteket futtat olyan parancsmagokon keresztül, mint aStart-JobésInvoke-Command.workflow:– Azt adja meg, hogy a név létezik-e egy munkafolyamaton belül. Megjegyzés: A munkafolyamatok nem támogatottak a PowerShell 6-os és újabb verzióiban.<variable-namespace>– Egy PowerShell-PSDrive szolgáltató által létrehozott módosító. Például:Namespace Leírás Alias:Az aktuális hatókörben definiált aliasok Env:Az aktuális hatókörben definiált környezeti változók Function:Az aktuális hatókörben definiált függvények Variable:Az aktuális hatókörben definiált változók
A szkriptek alapértelmezett hatóköre a szkript hatóköre. A függvények és aliasok alapértelmezett hatóköre a helyi hatókör, még akkor is, ha szkriptben vannak definiálva.
Hatókör-módosítók használata
Egy új változó, alias vagy függvény hatókörének megadásához használjon hatókör-módosítót.
A változó hatókör-módosítójának szintaxisa a következő:
$[<scope-modifier>:]<name> = <value>
Egy függvény hatókör-módosítójának szintaxisa a következő:
function [<scope-modifier>:]<name> {<function-body>}
Az alábbi parancs, amely nem használ hatókör-módosítót, létrehoz egy változót az aktuális vagy helyi hatókörben:
$a = "one"
Ha ugyanazt a változót szeretné létrehozni a globális hatókörben, használja a hatókör global: módosító értékét:
$global:a = "one"
Get-Variable a | Format-List *
Figyelje meg a Láthatósági és Beállítások tulajdonságértékeket.
Name : a
Description :
Value : one
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {}
Hasonlítsa össze ezt egy privát változóval:
$private:pVar = 'Private variable'
Get-Variable pVar | Format-List *
A private hatókör-módosító használatával a Beállítások tulajdonságot Privateértékre állítja.
Name : pVar
Description :
Value : Private variable
Visibility : Public
Module :
ModuleName :
Options : Private
Attributes : {}
Ha ugyanazt a változót szeretné létrehozni a szkriptben hatókörben, használja a script: hatókör-módosítót:
$script:a = "one"
A hatókör-módosító függvényekkel is használható. A következő függvénydefiníció létrehoz egy függvényt a globális hatókörben:
function global:Hello {
Write-Host "Hello, World"
}
A hatókör-módosítók használatával egy másik hatókörben lévő változóra is hivatkozhat.
A következő parancs a $test változóra hivatkozik, először a helyi hatókörben, majd a globális hatókörben:
$test
$global:test
A using: hatókör-módosító
A használat egy speciális hatókör-módosító, amely egy helyi változót azonosít egy távoli parancsban. Módosító nélkül a PowerShell elvárja, hogy a távoli parancsok változói definiálva legyenek a távoli munkamenetben.
A using hatókör-módosító a PowerShell 3.0-s kiadásában érhető el.
Minden olyan szkripthez vagy parancshoz, amely munkameneten kívül fut, a using hatókör-módosítóra van szüksége a változóértékek beágyazásához a hívási munkamenet hatóköréből, hogy a munkameneten kívüli kód hozzáférhessen hozzájuk. A using hatókör-módosító a következő környezetekben támogatott:
- Távolról végrehajtott parancsok,
Invoke-Commanda ComputerName, HostName, SSHConnection vagy Session paramétereinek használatával (távoli munkamenet) - A
Start-Job(folyamaton kívüli munkamenet) kezdetű háttérfeladatok - Szálfeladatok, amelyeket a
Start-ThreadJobvagyForEach-Object -Parallelhasználatával indítottak el (külön szál munkamenet)
A környezettől függően a beágyazott változóértékek vagy a hívó hatókörében lévő adatok független másolatai, vagy azokra mutató hivatkozások. A távoli és a folyamaton kívüli munkamenetekben mindig független másolatok.
A további információkért lásd: about_Remote_Variables.
A szál-munkamenetekben a program hivatkozással továbbítja őket. Ez azt jelenti, hogy a gyermekhatókör változói módosíthatók egy másik szálon. A változók biztonságos módosításához szálszinkronizálás szükséges.
További információ:
Változóértékek szerializálása
A távolról végrehajtott parancsok és háttérfeladatok folyamaton kívül futnak. A folyamaton kívüli munkamenetek XML-alapú szerializálással és deszerializálással teszik elérhetővé a változók értékeit a folyamathatárok között. A szerializálási folyamat átalakítja az objektumokat egy PSObject, amely az eredeti objektumtulajdonságokat tartalmazza, a metódusait azonban nem.
Korlátozott típusok esetén a deszerializálás visszahidratálja az objektumokat az eredeti típusra. A rehidratált objektum az eredeti objektumpéldány másolata. Típustulajdonságokkal és metódusokkal rendelkezik. Az olyan egyszerű típusok esetében, mint például System.Version, a másolat pontos. Összetett típusok esetén a másolat nem tökéletes. A rehidratált tanúsítványobjektumok például nem tartalmazzák a titkos kulcsot.
Az összes többi típus példányai PSObject példányok. A PSTypeNames tulajdonság tartalmazza a Deserializedelőtaggal ellátott eredeti típusnevet, például Deserialized.System.Data.DataTable
Az AllScope beállítás
A változók és aliasok Option tulajdonsága értéket vehet fel, például AllScope. Az AllScope tulajdonságú elemek a létrehozott gyermekhatókörök részévé válnak, de a szülőhatókörök nem öröklik visszamenőlegesen őket.
Az AllScope tulajdonságot tartalmazó elem látható a gyermekhatókörben, és ennek a hatókörnek a része. Az elem bármely hatókörben történő módosítása hatással van az összes hatókörre, amelyben a változó definiálva van.
Hatókör kezelése
Több parancsmag rendelkezik egy Hatókör paraméterrel, amely lehetővé teszi egy adott hatókör elemeinek lekérését vagy beállítását (létrehozását és módosítását). Az alábbi paranccsal megkeresheti a munkamenet összes olyan parancsmagját, amely rendelkezik Hatókör paraméterrel:
Get-Help * -Parameter scope
Az adott hatókörben látható változók megkereséséhez használja az ScopeGet-Variable paraméterét. A látható változók közé tartoznak a globális változók, a szülőhatókör változói és az aktuális hatókör változói.
A következő parancs például lekéri a helyi hatókörben látható változókat:
Get-Variable -Scope local
Ha egy változót egy adott hatókörben szeretne létrehozni, használjon egy hatókör-módosítót vagy a Hatókör paraméterét Set-Variable. A következő parancs létrehoz egy változót a globális hatókörben:
New-Variable -Scope global -Name a -Value "One"
A hatókör megadásához használhatja a New-Alias, Set-Aliasvagy Get-Alias parancsmagok Hatókör paraméterét is. A következő parancs létrehoz egy aliast a globális hatókörben:
New-Alias -Scope global -Name np -Value Notepad.exe
Ha egy adott hatókörben szeretné lekérni a függvényeket, használja a Get-Item parancsmagot, amikor a hatókörben van. A Get-Item parancsmag nem rendelkezik Hatókör paraméterrel.
Jegyzet
A Hatókör paramétert használó parancsmagok esetében szám szerint is hivatkozhat a hatókörökre. A szám az egyik hatókör egymáshoz viszonyított pozícióját írja le. A 0. hatókör az aktuális vagy helyi hatókört jelöli. Az 1. hatókör az azonnali szülőhatókört jelöli. A 2. hatókör a szülőhatókör szülőét jelöli, és így tovább. A számozott hatókörök akkor hasznosak, ha számos rekurzív hatókört hozott létre.
Pontforrás jelölésének használata hatókörrel
A szkriptek és függvények a hatókör szabályait követik. Ezeket egy adott hatókörben hozza létre, és csak erre a hatókörre van hatással, kivéve, ha parancsmagparamétert vagy hatókör-módosítót használ a hatókör módosításához.
A szkriptek vagy függvények tartalmát azonban pontforrás-jelöléssel is hozzáadhatja az aktuális hatókörhöz. Ha pontforrás-jelöléssel futtat egy szkriptet vagy függvényt, az az aktuális hatókörben fut. A szkript vagy függvény minden függvénye, aliasa és változója hozzá lesz adva az aktuális hatókörhöz.
Ha például a Sample.ps1 szkriptet a szkript hatókörében lévő C:\Scripts könyvtárból szeretné futtatni (ez a szkriptek alapértelmezett értéke), egyszerűen adja meg a parancssorban található szkriptfájl teljes elérési útját.
c:\scripts\sample.ps1
Egy szkriptfájlnak .ps1 fájlkiterjesztéssel kell rendelkeznie, hogy végrehajtható legyen. Az elérési útjukban szóközöket tartalmazó fájlokat idézőjelek közé kell tenni. Ha megpróbálja végrehajtani az idézett elérési utat, a PowerShell a szkript futtatása helyett megjeleníti az idézett sztring tartalmát. A híváskezelő (&) lehetővé teszi a fájlnevet tartalmazó sztring tartalmának végrehajtását.
Egy függvény vagy szkript futtatásához használja a híváskezelőt a szkript hatókörében. A híváskezelő használata nem különbözik a szkript név szerinti futtatásától.
& c:\scripts\sample.ps1
A híváskezelőről a about_Operatorscímű témakörben olvashat bővebben.
A Sample.ps1 szkript helyi hatókörben való futtatásához írjon be egy pont és egy szóközt (. ) a szkript elérési útja előtt:
. c:\scripts\sample.ps1
A szkriptben definiált függvények, aliasok és változók mostantól hozzáadódnak az aktuális hatókörhöz.
Hatókör nélküli korlátozás
A PowerShell rendelkezik a hatókörhöz hasonló és a hatókörökhöz hasonló beállításokkal és funkciókkal. Ez a funkció összetéveszthető a hatókörrel vagy a hatókör viselkedésével.
A munkamenetek, modulok és beágyazott kérések önálló környezetek, nem pedig a globális hatókör gyermek hatókörei a munkamenetben.
Ülés
A munkamenetek olyan környezetek, amelyekben a PowerShell fut. Amikor munkamenetet hoz létre egy távoli számítógépen, a PowerShell állandó kapcsolatot létesít a távoli számítógéppel. Az állandó kapcsolat lehetővé teszi, hogy a munkamenetet több kapcsolódó parancshoz használja.
Mivel a munkamenet tartalmazott környezet, saját hatókörrel rendelkezik, de a munkamenet nem annak a munkamenetnek a gyermek hatóköre, amelyben létrejött. A munkamenet a saját globális hatókörével kezdődik. Ez a hatókör független a munkamenet globális hatókörétől. A munkamenetben gyermekhatóköröket hozhat létre. Futtathat például egy szkriptet egy gyermekhatókör létrehozásához egy munkamenetben.
Modulok
PowerShell-modullal megoszthatja és kézbesítheti a PowerShell-eszközöket. A modul olyan egység, amely parancsmagokat, szkripteket, függvényeket, változókat, aliasokat és egyéb hasznos elemeket tartalmazhat. Hacsak nem exportálják explicit módon (Export-ModuleMember vagy a moduljegyzék használatával), a modul elemei nem érhetők el a modulon kívül. Ezért hozzáadhatja a modult a munkamenethez, és anélkül használhatja a nyilvános elemeket, hogy a többi elem felülírhatná a munkamenet parancsmagjait, szkripteit, függvényeit és egyéb elemeit.
Alapértelmezés szerint a modulok betöltve vannak a futtatótér gyökérszintű (globális) hatókörébe. A modul importálása nem változtatja meg a hatókört.
A munkameneten belül a modulok saját hatókörrel rendelkeznek. Vegye figyelembe a következő modul C:\temp\mod1.psm1:
$a = "Hello"
function foo {
"`$a = $a"
"`$global:a = $global:a"
}
Most létrehozunk egy globális változót $a, értéket adunk neki, és meghívjuk a függvényt foo.
$a = "Goodbye"
foo
A modul deklarálja a $a változót a modul hatókörében, majd a függvény foo mindkét hatókörben a változó értékét adja ki.
$a = Hello
$global:a = Goodbye
A modulok párhuzamos hatókörtárolókat hoznak létre ahhoz a hatókörhöz csatolva, amelyben importálták őket. A modul által exportált elemek az importálás hatókörszintjén érhetők el. A modulból nem exportált elemek csak a modul hatókörtárolójában érhetők el. A modul függvényei hozzáférhetnek a hatókör azon elemeihez, amelyekbe importálták őket, valamint a modul hatókörtárolójában lévő elemeket.
Ha a 2. modul a 1. modulbelsejéből töltődik be, akkor a 2. modul az 1. modul hatókörtárolójába kerül betöltésre. A Module2-ből származó exportálások a Module1aktuális modul hatókörébe kerülnek. Ha Import-Module -Scope localhasznál, akkor az exportálások a legfelső szint helyett az aktuális hatókörobjektumba kerülnek. Ha a modulban a és egy másik modult tölt be a(z) Import-Module -Scope global (vagy Import-Module -Global) használatával, akkor az a modul és annak exportjai a modul helyi hatóköre helyett a globális hatókörbe lesznek betöltve.
A Windows kompatibilitási funkcióval proxymodulokat importálhat a globális munkamenet állapotába.
Beágyazott kérések
A beágyazott kérések nem rendelkeznek saját hatókörrel. Beágyazott parancssor megadásakor a beágyazott parancssor a környezet egy részhalmaza. De továbbra is a helyi hatókörön belül marad.
A szkripteknek saját hatókörük van. Ha hibakereséssel keres egy szkriptet, és eléri a töréspontot a szkriptben, adja meg a szkript hatókörét.
Privát lehetőség
Az aliasok és a változók Option tulajdonsága Privateértéket vehet fel. Az Private beállítással rendelkező elemek megtekinthetők és módosíthatók abban a hatókörben, amelyben létrehozták őket, de nem tekinthetők meg és nem módosíthatók azon a hatókörön kívül.
Ha például létrehoz egy olyan változót, amelynek a globális hatókörben van egy privát lehetősége, majd futtat egy szkriptet, Get-Variable parancsok a szkriptben nem jelenítik meg a privát változót. A globális hatókör-módosító ebben a példányban nem jeleníti meg a privát változót.
A , New-Variable, Set-Variableés New-Alias parancsmagok Set-Alias paraméterével az Option tulajdonság értékét Privát értékre állíthatja.
Láthatóság
A Láthatóság tulajdonsága egy változónak vagy aliasnak határozza meg, hogy az elem látható-e azon a tárolón kívül, amelyben létrejött. A tároló lehet modul, szkript vagy beépülő modul. A láthatóság ugyanúgy van kialakítva a tárolók számára, mint ahogy a Private tulajdonság értéke a hatókörök számára van kialakítva.
A Láthatóság tulajdonság Public és Private értékeket vesz fel. A privát láthatóságú elemek csak abban a tárolóban tekinthetők meg és módosíthatók, amelyben létrehozták őket. A tároló hozzáadása vagy importálása esetén a privát láthatóságú elemek nem tekinthetők meg és nem módosíthatók.
Mivel a láthatóság tárolókhoz van tervezve, a hatókörben másként működik.
- Ha olyan elemet hoz létre, amely privát láthatóságot biztosít a globális hatókörben, nem tekintheti meg és nem módosíthatja az elemet egyetlen hatókörben sem.
- Ha megkísérli megtekinteni vagy módosítani egy privát láthatóságú változó értékét, a PowerShell hibaüzenetet ad vissza.
A New-Variable és Set-Variable parancsmagokkal létrehozhat egy privát láthatóságú változót.
Példák
1. példa: Változó értékének módosítása csak szkriptben
Az alábbi parancs módosítja az $ConfirmPreference változó értékét egy szkriptben. A módosítás nincs hatással a globális hatókörre.
Először is a következő paranccsal jelenítheti meg a $ConfirmPreference változó értékét a helyi hatókörben:
PS> $ConfirmPreference
High
Hozzon létre egy Scope.ps1 szkriptet, amely a következő parancsokat tartalmazza:
$ConfirmPreference = "Low"
"The value of `$ConfirmPreference is $ConfirmPreference."
Futtassa a szkriptet. A szkript módosítja a $ConfirmPreference változó értékét, majd jelentést készít annak értékéről a szkript hatókörében. A kimenetnek a következő kimenethez kell hasonlítania:
The value of $ConfirmPreference is Low.
Ezután tesztelje az aktuális hatókörben lévő $ConfirmPreference változó aktuális értékét.
PS> $ConfirmPreference
High
Ez a példa azt mutatja be, hogy a szkript hatókörében lévő változó értékének módosítása nem befolyásolja a változó szülőhatókörbeli értékét.
2. példa: Változóérték megtekintése különböző hatókörökben
A hatókör-módosítók használatával megtekintheti egy változó értékét a helyi hatókörben és a szülő hatókörben.
Először definiáljon egy $test változót a globális hatókörben.
$test = "Global"
Ezután hozzon létre egy Sample.ps1 szkriptet, amely meghatározza a $test változót. A szkriptben használjon hatókör-módosítót a $test változó globális vagy helyi verzióira való hivatkozáshoz.
In Sample.ps1:
$test = "Local"
"The local value of `$test is $test."
"The global value of `$test is $global:test."
A Sample.ps1futtatásakor a kimenetnek a következő kimenethez kell hasonlítania:
The local value of $test is Local.
The global value of $test is Global.
Ha a szkript befejeződött, a munkamenetben csak a $test globális értéke lesz definiálva.
PS> $test
Global
3. példa: Változó értékének módosítása egy szülőhatókörben
Ha nem véd meg egy elemet a Privát beállítással vagy más módszerrel, megtekintheti és módosíthatja egy változó értékét a szülőhatókörben.
Először definiáljon egy $test változót a globális hatókörben.
$test = "Global"
Ezután hozzon létre egy Sample.ps1 szkriptet, amely meghatározza a $test változót. A szkriptben használjon hatókör-módosítót a $test változó globális vagy helyi verzióira való hivatkozáshoz.
A Sample.ps1:
$global:test = "Local"
"The global value of `$test is $global:test."
Amikor a szkript elkészült, a $test globális értéke megváltozik.
PS> $test
Local
4. példa: Privát változó létrehozása
A változó priváttá tehető a private: hatókör-módosító használatával, vagy a változó létrehozásakor a Option tulajdonság Privatebeállításával. A privát változók csak abban a hatókörben tekinthetők meg vagy módosíthatók, amelyben létrehozták őket.
Ebben a példában a ScopeExample.ps1 szkript öt függvényt hoz létre. Az első függvény meghívja a következő függvényt, amely létrehoz egy gyermekhatókört. Az egyik függvény rendelkezik egy privát változóval, amely csak abban a hatókörben látható, amelyben létrejött.
PS> Get-Content ScopeExample.ps1
# Start of ScopeExample.ps1
function funcA {
"Setting `$funcAVar1 to 'Value set in funcA'"
$funcAVar1 = "Value set in funcA"
funcB
}
function funcB {
"In funcB before set -> '$funcAVar1'"
$private:funcAVar1 = "Locally overwrite the value - child scopes can't see me!"
"In funcB after set -> '$funcAVar1'"
funcC
}
function funcC {
"In funcC before set -> '$funcAVar1' - should be the value set in funcA"
$funcAVar1 = "Value set in funcC - Child scopes can see this change."
"In funcC after set -> '$funcAVar1'"
funcD
}
function funcD {
"In funcD before set -> '$funcAVar1' - should be the value from funcC."
$funcAVar1 = "Value set in funcD"
"In funcD after set -> '$funcAVar1'"
'-------------------'
ShowScopes
}
function ShowScopes {
$funcAVar1 = "Value set in ShowScopes"
"Scope [0] (local) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 0 -ValueOnly)'"
"Scope [1] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 1 -ValueOnly)'"
"Scope [2] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 2 -ValueOnly)'"
"Scope [3] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 3 -ValueOnly)'"
"Scope [4] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 4 -ValueOnly)'"
}
funcA
# End of ScopeExample.ps1
PS> .\ScopeExample.ps1
A kimenet a változó értékét jeleníti meg az egyes hatókörökben. Láthatja, hogy a privát változó csak a funcB-ban, abban a hatókörben látható, amelyben létrehozták.
Setting $funcAVar1 to 'Value set in funcA'
In funcB before set -> 'Value set in funcA'
In funcB after set -> 'Locally overwrite the value - child scopes can't see me!'
In funcC before set -> 'Value set in funcA' - should be the value set in funcA
In funcC after set -> 'Value set in funcC - Child scopes can see this change.'
In funcD before set -> 'Value set in funcC - Child scopes can see this change.' - should be the value from funcC.
In funcD after set -> 'Value set in funcD'
-------------------
Scope [0] (local) $funcAVar1 = 'Value set in ShowScopes'
Scope [1] (parent) $funcAVar1 = 'Value set in funcD'
Scope [2] (parent) $funcAVar1 = 'Value set in funcC - Child scopes can see this change.'
Scope [3] (parent) $funcAVar1 = 'Locally overwrite the value - child scopes can't see me!'
Scope [4] (parent) $funcAVar1 = 'Value set in funcA'
Ahogy a ShowScopeskimenete is mutatja, más hatókörök változóit is elérheti Get-Variable használatával, és megadhat egy hatókörszámot.
5. példa: Helyi változó használata távoli parancsban
A helyi munkamenetben létrehozott távoli parancs változóihoz használja a using hatókör-módosítót. A PowerShell feltételezi, hogy a távoli parancsok változói a távoli munkamenetben lettek létrehozva.
A szintaxis a következő:
$using:<VariableName>
A következő parancsok például létrehoznak egy $Cred változót a helyi munkamenetben, majd egy távoli parancsban használják a $Cred változót:
$Cred = Get-Credential
Invoke-Command $s {Remove-Item .\Test*.ps1 -Credential $using:Cred}
A using hatókör-módosító a PowerShell 3.0-ban lett bevezetve.