cs.phhsnews.com


cs.phhsnews.com / Jak skoky ovlivňují skripty PowerShell

Jak skoky ovlivňují skripty PowerShell


V dávkových skriptech mají změny proměnných prostředí globální dopad na aktuální relaci ve výchozím nastavení. Pro PowerShell je přesný opak pravdivý, protože rozsahy se používají k izolaci modifikací skriptu. Zde budeme zkoumat, jak rozsahy ovlivňují skripty PowerShell a jak pracovat v nich a kolem nich.

Co je to rozsah?

V "PowerShell" se "rozsah" vztahuje na aktuální prostředí, je v provozu. Scopes se používají k ochraně určitých objektů v prostředí před neúmyslně upravenými skripty nebo funkcemi. Obzvláště jsou chráněny před úpravami příkazy spuštěné z jiného oboru, pokud parametry v těchto příkazech nejsou specifikovány jinak:

  • Proměnné
  • Aliasy
  • Funkce
  • Jednotky PowerShell (PSDrives)

jsou vytvářeny při každém spuštění skriptu nebo funkce nebo při vytvoření nové relace nebo instance PowerShell. Scopes vytvořené spuštěním skriptů a funkcí mají vztah "rodič / dítě" s oblastí, ze které byly vytvořeny. Existuje několik rozsahů, které mají obzvláště zvláštní význam a lze je získat podle názvu:

  • Rozsah Globální je oblast, která je vytvořena při spuštění funkce PowerShell. Zahrnuje proměnné, aliasy, funkce a PSDrives, které jsou vestavěné do PowerShellu, stejně jako všechny, které jsou vytvořeny svým profilem PowerShell.
  • Rozsah Local se vztahuje na jakýkoli aktuální rozsah. Při spuštění funkce PowerShell se bude jednat o globální rozsah, v rámci skriptu bude to rozsah skriptů apod.
  • Rozsah skriptuje vytvořen při spuštění skriptu. Jediné příkazy, které fungují v rámci tohoto rozsahu, jsou ty, které jsou ve skriptu.
  • Soukromé rozsahy mohou být definovány v rámci aktuálního oboru, aby se zabránilo tomu, aby příkazy v jiných oblastech byly schopny číst nebo upravovat položky, přístup k.

Scopes může být také označován číslem v určitých příkazech, kde je aktuální rozsah označován jako nulový a jeho předky jsou odkazovány na rostoucí celá čísla. Například v rámci skriptu spuštěného z globálního oboru bude rozsah skriptu 0 a globální rozsah by byl 1. Rozsah, který byl dále vnořen v rámci rozsahu skriptů, jako je funkce, by odkazoval na globální rozsah jako 2 "Negativní čísla nebudou pracovat s odkazem na dělové rozsahy - důvod pro to bude brzy zřejmé.

Jak ovlivňuje působení příkazů

Jak již bylo zmíněno výše, příkazy spuštěné v jednom rozsahu nebudou mít vliv na věci v jiném rozsahu, udělat to tak. Například pokud $ MyVar existuje v globálním rozsahu a skript spustí příkaz nastavit $ MyVar na jinou hodnotu, globální verze $ MyVar zůstane nezměněna, zatímco kopie $ MyVar je umístěna v oblasti Script s novým hodnota. Pokud $ MyVar neexistuje, skript jej ve výchozím nastavení vytvoří v rozsahu skriptů - nikoli v globálním rozsahu. Je důležité si uvědomit, jak se dozvíte o skutečném vztahu rodičů a dětí mezi oblastmi.

Vztah mezi rodičem a dítětem v oboru PowerShell je jednosměrný. Příkazy mohou vidět a volitelně měnit aktuální rozsah, jeho nadřazený objekt a všechny jeho rozsahy. Nemohou však vidět ani měnit věci u žádného dnešního dítěte. Důvodem je to především proto, že po přesunutí do rodičovského rozsahu je podřízený rozsah již zničen, protože splnil svůj účel. Například proč byste museli vidět nebo upravit proměnnou v rozsahu skriptu z globálního oboru po ukončení skriptu? Existuje spousta případů, kdy potřebujete, aby změny skriptu nebo funkce trvaly po dokončení, ale ne tolik, kdy byste měli před nebo po spuštění provést změny objektů v rámci skriptu nebo funkce. (Obvykle se takové věci budou zpracovávat jako součást skriptu nebo funkce samy o sobě.)

