Kaip lengviau konfigūruoti Windows darbui su "PowerShell" scenarijais

Turinys:

Kaip lengviau konfigūruoti Windows darbui su "PowerShell" scenarijais
Kaip lengviau konfigūruoti Windows darbui su "PowerShell" scenarijais

Video: Kaip lengviau konfigūruoti Windows darbui su "PowerShell" scenarijais

Video: Kaip lengviau konfigūruoti Windows darbui su
Video: Home Wireless Network Setup Part 3 - YouTube 2024, Balandis
Anonim
"Windows" ir "PowerShell" turi integruotas apsaugos funkcijas ir numatytąją konfigūraciją, kurios tikslas yra užkirsti kelią galutiniams vartotojams netyčia paleisti scenarijus jų kasdienės veiklos metu. Tačiau, jei jūsų kasdieninė veikla paprastai apima savo "PowerShell" scenarijų kūrimą ir paleidimą, tai gali būti daugiau nepatogumų nei nauda. Čia mes parodysime, kaip dirbti su šiomis funkcijomis be jokio saugumo.
"Windows" ir "PowerShell" turi integruotas apsaugos funkcijas ir numatytąją konfigūraciją, kurios tikslas yra užkirsti kelią galutiniams vartotojams netyčia paleisti scenarijus jų kasdienės veiklos metu. Tačiau, jei jūsų kasdieninė veikla paprastai apima savo "PowerShell" scenarijų kūrimą ir paleidimą, tai gali būti daugiau nepatogumų nei nauda. Čia mes parodysime, kaip dirbti su šiomis funkcijomis be jokio saugumo.

Kaip ir kodėl "Windows &PowerShell" neleidžia vykdyti scenarijaus.

"PowerShell" iš tikrųjų yra komandų apvalkalo ir scenarijų kalba, skirta pakeisti "CMD" ir partijos scenarijus "Windows" sistemose. Tokiu būdu "PowerShell" scenarijus beveik gali būti sukonfigūruotas, kad galėtumėte daryti viską, ką galite atlikti rankiniu būdu iš komandinės eilutės. Tai reiškia, kad jūsų sistemoje praktiškai gali būti padaryta kokių nors pakeitimų, neviršijančių jūsų vartotojo abonemento apribojimų. Taigi, jei galėtumėte tiesiog dukart spustelėti "PowerShell" scenarijų ir paleisti jį su visomis administratoriaus privilegijomis, paprastas vienkartinis įklotai, kaip tai gali iš tikrųjų sugadinti jūsų dieną:

Get-ChildItem '$env:SystemDrive' -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

NENAUDOKITE pirmiau pateiktos komandos!

Tai tiesiog eina per failų sistemą ir ištrina viską, ką gali. Įdomu tai, kad sistema neveikia taip greitai, kaip jūs galvojate - netgi kai pradedate dirbti iš padidėjusios sesijos. Bet jei kas nors jums skambina, kai veikia šį scenarijų, nes jie staiga negali rasti savo failus arba paleisti kai kurias programas, "sukdami jį išjungti ir vėl" tikriausiai tik sukelti juos į Windows Paleisties atkūrimas, kur jie ketina būti pasakyta ten nieko, kas gali būti padaryta problemai išspręsti. Tai, kas gali būti blogiau, yra tai, kad vietoj to, kad būtų sukurtas scenarijus, kuris tik pašalina failų sistemą, jūsų draugas gali būti apgaulingas paleisti tą, kuris atsisiųsti ir įdiegti keylogger arba nuotolinės prieigos paslaugą. Tada, užuot klausę klausimų apie paleidimo remontą, jie galų gale gali paprašyti policijos kai kuriuos klausimus apie banko sukčiavimą!

