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.
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:
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:
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 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')
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.
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.
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 blokovat některé webové stránky z výsledků vyhledávání Google
I když používám Google pro všechny mé on-line vyhledávání, stále to není nikde jinde. Své algoritmy mění téměř každodenně a každá změna není vždy k lepšímu. Přidejte k tomu všechny personalizační a geografické výsledky vyhledávání a získáte jinou sadu výsledků, i když někdy někdy hledáte stejnou věc.Pro někoho, jako jsem já, je mnohokrát, kdy
Jak sdílet dokumenty iWork z iCloud
Schopnost sdílet dokumenty tak, aby spolupracovaly, je neocenitelná, podhodnocená schopnost v dnešních kancelářských aplikacích. Aplikační sada iWork společnosti Apple se nijak neliší, což zahrnuje možnost sdílení nejen z OS X, ale i od iCloud. Dnes budeme diskutovat o tom, jak sdílet iWork dokument včetně stránek, čísel a klíčových souborů.