Samozřejmě, co jsou pravidla bez výjimek? Výjimkou z výše uvedených je soukromá oblast. Objekty v oblasti soukromé oblasti jsou přístupné pouze příkazům spuštěným v rozsahu, ze kterého byly vytvořeny. Další důležitou výjimkou jsou položky, které mají vlastnost AllScope. Jedná se o speciální proměnné a aliasy, u nichž bude změna v jakémkoli rozsahu ovlivňovat všechny oblasti. Následující příkazy vám ukážou, které proměnné a aliasy mají vlastnost AllScope:

Získat-variabilní | Kde-Objekt {$ _ Možnosti -match 'AllScope'} Get-Alias ​​| Kde je objekt {$ _. Options -match 'AllScope')

Scopes in Action

Pro náš první pohled na oblasti v akci, budeme začínat v relaci PowerShell, kde byla nastavena proměnná $ MyVar na řetězec "Jsem globální proměnná!" z příkazového řádku. Následující skript bude spuštěn ze souboru s názvem Scope-Demo.ps1:

Funkce FunctionScope {'Změna $ MyVar s funkcí'. $ MyVar = 'Mám nastavenou funkci!' "MyVar říká $ MyVar"} "Kontrola aktuální hodnoty $ MyVar." "MyVar říká $ MyVar" "Změna $ MyVar skriptem." $ MyVar = 'Mám nastaven skript!' "MyVar říká $ MyVar" "FunctionScope" Kontrola konečné hodnoty MyVar před ukončením skriptu. " "MyVar říká $ MyVar" "

Pokud skripty PowerShell pracovaly stejně jako dávkové skripty, očekávali bychom, že valec $ MyVar (nebo% MyVar% v dávkové syntaxi) se změní z" Jsem globální proměnná! k "Mám nastaven skript!", a konečně "jsem dostal funkci!" kde by to zůstalo, dokud to není výslovně změněno znovu nebo relace je ukončena.Nicméně, podívejte se, co se vlastně stane zde, když se přesučíme každý z oborů - zejména poté, co FunctionScope funkce dokončila svou práci a zkontrolujeme proměnnou znovu ze skriptu , a později globální rozsah.

Jak vidíte, jak se proměnná změnila, když jsme se přesunuli skriptem, protože až do dokončení funkce FunctionScope jsme prozkoumali proměnnou ze stejného oboru, bylo to poslední po operaci FunctionScope jsme se vrátili zpět do oblasti Script, kde funkce $ MyVar zůstala nedotčena funkcí, a pak, když skript skončil, jsme se vrátili zpět do globálního prostoru, kde nebylo vůbec změněno.

Dosažení mimo lokální oblast

Takže je to všechno dobré a dobré, abyste pomohli při neúmyslném použití změn v prostředí mimo vaše skripty a funkce, ale co kdybyste chtěli takové změny udělat ? Existuje speciální a poměrně jednoduchá syntaxe pro vytváření a úpravu objektů za místní oblast. Stačí, když zadáte název oboru na začátku názvu proměnné a mezi rozsah a názvy proměnných umístit dvojtečku. Stejně jako:

$ global: MyVar $ script: MyVar $ local: MyVar

Tyto modifikátory můžete použít jak při prohlížení, tak při nastavení proměnných. Podívejme se, co se stane s tímto ukázkovým skriptem:

Funkce FunctionScope {"Změna $ MyVar v lokálním rozsahu funkcí ..." $ local: MyVar = "Toto je MyVar v místním rozsahu funkce." Změna $ MyVar v rozsahu skriptu ... '$ script: MyVar =' MyVar byl nastaven skriptem, nyní nastaven funkcí. "Změna $ MyVar v globálním rozsahu ... '$ global: MyVar =' MyVar byl nastaven v globálním rozsahu. "Kontrola $ MyVar v každém rozsahu ..." "Lokální: $ lokální: MyVar" "Script: $ script: MyVar" "Globální: $ global: MyVar" "}" Získání aktuální hodnoty $ MyVar ". "MyVar říká $ MyVar" "Změna $ MyVar skriptem." $ MyVar = 'Mám nastaven skript!' "MyVar říká, že $ MyVar" FunctionScope "Kontrola $ MyVar z rozsahu skriptu před odchodem." "MyVar říká $ MyVar" "