Iki šiol turėtų būti akivaizdu, kodėl norint apsaugoti galutinius vartotojus nuo savęs, taip sakant, reikia tam tikrų dalykų. Tačiau elektros energijos vartotojams, sistemos administratoriai ir kiti Geeks paprastai (nors yra išimčių) šiek tiek daugiau prisibijo šių grėsmių, žinant, kaip atpažinti ir lengvai jų išvengti, ir tiesiog nori grįžti į vis jų darbą. Norėdami tai padaryti, jie turės arba išjungti, arba dirbti aplink kelių kelių blokus:

  • "PowerShell" neleidžia vykdyti išorinio scenarijaus pagal nutylėjimą. "ExecutionPolicy" nustatymas "PowerShell" neleidžia vykdyti išorinių scenarijų pagal nutylėjimą visose "Windows" versijose. Kai kuriose "Windows" versijose pagal nutylėjimą neleidžiama vykdyti scenarijaus. Mes parodėme, kaip pakeisti šį nustatymą "Kaip įgalinti" PowerShell "scenarijų vykdymą sistemoje" Windows 7 ", tačiau čia apimsime ir kelis lygius.
  • "PowerShell" pagal nutylėjimą nėra susietas su.PS1 failo plėtiniu. Iš pradžių mes tai išvedėme "PowerShell Geek School" serijoje. "Windows" nustato numatytuosius.PS1 failų veiksmus, kad atidarytumėte juos "Notepad", o ne siųsti juos į komandų interpretatorių "PowerShell". Tai yra tiesiogiai išvengti netyčinio kenkėjiškų scenarijų vykdymo, kai juos paprasčiausiai spustelėjus dukart spustelėkite.
  • Kai kurie "PowerShell" scenarijai neveiks be administratoriaus leidimų. Net vykdant administratoriaus lygmens paskyrą, norint atlikti tam tikrus veiksmus, vis tiek reikia per "User Account Control" (UAC). Jei tai yra komandinės eilutės įrankiai, tai gali būti šiek tiek sudėtinga. Mes nenorime išjungti "UAC", bet tai vis dar malonu, kai mes galime padaryti tai lengviau spręsti.

Šie patys klausimai pateikiami skyriuje "Kaip naudoti paketinį failą", kad "PowerShell" scenarijus būtų lengviau paleisti, kur mes jums pasakojame rašyti paketinį failą, kad laikinai juos apeitumėte. Dabar mes parodysime, kaip nustatyti savo sistemą ilgesniam laikotarpiui. Turėkite omenyje, kad jūs neturėtumėte apskritai atlikti šių pakeitimų sistemose, kurios nėra naudojamos tik jums - kitaip, jūs išleidžiate kitus vartotojus, kuriems gresia didesnis pavojus, kad jie patiria tas pačias problemas, kurių šios funkcijos yra skirtos išvengti.

Keisti.PS1 failo asociaciją.

Pirmasis, o gal ir svarbiausia, nepatogumas aplankyti yra numatytasis.PS1 failų asociacija. Šių failų susiejimas su niekuo, išskyrus "PowerShell.exe", yra prasmingas užkirsti kelią netyčiniam nepageidaujamų scenarijų vykdymui. Tačiau, atsižvelgiant į tai, kad "PowerShell" yra integruota skriptų aplinka (ISE), kuri specialiai sukurta redaguoti PowerShell scenarijus, kodėl mes norime atidaryti.PS1 failus Notepad pagal nutylėjimą? Net jei nesate pasiruošę visiškai perjungti į dvigubo spustelėjimo paleidimo funkciją, tikriausiai norėsite keisti šiuos nustatymus.

Galite pakeisti.PS1 failų asociaciją į bet kurią norimą programą naudodami numatytąją programų valdymo skydą, tačiau kasti tiesiogiai į registrą, galėsite šiek tiek daugiau kontroliuoti, kaip tiksliai bus atidaryti failai. Tai taip pat leidžia nustatyti arba keisti papildomas parinktis, kurios yra kontekstinio meniu.PS1 failams. Nepamirškite padaryti registro atsarginę kopiją prieš tai atlikdami!

Registro nustatymai, leidžiantys valdyti "PowerShell" scenarijų atidarymą, saugomi šioje vietoje:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Jei norite ištirti šiuos nustatymus, prieš pradėdami juos keisti, pažvelkite į šį raktą ir jo papildomus raktus naudodami Regedit. "Shell" raktas turi turėti tik vieną reikšmę "(Numatytasis)", kuris yra nustatytas kaip "Atidaryti". Tai yra rodyklė į numatytąjį veiksmą dukart spustelėdami failą, kurį pamatysime podekiuose.

