Paketo scenarijose aplinkos kintamųjų pakeitimai pagal numatytuosius nustatymus turi bendrą poveikį dabartiniam seanui. "PowerShell" tiksliai priešingai yra tiesa, nes taikymo sričiai naudojami scenarijaus pakeitimai izoliuoti. Čia mes išnagrinėsime, kaip aprėptis veikia "PowerShell" scenarijus ir kaip dirbti su jais ir aplink juos.
"PowerShell" "taikymo sritis" reiškia dabartinę aplinką, kurioje scenarijus arba komandinis apvalkalas veikia. Taikymo sritis yra naudojamos tam tikriems objektams aplinkoje apsaugoti nuo netyčia modifikuotų scenarijų ar funkcijų. Visų pirma, šie dalykai yra apsaugoti nuo pakeitimų komandomis paleisti iš kitos taikymo srities, jei nenurodyta kitaip šių komandų parametrais:
Nauji taikymo sričiai yra sukurti kiekvieną kartą, kai paleidžiate scenarijų arba funkciją, arba kai kuriate naują "PowerShell" seansą arba egzempliorių. Taikymo sritis, sukurtas vykdant scenarijus ir funkcijas, turi "tėvų / vaiko" santykius su apimtimi, iš kurios jie buvo sukurti. Yra keletas sričių, turinčių ypač ypatingų reikšmių, ir jas galima pasiekti pagal pavadinimą:
Kaip taikymo sritis veikia komandas
"PowerShell" taikymo sritis tėvų ir vaikų santykiuose yra vienpusis. Komandos gali matyti ir, pasirinktinai, keisti dabartinę taikymo sritį, jos tėvą ir visas aukščiau esančias taikymo sritis. Tačiau jie negali matyti ar keisti dalykų bet kuriems dabartinės srities vaikams. Tai visų pirma yra ta, kad, kai jūs persikėlėte į pradinę sritį, vaiko sritis jau buvo sunaikinta, nes ji įvykdė savo tikslą. Pavyzdžiui, kodėl turėtumėte matyti arba keisti kintamąjį Script schemoje iš "Global" taikymo srities, kai scenarijus baigėsi? Yra daug atvejų, kai jums reikia scenarijaus ar funkcijos pakeitimų, kurie išlieka ilgiau nei jo pabaigoje, tačiau ne tiek daug, kur reikia atlikti objekto pakeitimus scenarijaus ar funkcijos taikymo srityje prieš paleidžiant arba po jo. (Paprastai tokie dalykai vis tiek bus tvarkomi kaip scenarijaus dalis arba funkcija pati).
Žinoma, kokios yra taisyklės be išimčių? Viena iðimtis ið anksčiau yra privataus taikymo sritis. Objektai, esantys privačiose srityse, yra prieinami tik tokioms komandoms, kurios paleidžiamos iš taikymo srities, iš kurios jos buvo sukurtos. Kitas svarbus išimtis yra elementai, turintys "AllScope" nuosavybę. Tai yra specialūs kintamieji ir slapyvardžiai, kurių bet kokio taikymo srities pasikeitimas turės įtakos visoms sritims. Šios komandos parodys jums, kurie kintamieji ir slapyvardžiai turi nuosavybės AllScope:
Gauti kintamąjį | Kur-Objektas {$ _. Parinktys-atitiktų 'AllScope'} Get-Alias | Kur objektas {$ _. Parinktys - atitikti "AllScope")
Taikymo sritis
Function FunctionScope {'pakeitimas $ MyVar su funkcija'. $ MyVar = 'Aš nustatytas pagal funkciją!' "MyVar sako $ MyVar"} "Tikroji $ MyVar vertė". "MyVar sako $ MyVar" "Pakeisti $ MyVar pagal scenarijų." $ MyVar = 'Aš nustatytas pagal scenarijų!' "MyVar sako $ MyVar" "FunctionScope" Patikrinti galutinę MyVar vertę prieš išeinant iš scenarijaus. " "MyVar sako $ MyVar" "
Jei" PowerShell "scenarijai veikė taip pat, kaip ir paketiniai scenarijai, mes tikimės, kad $ MyVar (arba% MyVar% partijos sintaksėje) vertė pasikeis iš" Aš esu pasaulinis kintamasis! " į "Aš nustatytas pagal scenarijų!", ir pagaliau "aš nustatytas pagal funkciją!" kur jis liktų tol, kol jis nebus aiškiai pakeistas ar sesija bus nutraukta. Tačiau pamatysite, kas iš tiesų įvyksta čia, kai mes pereiname per kiekvieną taikymo sritį - ypač po to, kai funkcija FunctionScope baigė darbą ir mes vėl patikriname kintamąjį iš scenarijaus , o vėliau - visuotinė apimtis.
Kaip matote, kintamasis pasikeitė, kai mes persikėlėme per scenarijų, nes, kol funkcija FunctionScope buvo užbaigta, mes patikrinome kintamąjį iš tos pačios taikymo srities, kuri buvo paskutinė pasikeitė. Po to, kai "FunctionScope" buvo atliktas, mes grįžome į scenarijaus sritį, kur funkcija "$ MyVar" paliko neveikia. Tada, kai scenarijus baigėsi, grįžome į "Global" taikymo sritį, kur ji visai nebuvo pakeista.
Pasiekti ne vietinę reikšmę
$ global: MyVar $ scenarijus: MyVar $ local: MyVar
Galite naudoti šiuos modifikatorius tiek peržiūrėdami, tiek nustatydami kintamuosius. Pažiūrėkime, kas atsitinka su šio demonstravimo scenarijaus:
Funkcija FunctionScope {"Pakeisti $ MyVar į vietinės funkcijos sritį ..." $ local: MyVar = "Tai yra MyVar vietinės funkcijos funkcijoje". "Keitimas $ MyVar scenarijaus taikymo srityje ... '$ script: MyVar =' MyVar anksčiau buvo nustatytas pagal scenarijų. Dabar nustatoma pagal funkciją. '$ MyVar pakeitimas pasaulio mastu ...' $ global: MyVar = 'MyVar buvo nustatytas visame pasaulyje. Dabar nustatoma funkcija. "Patikrinti $ MyVar kiekvienoje srityje ..." "Vietinis: $ local: MyVar" "Script: $ script: MyVar" "Global: $ global: MyVar" "}" Kaip gauti dabartinę vertę $ MyVar ". "MyVar sako $ MyVar" "Pakeisti $ MyVar pagal scenarijų." $ MyVar = 'Aš nustatytas pagal scenarijų!' "MyVar sako $ MyVar" FunctionScope "Tikrinti $ MyVar iš scenarijų apimties prieš išeinant". "MyVar sako $ MyVar" "
Kaip ir anksčiau, mes pradėsime nustatydami kintamąjį" Global scope "ir pasibaigsime, patikrinę galutinį" Global scope "rezultatą.
Čia galite pamatyti, kad" FunctionScope "sugebėjo pakeisti kintamąjį scenarijaus taikymo sritį ir jei pakeitimai išliks, kai jis bus baigtas. Be to, kintamojo pakeitimas "Global" taikymo srityje išliko net ir po to, kai scenarijus pasitraukė. Tai gali būti ypač naudinga, jei turite pakartotinai keisti kintamuosius scenarijuje , arba taikant "Global" taikymo sritį, naudodamas tą patį kodą - jūs tiesiog nustatote funkciją ar scenarijų, kuris yra parašytas pakeisti kintamąjį, kur ir kaip jums reikia, ir paskambinkite tuo, kai šie pakeitimai yra būtini.
Kaip minėta anksčiau, Apimties numeriai taip pat gali būti naudojami tam tikroms komandoms keisti kintamąjį skirtingais lygmenimis, atsižvelgiant į lokalinę taikymo sritį. Čia yra tas pats scenarijus, kuris naudojamas antroje aukščiau pateiktame pavyzdyje, tačiau funkcija pakeista, kad būtų galima naudoti kintamųjų ir kintamųjų komandas su apimtimi Nr vietoj tiesioginio nuorodų į kintamąjį su nurodytais taikymo sritimis:
Funkcija FunctionScope {"Pakeisti $ MyVar sritį 0, palyginti su FunctionScope ..." Nustatomas kintamasis MyVar "Tai yra MyVar funkcijos taikymo srityje 0." -Scope 0 "Keisti $ MyVar apimties 1, palyginti su FunctionScope ..." Nustatomas kintamasis "MyVar" MyVar buvo pakeistas taikymo sritimi 1, iš funkcijos. " -Scope 1 'Keitimas $ MyVar apimties 2, palyginti su Functionscope ...' Nustatomas MyVar 'MyVar buvo pakeistas taikymo sritimi 2, iš funkcijos.' -Scop 2 "Patikrinti $ MyVar kiekvienoje srityje ..." Taikymo sritis 0: "Gauti kintamąjį MyVar -Scope 0 -ValueOnly" Taikymo sritis 1: "Gauti kintamojo MyVar-Scope 1 -Value Only" Taikymo sritis 2: "Gauti kintamas MyVar -Scope 2 -ValueOnly ")" Dabartinė $ MyVar vertė ". "MyVar sako $ MyVar" "Pakeisti $ MyVar pagal scenarijų." $ MyVar = 'Aš nustatytas pagal scenarijų!' "MyVar sako $ MyVar" FunctionScope "Tikrinti $ MyVar iš scenarijų apimties prieš išeinant". "MyVar sako $ MyVar" "
Panašiai kaip anksčiau, mes galime pamatyti, kaip komandos vienoje srityje gali keisti objektus savo tėvų srityje.
Papildoma informacija
Get-Help about_scopes
Tas pats pagalbos failas taip pat prieinamas "TechNet".
Apimties kreditas: "spadassin" dėl "openclipart"
Kaip sukonfigūruoti pagrindinį "Google" puslapį
" Google "namuose yra naujas rinkos dalyvis balso asistentuose, kuriame" Amazon Echo "beveik dvejus metus valdė kaip nepakeistą laimėtoją. Štai, kaip nustatyti "Google" namų įrenginį ir pradėti išleisti balso komandas visiškai be rankų. Kas yra "Google" pagrindinis puslapis ir kodėl norėčiau vieno? "Google" pagrindinis puslapis iš esmės yra "Google Amazon Echo" versija.
Kokie yra simbolių kodavimai, pvz., ANSI ir Unicode, ir kaip jie skiriasi?
ASCII, UTF-8, ISO-8859 ... Galbūt jūs matėte šiuos keistus vardus, kurie plaukioja aplink, bet ką daryti jie iš tikrųjų reiškia? Perskaitykite, kai paaiškiname, koks simbolių kodavimas yra ir kaip šie akronimai susiję su paprastu tekstu, kurį matome ekrane. Fundamentiniai pastato blokai Kai mes kalbame apie rašytinę kalbą, mes kalbame apie raides, kurie tada kuria sakinius, pastraipas ir pan.