Stejně jako předtím začneme nastavením proměnné v globálním rozsahu a skončíme tím, že zkontrolujeme konečný výsledek globálního rozsahu

Zde vidíme, že FunctionScope dokázal změnit proměnnou v rozsahu skriptu a mít změny poté, co byla dokončena, změna proměnné v globálním rozsahu zůstala zachována i po ukončení skriptu, což může být užitečné zejména v případě, že musíte v rámci skriptu opakovaně měnit proměnné , nebo v globálním rozsahu pomocí stejného kódu - pouze definujete funkci nebo skript, který je zapsán pro úpravu proměnné, kde a jak to potřebujete, a zavolejte, kdykoli jsou tyto změny nezbytné.

Jak již bylo zmíněno dříve, rozsah čísel lze také použít v určitých příkazech k úpravě proměnné v různých úrovních ve vztahu k místnímu oboru.Toto je stejný skript použitý ve druhém příkladu výše, ale s funkcí upravenou pro použití příkazů Get-Variable a Set-Variable s rozsahovým číslem namísto přímého odkazu na proměnnou s pojmenovanými obory:

Funkce FunctionScope {"Změna $ MyVar v rozsahu 0 vzhledem k FunctionScope ..." Set-Variable MyVar "Toto je MyVar v rozsahu 0." -Scope 0 'Změna $ MyVar v rozsahu 1 vzhledem k FunctionScope ...' Set-Variable MyVar 'MyVar byl změněn v rozsahu 1, z funkce.' -Skopem 1 'Změna $ MyVar v rozsahu 2 vzhledem k Functionscope ...' Set-Variable MyVar 'MyVar byl změněn v rozsahu 2, z funkce.' -Scope 2 "Kontrola $ MyVar v každém rozsahu ..." Rozsah 0: "Get-variabilní MyVar -Scope 0 -ValueOnly" Rozsah 1: "Get-variabilní MyVar -Scope 1 -ValueOnly" Rozsah 2: "Get-variabilní MyVar-Scop 2 -ValueOnly "}" Získání aktuální hodnoty $ MyVar. " "MyVar říká $ MyVar" "Změna $ MyVar skriptem." $ MyVar = 'Mám nastaven skript!' "MyVar říká, že $ MyVar" FunctionScope "Kontrola $ MyVar z rozsahu skriptu před odchodem." "MyVar říká $ MyVar" "

Podobně jako dříve, můžeme zde vidět, jak příkazy v jednom oboru mohou upravovat objekty ve svém nadřazeném rozsahu.

Další informace

Je ještě mnohem víc, které se týkají více než jen proměnných, a ještě více se dozvíte o soukromých oblastech a proměnných AllScope.Pro více užitečných informací můžete spustit následující příkaz z PowerShell:

Get-Help about_scopes

Stejný soubor nápovědy je k dispozici také na webu TechNet


Rozsah obrázku: spadassin na otevřeném klipu


Jak odesílat a přijímat faxy online bez faxového zařízení nebo telefonní linky

Jak odesílat a přijímat faxy online bez faxového zařízení nebo telefonní linky

Některé pomalu se pohybující firmy a vládní agentury nemusí přijímat dokumenty přes e-maily a nutí je faxovat. jsou nuceni poslat fax, můžete to udělat z počítače zdarma. Předtím jsme se zabývali způsoby elektronického podepisování dokumentů bez jejich tisku a skenování. Pomocí tohoto procesu můžete digitálně podepsat dokument a odeslat fax na podnik - vše na vašem počítači a bez požadovaného tisku.

(how-to)

Odeslání vašeho seznamu nákupů Amazon Echo do vašeho e-mailu

Odeslání vašeho seznamu nákupů Amazon Echo do vašeho e-mailu

Pokud používáte službu Amazon Echo pro přidání položek do vašeho seznamu obchodů s potravinami, postupujte podle tohoto návodu. jste konečně připraveni nakupovat. Aplikace Alexa ukládá váš nákupní seznam, takže při otevření aplikace a výběru seznamu Nakupování & Úkoly v boční nabídce získáte seznam všeho, co jste přidal.

(how-to)