Išplėskite "Shell" raktą ir pamatysite tris papildomus raktus. Kiekvienas iš jų - veiksmas, kurį galite atlikti, kuris būdingas "PowerShell" scenarijams.

Galite išplėsti kiekvieną raktą, kad galėtumėte ištirti vertes viduje, tačiau jie iš esmės prilygsta šioms numatytoms reikšmėms:
Galite išplėsti kiekvieną raktą, kad galėtumėte ištirti vertes viduje, tačiau jie iš esmės prilygsta šioms numatytoms reikšmėms:
  • 0 - paleisti su "PowerShell". "Vykdyti su" PowerShell "iš tikrųjų yra galimybė pavadinti" PowerShell "scenarijų kontekstinio meniu. Tekstas yra tiesiog ištrauktas iš kitos vietos, o ne naudojamas raktų pavadinimas, kaip kiti. Tai dar nėra numatytasis dvigubo paspaudimo veiksmas.
  • Redaguoti - atidarykite "PowerShell ISE". Tai reiškia daug daugiau prasmės nei "Notepad", bet vis tiek turite dešiniuoju pelės mygtuku spustelėkite failą.PS1, kad tai padarytumėte pagal numatytuosius nustatymus.
  • Atidarykite - atidarykite Notepad. Atkreipkite dėmesį, kad šis raktinis pavadinimas taip pat yra eilutė, išsaugota "(" Default ")" Shell "raktų reikšmei. Tai reiškia, kad dukart spustelėjus failą bus "Atidaryta", ir šis veiksmas paprastai yra naudojamas "Notepad".

Jei norite laikytis jau sukurtų komandų eilučių, galite tiesiog pakeisti "(Numatytoji)" reikšmę "Shell" raktą, kad suderintumėte rakto pavadinimą, kuris atitiktų tai, ko norite dukart spustelėti. Tai gali būti lengvai padaryta iš "Regedit" arba galite naudoti pamokas, gautas iš mūsų vadovėlio, ieškant registro su "PowerShell" (plius nedidelis "PSDrive" nustatymas), kad pradėtumėte kurti pakartotinai naudojamą scenarijų, kuris gali sukonfigūruoti jūsų sistemas. Žemiau pateiktos komandos turi būti paleidžiamos iš padidinto "PowerShell" sesijos, panašios į "CMD" kaip "Administrator".

Pirma, norėsite sukonfigūruoti "PSDrive" HKEY_CLASSES_ROOT, nes pagal numatytuosius nustatymus jis nenustatytas. Komandai tai yra:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Dabar galite naršyti ir redaguoti registro raktus ir reikšmes HKEY_CLASSES_ROOT, kaip ir įprastose HKCU ir HKLM PSDrives.

Norėdami sukonfigūruoti dukart spustelėkite, norėdami paleisti "PowerShell" scenarijus tiesiogiai:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 0

Norėdami sukonfigūruoti dukart spustelėkite norėdami atidaryti PowerShell scenarijus "PowerShell ISE":

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Edit'

Norėdami atkurti numatytąją vertę (du kartus spustelėkite, kad atidarytumėte "PowerShell" scenarijus "Notepad"):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Open'

Tai tik pagrindinio dvigubo paspaudimo veiksmo keitimo pagrindai. Išsamiau aptarsime, kaip pritaikyti "PowerShell" scenarijus, kai jie atidaromi "PowerShell" naršyklėje iš Explorer, kitame skyriuje. Turėkite omenyje, kad apimtys neleidžia PSDrives išlikti per seansus. Taigi, jūs tikriausiai norėsite įtraukti "New-PSDrive" liniją į bet kurią konfigūravimo scenarijų, kurią kuriate šiam tikslui, pradžioje arba pridėti prie "PowerShell" profilio. Priešingu atveju prieš bandydami atlikti tokius pakeitimus turėsite paleisti šį failą rankiniu būdu.

"PowerShell ExecutionPolicy" nustatymo keitimas.

