lt.phhsnews.com


lt.phhsnews.com / Kaip sritis veikia "PowerShell" scenarijus

Kaip sritis veikia "PowerShell" scenarijus


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.

Kas yra taikymo sritis?

"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:

  • Kintamieji
  • Panašios
  • Funkcijos
  • PowerShell diskai (PSDrives)

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ą:

  • " Global taikymo sritis yra sritis, sukurta" PowerShell "paleidimo metu. Tai apima kintamuosius, slapyvardžius, funkcijas ir PSDrives, kurie yra integruojami į PowerShell, taip pat bet kuriuos, kurie yra sukurti jūsų "PowerShell" profilyje.
  • Vietos taikymo sritis priklauso nuo to, kokia yra dabartinė taikymo sritis. Kai pradėsite "PowerShell", tai reiškia "Global" taikymo sritį, scenarijuje bus scenarijaus taikymo sritis ir tt Scenarijaus paleidimo metu sukurta sritis
  • Script . Vienintelės komandos, kurios veikia pagal šią sritį, yra tos, kurios yra scenarijuje. Privatus
  • sritis gali būti apibrėžta pagal dabartinę taikymo sritį, kad kitos komandos negalėtų skaityti ar keisti elementų, kuriuos jie galbūt galėtų turėti prieiga prie. Taikymo sritis taip pat gali būti vadinama skaičiais tam tikrose komandose, kur dabartinė taikymo sritis vadinama nuline, o jos protėviai nurodo didinant sveikus skaičius. Pavyzdžiui, scenarijaus, paleidžiamo iš "Global" taikymo srities, scenarijaus taikymo sritis būtų 0, o "Global" taikymo sritis būtų 1. "Scope" taikymo sritis, pvz., Funkcija, kuri toliau priskiriama sričiai, reiškia "Global scope" kaip 2 Neigiami numeriai neveiks, jei norėsite pamatyti vaiko taikymo sritį - tai paaiškės artimiausiu metu.

Kaip taikymo sritis veikia komandas

Kaip minėta anksčiau, komandos, vykdomos pagal vieną taikymo sritį, neturės įtakos kitoms sritims, išskyrus atvejus, kai tai konkrečiai nurodyta tai padaryti. Pvz., Jei $ MyVar egzistuoja "Global" taikymo srityje, o scenarijus paleidžia komandą, kad $ MyVar būtų kitokio dydžio, "Global My $" versijos $ MyVar versija nebus pakeista, o "MyMan" kopija bus įtraukta į scenarijaus sritį su nauja vertę. Jei $ MyVar neegzistuoja, scenarijus jį sukurs pagal scenarijaus sritį pagal numatytuosius nustatymus, o ne "Global scope". Tai svarbu prisiminti, kai sužinosite apie faktinius tėvų ir vaikų santykius tarp sričių.

"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

Pirmą kartą ieškodami taikymo sričių mes ketiname pradėti "PowerShell" sesiją, kurioje buvo nustatytas kintamasis $ MyVar į eilutę "Aš esu pasaulinis kintamasis!", iš komandinės eilutės. Tada šis scenarijus bus paleistas iš failo, vadinamo Scope-Demo.ps1:

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ę

Taigi, viskas gerai ir gerai, kad padėtų išvengti netyčinių pakeitimų aplinkoje, išskyrus scenarijus ir funkcijas, bet ką daryti, jei iš tiesų norėtumėte padaryti tokį modifikuotą ations? Yra speciali ir gana paprasta sintaksė, skirta kurti ir modifikuoti objektus už Vietos taikymo srities ribų. Klaidos pavadinimo pradžioje tiesiog įveskite srities pavadinimą ir įterpkite tarpą tarp srities ir kintamųjų pavadinimų. Panašiai tai:

$ 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

Dar daugiau yra galimybių, kurios gali būti atliekamos su sritimis, nei Galima pritaikyti šiame straipsnyje. Taikymo sritis turi įtakos ne tik kintamiesiems, bet dar reikia daugiau sužinoti apie "Private" taikymo sritis ir "AllScope" kintamuosius. Daugiau naudingos informacijos galite paleisti iš "PowerShell" šios komandos:

Get-Help about_scopes

Tas pats pagalbos failas taip pat prieinamas "TechNet".

Apimties kreditas: "spadassin" dėl "openclipart"



Kaip įjungti

Kaip įjungti "CMD + n" "Safari" spartieji klavišai "Easy Tab" perjungimui

"OS X Safari turi nemažai pranašumų prieš" Chrome ", tačiau mes praleidome" Chrome "galimybę perjungti skirtukus naudodami" Command + # " . Laimei, radome sprendimą, kuris "Safari" įgalins "Chrome" panašų skirtuko spartųjį klavišą. Nepaisant to, kad "Chrome" yra blogas, jis vis dar yra toje vietoje, kuriame yra kitų naršyklių, kurie nėra "Internet Explorer", tačiau "OS X", tai pagarsėjęs akumuliatoriaus variklis.

(how-to)

Kas naujo

Kas naujo "Windows 10" "First Big November Update"

Pirmas didelis "Windows 10" atnaujinimas, kuris turėtų būti atvykęs šiandien naudojant "Windows Update", ištaiso daug problemų su "Windows 10". "Microsoft" supaprastina aktyvuoti, atkurti spalvoto lango antraščių juostas, integruoti "Skype" ir tobulinti "Edge" naršyklę. Tačiau jie taip pat įtraukė reklamas į meniu Pradėti.

(how-to)