PowerShell's ExecutionPolicy yra dar vienas apsaugos nuo kenkėjiškų scenarijų vykdymo sluoksnis. Tai yra keletas variantų, ir kelis skirtingus jos nustatymo būdus. Nuo labiausiai iki mažiausiai saugių yra galimi variantai:

  • Ribotas - scenarijus neleidžiama paleisti. (Daugumos sistemų numatytasis nustatymas.) Tai netgi užkels jūsų profilio scenarijų.
  • "AllSigned" - visi scenarijai turi būti pasirašyti patikimam leidėjui skaitmeniniu būdu, kad jis nebūtų rodomas vartotojui. Skriptai, kuriuos pasirašo leidėjai, kurie aiškiai apibrėžiami kaip nepatikimi, arba scenarijai, kurie nėra skaitmeniškai pasirašyti, nebus rodomi. "PowerShell" paragins naudotoją patvirtinti, jei scenarijų pasirašo leidėjas, kuris dar nėra apibrėžtas kaip patikimas ar nepatikimas. Jei nesate pasirašiusi savo profilio scenarijaus skaitmeniniu būdu ir įsitikinę, kad šis parašas, jis negalės būti paleistas. Būkite atsargūs, kuriuos leidėjus patikėsite, nes vis tiek galite baigti kurti piktybinius scenarijus, jei pasitikite klaidingu.
  • "RemoteSigned" - scenarijus, atsisiųstus iš interneto, tai iš tikrųjų yra tas pats, kas "AllSigned". Tačiau scenarijus, sukurtus vietoje arba importuoti iš kitų šaltinių nei internetas, gali būti paleisti be patvirtinimo. Čia taip pat turėtumėte būti atsargūs, kuriuos skaitmeninius parašus pasitikite, bet būkite atsargus, jei nesate pasirašę scenarijai, kuriuos pasirinkote paleisti. Tai yra aukščiausias saugumo lygis, pagal kurį jūs galite turėti darbo profilio scenarijų be skaitmeninio pasirašymo.
  • Neribojama. Visiems scenarijams leidžiama paleisti, tačiau scenarijus iš interneto reikalingas patvirtinimo eilutė. Nuo to momento visiškai priklauso nuo jūsų, kad nebūtų paleisti nepatikimų skriptų.
  • Bypass - Viskas veikia be įspėjimo. Būkite atsargūs su šia.
  • Neapibrėžta. Dabartinėje srityje neapibrėžta jokios politikos. Tai naudojama siekiant leisti grįžti į politiką, apibrėžtą žemesnėse srityse (išsamesnė informacija pateikiama toliau) arba OS numatytuosius nustatymus.

Kaip nurodyta neapibrėžtumo aprašyme, pirmiau nurodytos strategijos gali būti nustatytos vienoje ar daugiau iš kelių taikymo sričių. Galite naudoti "Get-ExecutionPolicy" su parametru -List, kad pamatytumėte visas taikymo sritis ir jų dabartinę konfigūraciją.

Taikymo sritis yra išvardytos pirmenybės tvarka, o viršutinė apibrėžta sritis yra svarbesnė už visus kitus. Jei nėra nustatytos jokios politikos, sistema grįš į numatytąjį nustatymą (daugeliu atvejų tai yra apribotas).
Taikymo sritis yra išvardytos pirmenybės tvarka, o viršutinė apibrėžta sritis yra svarbesnė už visus kitus. Jei nėra nustatytos jokios politikos, sistema grįš į numatytąjį nustatymą (daugeliu atvejų tai yra apribotas).
  • MachinePolicy atstovauja grupės politiką, veikiančią kompiuterio lygmeniu. Tai paprastai taikoma tik domenui, tačiau taip pat galima atlikti ir vietoje.
  • UserPolicy atstovauja vartotojui galiojančią grupinę politiką. Tai taip pat paprastai naudojama tik įmonės aplinkoje.
  • Procesas yra šio "PowerShell" egzemplioriaus taikymo sritis. Šios srities politikos pakeitimai neturės įtakos kitiems "PowerShell" procesams ir nebus veiksmingi po šios sesijos nutraukimo. Tai gali būti sukonfigūruota parametro -ExecutionPolicy, kai paleidžiamas "PowerShell", arba jis gali būti nustatytas naudojant tinkamą "Set-ExecutionPolicy" sintaksę iš sesijos.
  • CurrentUser yra sritis, kuri yra sukonfigūruota vietiniame registre ir taikoma naudotojo paskyrai, naudojamai paleisti "PowerShell". Ši apimtis gali būti pakeista naudojant "Set-ExecutionPolicy".
  • LocalMachine yra srities, sukonfigūruota vietiniame registre ir taikoma visiems sistemos naudotojams. Tai numatytoji taikymo sritis, kuri yra pakeista, jei Set-ExecutionPolicy paleista be parametro -Scope. Kadangi jis taikomas visiems sistemos vartotojams, jis gali būti pakeistas tik iš padidėjusios sesijos.

Kadangi šis straipsnis daugiausia yra apie saugumą, siekiant palengvinti naudojimą, mes tik susirūpinę mažesnėmis trimis taikymo sritimis. "MachinePolicy" ir "UserPolicy" nustatymai yra tikrai naudingi tik tuo atveju, jei norite taikyti ribojamą politiką, kuri nėra paprasčiausiai apeinama. Palaikydami savo pakeitimus proceso lygyje arba žemiau, bet kuriuo metu mes galime lengvai naudoti bet kokią politikos nuostatą, kurią mes manome tinkama konkrečiai situacijai.

Norint išlaikyti tam tikrą pusiausvyrą tarp saugumo ir patogumo, paveikslėlyje parodyta politika tikriausiai yra geriausia. "LocalMachine" nustatymas "Restricted" apskritai neleidžia paleisti scenarijų bet kam, išskyrus jums. Žinoma, tai gali būti apeiti vartotojai, kurie žino, ką daro be didelių pastangų. Bet tai turėtų išlaikyti bet kokius neprofesionaliai išmanančius vartotojus netyčia sukelti kažką katastrofiško "PowerShell". Jei naudojate CurrentUser (t. Y. Jums) nustatytą kaip neapribotą, galite rankiniu būdu paleisti scenarijus iš komandinės eilutės, kuri jums patinka, tačiau išsaugo priminimą apie atsargų scenarijų, atsisiųstų iš interneto. "RemoteSigned" nustatymas proceso lygyje turėtų būti atliekamas sparčiuoju būdu į "PowerShell.exe" arba (kaip mes tai darysime) registro reikšmių, valdančių "PowerShell" scenarijų elgesį. Tai leis lengvai dukart spustelėti paleidimo funkciją bet kokiems scenarijams, kuriuos rašote, tuo pat metu sukurdami stipresnę kliūtį dėl netyčinio (galimai piktavališko) scenarijų iš išorinių šaltinių vykdymo. Mes norime tai padaryti čia, nes netyčia dvigubai spustelėkite scenarijų, bet dažniausiai tai yra tiesiog vadinti interaktyviuoju sesija rankiniu būdu.

Norėdami nustatyti "CurrentUser" ir "LocalMachine" politiką, kaip nurodyta anksčiau pateiktame ekrane, paleiskite šias iš padidinto PowerShell sesijos komandų:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Norėdami įdiegti "RemoteSigned" politiką scenarijus, paleidžiamus iš "Explorer", turėsime pakeisti vertę viename iš registro raktų, kuriuos ieškojome anksčiau. Tai ypač svarbu, nes, priklausomai nuo "PowerShell" ar "Windows" versijos, numatytoji konfigūracija gali apeiti visus "ExecutionPolicy" nustatymus, išskyrus "AllSigned". Norėdami sužinoti, kokia yra dabartinė konfigūracija jūsų kompiuteryje, galite paleisti šią komandą (įsitikinkite, kad pirmiausia priskiriama HKCR PSDrive):

Get-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand | Select-Object '(Default)'

Jūsų numatytoji konfigūracija greičiausiai bus viena iš šių dviejų eilučių arba kažkas gana panašios:

("Windows 7 SP1 x64", "PowerShell 2.0")

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-file' '%1'

(Matyta Windows 8.1 x64, PowerShell 4.0)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' 'if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1''

Pirmasis nėra labai blogas, nes viskas, ką jis atlieka, yra scenarijaus vykdymas esamų ExecutionPolicy nustatymų. Tai galėtų būti padaryta geriau, vykdant griežtesnius apribojimus dėl nelaimingesnio veikimo veiksmų, bet iš pradžių ji nebuvo pradėta dukart spragtelėti, o numatytoji politika paprastai yra ribojama. Tačiau antrasis variantas yra visa apvažiavimas bet kokios vykdomosios politikos, kurią galbūt turėsite, net apribota. Kadangi aplinkkelis bus taikomas proceso sritį, jis turi įtakos tik seansams, kurie paleidžiami, kai skriptai paleidžiami iš Explorer. Tačiau tai reiškia, kad galėtumėte užbaigti scenarijų paleidimą, kuriuos galėtumėte kitaip tikėtis (ir norite), kad jūsų draudžiama politika.

Jei norite nustatyti iš "Explorer" paleidžiamų scenarijų "Process-level ExecutionPolicy", kaip nurodyta anksčiau pateiktame ekrano kopijavime, turėsite pakeisti tą pačią registruojamą vertę, kurią mes ką tik paprašėme. Tai galite padaryti rankiniu būdu Regedit, pakeisdami jį į šį:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

Jei norite, taip pat galite pakeisti nustatymą iš "PowerShell". Nepamirškite tai daryti iš padidėjusios sesijos su žemėlapiu HKCR PSDrive.
Jei norite, taip pat galite pakeisti nustatymą iš "PowerShell". Nepamirškite tai daryti iš padidėjusios sesijos su žemėlapiu HKCR PSDrive.

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

Paleiskite "PowerShell" scenarijus kaip administratorių.

Kadangi yra bloga mintis visiškai uždrausti UAC, taip pat bloga saugumo praktika yra scenarijų paleidimas ar programos su padidintomis privilegijomis, nebent iš tikrųjų jų reikia atlikti operacijas, kurioms reikia administratoriaus prieigos. Taigi, nerekomenduojama sukurti "UAC" paskyros numatytąjį "PowerShell" scenarijų veiksmą. Tačiau galime pridėti naują kontekstinio meniu parinktį, kad mums būtų lengviau paleisti scenarijus padidintose sesijose, kai mums reikia. Tai panaši į metodą, kuris naudojamas "visų su failais konteksto meniu" "Atidaryti su užrašu" pridėti, tačiau mes tik ketiname nukreipti į "PowerShell" scenarijus. Mes taip pat ketiname perkelti tam tikrus ankstesniame straipsnyje aprašytus metodus, kuriuose mes naudojame paketinį failą, o ne registro keitimus, kad paleistume PowerShell scenarijų.

Norėdami tai padaryti "Regedit", grįžkite į "Shell" raktą, adresu:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Čia sukurkite naują sub-key. Skambinkite "Run with PowerShell (Admin)". Po to sukurkite kitą sub-klavišą, vadinamą "Command".Tada nustatykite "(Numatytoji)" reikšmę komandą į šį:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

"PowerShell" tuo pačiu metu reikės trys eilutės. Vienas už kiekvieną naują raktą, o kitas - "Command" ("Numatytasis") nustatymas. Nepamirškite aukščio ir HKCR kartografavimo.
"PowerShell" tuo pačiu metu reikės trys eilutės. Vienas už kiekvieną naują raktą, o kitas - "Command" ("Numatytasis") nustatymas. Nepamirškite aukščio ir HKCR kartografavimo.

New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)' New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Be to, atkreipkite ypatingą dėmesį į skirtumus tarp eilutės, kuri naudojama per "PowerShell", ir faktinę vertę, kuri patenka į registrą. Visų pirma, mes turime suvynioti viską į vieną kabučių ir dvigubai padidinti vidaus vidines kabučių, kad būtų išvengta komandų analizavimo klaidų.

Dabar turėtumėte turėti naują "PowerShell" scenarijų kontekstinio meniu įrašą, pavadintą "Vykdyti su" PowerShell "(administratoriumi).

Nauja parinktis generuoja du nuoseklūs "PowerShell" egzempliorius. Pirmasis yra tik antrojo paleidimo įrenginys, kuris naudoja pradinio proceso parametrą "-Verb RunAs", norėdamas pakviesti naujojo seanso aukštį. Iš ten jūsų scenarijus turėtų galėti paleisti su administratoriaus privilegijomis, spustelėjus UAC raginimą.
Nauja parinktis generuoja du nuoseklūs "PowerShell" egzempliorius. Pirmasis yra tik antrojo paleidimo įrenginys, kuris naudoja pradinio proceso parametrą "-Verb RunAs", norėdamas pakviesti naujojo seanso aukštį. Iš ten jūsų scenarijus turėtų galėti paleisti su administratoriaus privilegijomis, spustelėjus UAC raginimą.

Apdaila paliečia.

Tai dar tik keletas patobulinimų, galinčių dar labiau palengvinti gyvenimą. Pirma, kaip visiškai atsikratyti "Notepad" funkcijos? Tiesiog nukopijuokite "(Numatytoji)" reikšmę iš komandų klavišą Redaguoti (žemiau), į tą pačią vietą, esančią po "Atidaryti".

'C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1'

Arba galite naudoti šį "PowerShell" bitą (žinoma, su "Admin &HKCR"):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellOpenCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1''

Dar vienas nemandagus dalykas - konsolės įprotis išnykti, kai scenarijus yra baigtas. Kai tai atsitiks, mes neturime jokios galimybės peržiūrėti scenarijų išėjimo klaidas ar kitą naudingą informaciją. Tai, be abejo, gali būti stengiamasi sustabdyti kiekvieno scenarijaus pabaigą. Be to, mes galime keisti komandų raktų "(Numatytoji)" reikšmes, įtraukdami parametrą "-NoExit". Žemiau yra pakeistos vertės.

(Be administratoriaus prieigos)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

(Su administratoriaus prieiga)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Ir, žinoma, mes suteiksime jums ir "PowerShell" komandas. Paskutinis priminimas: Elevation & HKCR!

(Ne administratorius)

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

(Administratorius)

Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-NoExit -ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Atsižvelgdami į tai, kad sukite.

Norėdami išbandyti tai, mes ketiname naudoti scenarijų, kuris gali mums parodyti "ExecutionPolicy" nustatymus vietoje ir ar skriptas buvo paleistas su administratoriaus leidimais. Šis scenarijus bus vadinamas "MyScript.ps1" ir bus laikomas "D: Script Lab" mūsų pavyzdinėje sistemoje. Kodas yra pateikiamas toliau.

if(([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {Write-Output 'Running as Administrator!'} else {Write-Output 'Running Limited!'} Get-ExecutionPolicy -List

"Action with PowerShell" veiksmo naudojimas:

Naudodami veiksmą "Vykdyti su PowerShell (administratoriumi)", paspaudę per UAC:
Naudodami veiksmą "Vykdyti su PowerShell (administratoriumi)", paspaudę per UAC:
Norėdami parodyti "ExecutionPolicy" operacijoje proceso sritį, galime "Windows" manyti, kad failas buvo gautas iš interneto su šia "PowerShell" kodo bitų:
Norėdami parodyti "ExecutionPolicy" operacijoje proceso sritį, galime "Windows" manyti, kad failas buvo gautas iš interneto su šia "PowerShell" kodo bitų:

Add-Content -Path 'D:Script LabMyScript.ps1' -Value '[ZoneTransfer]`nZoneId=3' -Stream 'Zone.Identifier'

Laimei, mes turėjome -NoExit įjungta. Priešingu atveju ši klaida būtų tiesiog sužavėta, ir mes nebūtų žinoma!
Laimei, mes turėjome -NoExit įjungta. Priešingu atveju ši klaida būtų tiesiog sužavėta, ir mes nebūtų žinoma!

Zone.Identifier galima pašalinti šiuo:

Clear-Content -Path 'D:Script LabMyScript.ps1' -Stream 'Zone.Identifier'

Naudingos nuorodos:

  • "PowerShell" scenarijų paleidimas iš serijinio failo - "Daniel Schroeder" programavimo dienoraštis
  • "PowerShell" administratoriaus leidimų tikrinimas - Ei, scenarijus vaikinas! Dienoraštis

Rekomenduojamas: