Saugiausias būdas išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell nėra nukopijuoti plačiausią komandą, kurią galite rasti. Pirmiausia nustatykite, kuri vykdymo politika iš tikrųjų yra veiksminga, tada pasirinkite siauriausią pakeitimą, atitinkantį tai, ką bandote paleisti.
„Microsoft“ dabartinė dokumentacija taip pat pabrėžia versijos konteksto svarbą. Windows PowerShell 5.1 dokumentuose Restricted nurodytas kaip numatytoji vykdymo politika Windows klientų kompiuteriams. Dabartinė PowerShell 7.6 dokumentacija apibrėžia Default kaip RemoteSigned sistemoje Windows. Tačiau, jei visos sritys yra Undefined, „Microsoft“ vis tiek dokumentuoja, kad veiksminga atsarginė reikšmė Windows klientuose yra Restricted. Praktinė pamoka yra paprasta: nedarykite išvadų apie savo politiką remdamiesi Windows versija ar vadovėliu. Paleiskite politikos komandas tame kompiuteryje, kuriame kyla klaida.
Šiame vadove pagrindiniai sprendimai lyginami pagal sritį, išliekamumą, administracinį poveikį ir pasitikėjimo modelį. Tikslas – paleisti teisėtą scenarijų nesilpninant sistemos apsaugos labiau nei būtina.
Ką iš tikrųjų reiškia Restricted klaida
Pagal Restricted politiką PowerShell leidžia vykdyti atskiras komandas, bet neleidžia paleisti scenarijų failų. Tai apima PowerShell scenarijus ir susijusius konfigūracijos ar modulių scenarijų failus. „Microsoft“ vykdymo politiką apibūdina kaip saugumo priemonę, kuri kontroliuoja sąlygas, kuriomis įkeliami scenarijai ir konfigūracijos failai. Tai nėra saugumo riba; „Microsoft“ aiškiai nurodo, kad vartotojas vis tiek gali įvesti komandas interaktyviai. Perskaitykite dabartinę about_Execution_Policies dokumentaciją PowerShell 7.6 ir Windows PowerShell 5.1 vykdymo politikos dokumentaciją.
Dažna klaida teigia, kad .ps1 failas negali būti įkeltas, nes scenarijų vykdymas yra išjungtas; prieš keisdami politiką, užfiksuokite tikslią žinutę.
Šis skirtumas yra svarbus. Vykdymo politika gali padėti išvengti atsitiktinio scenarijų vykdymo, tačiau nustatymas RemoteSigned arba Bypass nepadaroma scenarijaus patikimu. Pirmiausia peržiūrėkite scenarijų ir jo šaltinį.
1 žingsnis: nustatykite veiksmingą politiką ir visas sritis
Paleiskite šias dvi komandas:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
Pirmoji grąžina dabartinės sesijos veiksmingą politiką. Antroji išvardija politikas, taikomas srityse MachinePolicy, UserPolicy, Process, CurrentUser ir LocalMachine. „Microsoft“ rekomenduoja Get-ExecutionPolicy -List būtent tam, kad matytumėte politikas, kurios gali paveikti sesiją. Žr. Get-ExecutionPolicy.
Patikrinkite visas sritis vietoj to, kad manytumėte, jog LocalMachine reikšmė yra ta, kuri kontroliuoja sesiją.
Jei MachinePolicy arba UserPolicy yra apibrėžta, sustokite prieš bandydami priverstinai taikyti vietinį apėjimą. Šios reikšmės gaunamos iš grupės politikos ir gali nepaisyti vykdymo politikos nustatymų, padarytų naudojant PowerShell. Valdomame darbo kompiuteryje teisingas kitas žingsnis dažniausiai yra laikytis organizacijos proceso arba kreiptis į IT skyrių.
Pasirinkite sprendimą pagal poreikį, o ne pagal trumpiausią komandą
| Parinktis | Išliekamumas | Administracinės teisės | Pagrindinis kompromisas | Geriausiai tinka |
Unblock-File naudojant RemoteSigned | Failui specifinis | Įprastai nereikia pakėlimo savo failui | Aiškiai pasitikite vienu atsisiųstu failu; kiti atsisiųsti nepasirašyti failai lieka veikiami RemoteSigned | Vienas peržiūrėtas scenarijus, atsisiųstas iš interneto |
Process RemoteSigned | Tik dabartinis PowerShell procesas | Nėra LocalMachine pakeitimo | Mažas išliekamumas, tačiau atsisiųstiems nepasirašytiems failams vis tiek gali prireikti atblokavimo | Laikina kūrimo ar derinimo sesija |
CurrentUser RemoteSigned | Išlieka jūsų vartotojo paskyrai | Nereikalauja keisti visų vartotojų | Patogu reguliarų vietiniam scenarijų rašymui; platesnis nei vienos sesijos pakeitimas | Asmeninė kūrimo darbo stotis |
LocalMachine RemoteSigned | Išlieka visiems vartotojams | Reikalauja pakėlimo | Platesnis poveikis visam kompiuteriui | Bendras kompiuteris, kuriame administratorius sąmoningai nori tos pačios politikos visiems vartotojams |
AllSigned | Priklauso nuo srities | Priklauso nuo srities | Reikalauja parašų net vietiniams scenarijams; prideda sertifikato ir pasirašymo darbo krūvį | Organizacijos, turinčios kodo pasirašymo procesą |
Bypass | Priklauso nuo srities; dažnai naudojama Process srityje | Priklauso nuo srities | Jokių scenarijų blokavimų, įspėjimų ar užklausų dėl vykdymo politikos | Kontroliuojama automatika su savo pasitikėjimo ir saugumo modeliu, o ne atsitiktinis nuolatinis nustatymas |
2 žingsnis: naudokite administratoriaus teises tik visam kompiuteriui skirtam pakeitimui
Jums nereikia atidaryti pakeltos PowerShell tik tam, kad pakeistumėte CurrentUser arba Process sritį. „Microsoft“ teigia, kad pakėlimas reikalingas keičiant politiką vietiniam kompiuteriui, t. y. LocalMachine. Tai naudingas kompromisas: jei tik jūsų vartotojo paskyrai reikia vietinių scenarijų, keisti visų vartotojų politiką prideda sritį, bet neprideda naudos.
Vykdyti kaip administratorius yra tinkama sąmoningam LocalMachine pakeitimui, tačiau tai nereikalinga Process arba CurrentUser sritims.
Rekomendacija pagal poreikį: naudokite CurrentUser kūrėjo paskyrai, kuri reguliariai paleidžia vietinius scenarijus. LocalMachine skirta administratoriui, kuris sąmoningai nori, kad tas pats nustatymas paveiktų visus vartotojus.
3 žingsnis: reguliarų vietiniam scenarijų rašymui svarstykite CurrentUser RemoteSigned
Daugeliui asmeninių kūrimo kompiuterių praktinis nuolatinis pasirinkimas yra:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned leidžia paleisti vietinius scenarijus nereikalaujant parašo, o scenarijai, pažymėti kaip atsisiųsti iš interneto, reikalauja patikimo skaitmeninio parašo, nebent aiškiai atblokuojate failą. Tai išlaiko naudingą skirtumą tarp kodo, kurį sukūrėte vietoje, ir kodo, gauto iš kito šaltinio.
Ši iliustracija rodo visam kompiuteriui skirtą RemoteSigned komandą, nes sritis nenurodyta; LocalMachine yra numatytoji sritis. Geriau nurodyti sritį aiškiai, kad poveikis būtų sąmoningas.
Dažna klaida yra paleisti Set-ExecutionPolicy RemoteSigned be -Scope. „Microsoft“ dokumentuoja LocalMachine kaip numatytąją sritį nustatant vykdymo politiką. Todėl geriau būti aiškiam:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Pakeitimas įsigalioja nedelsiant; PowerShell nereikia paleisti iš naujo dėl CurrentUser arba LocalMachine pakeitimų.
4 žingsnis: laikinai sesijai pirmenybę teikite Process srities politikai
Jei derinate arba vieną kartą paleidžiate patikimą vietinį scenarijų, venkite nuolatinio vartotojo ar kompiuterio pakeitimo. Siauresnis variantas yra:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Process sritis taikoma tik dabartinei PowerShell sesijai. „Microsoft“ teigia, kad ji saugoma $Env:PSExecutionPolicyPreference aplinkos kintamajame ir ištrinama uždarant procesą.
Jei didesnė programa, diegiklis arba kontroliuojama automatikos aplinka jau turi savo saugumo modelį, PowerShell taip pat pateikia Bypass:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Process srities Bypass išnyksta uždarant PowerShell procesą, tačiau jis taip pat pašalina vykdymo politikos įspėjimus ir blokavimą toje sesijoje.
Kompromisas: Process sritis minimizuoja išliekamumą, tačiau Bypass yra platesnis nei RemoteSigned toje sesijoje. „Microsoft“ apibūdina Bypass kaip nieko neblokuojantį ir nerodantį jokių įspėjimų ar užklausų, ir teigia, kad jis skirtas scenarijams, kuriuose kita programa užtikrina saugumo modelį. Įprastai interaktyviai derinimo sesijai pirmiausia naudokite Process RemoteSigned, nebent turite konkrečią priežastį naudoti Bypass.
Atskiram vienkartiniam Windows PowerShell procesui taip pat galite paleisti:
powershell.exe -ExecutionPolicy RemoteSigned -File .\script.ps1
PowerShell 7 vykdomasis failas yra pwsh.exe. Komandinės eilutės vykdymo politikos nustatymas vis tiek nepakeičia vykdymo politikos, priverstinai taikomos grupės politikos.
5 žingsnis: jei RemoteSigned blokuoja atsisiųstą scenarijų, atblokuokite tik tą failą
RemoteSigned kitaip traktuoja failus, pažymėtus kaip kilusius iš interneto. „Microsoft“ dokumentuoja Unblock-File cmdlet kaip šio interneto zonos žymens pašalinimą, leidžiantį peržiūrėtą nepasirašytą scenarijų paleisti pagal RemoteSigned.
Pirmiausia apžiūrėkite scenarijų. Jei pasitikite šaltiniu ir peržiūrėjote turinį, paleiskite:
Unblock-File -Path .\script.ps1
Taip pat galite naudoti Unblock žymėjimo langelį failo savybių dialoge. „Microsoft“ teigia, kad Unblock-File atlieka tą pačią pagrindinę operaciją. Žr. Unblock-File.
Vieno peržiūrėto atsisiųsto scenarijaus atblokavimas yra siauresnis nei politikos silpninimas visiems kompiuteryje esantiems scenarijams.
Galite patikrinti, ar failas turi Zone.Identifier alternatyvųjį duomenų srautą, naudodami:
Get-Item .\script.ps1 -Stream Zone.Identifier -ErrorAction SilentlyContinue
„Microsoft“ pažymi, kad atsisiuntimo būdai ne visada vienodai žymi failus, todėl šio srauto nebuvimas nėra įrodymas, kad scenarijus yra saugus.
6 žingsnis: naudokite AllSigned, kai organizacija turi pasirašymo darbo eigą
AllSigned reikalauja, kad visi scenarijai ir konfigūracijos failai būtų pasirašyti patikimo leidėjo, įskaitant vietinius scenarijus. Tai suteikia organizacijai nuoseklų leidėjo pasitikėjimo darbo eigą, tačiau taip pat sukuria operacinę naštą: scenarijams reikia Authenticode parašų, o vartotojams reikia pasitikėti atitinkamais leidėjais.
„Microsoft“ about_Signing dokumentacija paaiškina, kaip PowerShell tikrina scenarijų parašus ir kaip veikia patikimo leidėjo užklausos.
Rekomendacija pagal poreikį: AllSigned prasmingas, kai jūsų organizacija jau turi kodo pasirašymo sertifikatus, publikavimo kontrolę ir procesą pasirašytiems scenarijams atnaujinti. Vienišam kūrėjui, rašančiam vietinius naudingumo scenarijus, RemoteSigned paprastai sukelia mažiau kliūčių, tačiau vis tiek išlaiko interneto kilmės patikrą.
7 žingsnis: nekovokite su grupės politika valdomame kompiuteryje
PowerShell pateikia dvi politikos sritis, gaunamas iš grupės politikos: MachinePolicy ir UserPolicy. „Microsoft“ grupės politikos dokumentacija teigia, kad nustatymas Turn on Script Execution gali priverstinai taikyti Restricted, RemoteSigned arba AllSigned elgseną valdomiems vartotojams ir kompiuteriams. Šis nustatymas yra:
Administrative Templates\Windows Components\Windows PowerShell
Žr. about_Group_Policy_Settings.
Jei Get-ExecutionPolicy -List rodo apibrėžtą MachinePolicy arba UserPolicy, vietinė Set-ExecutionPolicy komanda gali neduoti tikėtino veiksmingo elgesio. Praktinis sprendimas yra paprašyti tinkamos politikos iš administratoriaus, naudoti pasirašytą scenarijų, jei reikia, arba naudoti patvirtintą diegimo metodą.
8 žingsnis: atstatykite nustatymą, kurį iš tikrųjų pakeitėte, tada patikrinkite
Prieš keisdami nuolatinę sritį, užfiksuokite jos esamą reikšmę:
Get-ExecutionPolicy -Scope CurrentUser
Get-ExecutionPolicy -Scope LocalMachine
Jei vėliau turite pašalinti nustatytą politikos reikšmę, „Microsoft“ dokumentuoja šios srities nustatymą į Undefined:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined
Nepaleiskite aklai Set-ExecutionPolicy Restricted tik todėl, kad ekrano kopijoje tai matoma. Be srities komanda pagal numatytuosius nustatymus nukreipta į LocalMachine, o „Restricted“ galėjo nebūti ankstesnė tos srities reikšmė.
Ekrano kopija iliustruoja Restricted pakeitimą, tačiau tikras grąžinimas turėtų atstatyti sritį ir reikšmę, kurią užfiksavote, o ne spėti ankstesnę konfigūraciją.
Galiausiai patikrinkite tiek veiksmingą politiką, tiek scenarijų:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
.\script.ps1
Sėkmingas scenarijaus paleidimas patvirtina, kad momentinis simptomas išspręstas; dar kartą patikrinkite politikų sąrašą, kad įsitikintumėte, jog nepalikote platesnės srities pakeistos netyčia.
Kurį sprendimą turėtumėte pasirinkti?
| Jūsų situacija | Rekomenduojamas pradinis taškas | Kodėl |
| Atsisiuntėte vieną scenarijų iš šaltinio, kuriuo pasitikite | Palikite RemoteSigned ir po peržiūros naudokite Unblock-File | Pakeičia pasitikėjimą vienu failu, o ne visais scenarijais |
| Scenarijų reikia tik dabartinėje derinimo sesijoje | Process RemoteSigned | Užsidaro kartu su sesija ir išlaiko interneto kilmės apribojimus |
| Reguliariai rašote ir paleidžiate savo scenarijus | CurrentUser RemoteSigned | Nuolatinis patogumas vienam vartotojui nepaveikiant visų kompiuteryje |
| Administruojate bendrą darbo stotį | Įvertinkite LocalMachine RemoteSigned arba organizacijos politiką | Nuoseklus elgesys visiems vartotojams, tačiau platesnis poveikis |
| Jūsų įmonė reikalauja leidėjo kontroliuojamų scenarijų | AllSigned per organizacijos pasirašymo ir politikos procesą | Nuoseklus parašo reikalavimas, mokant už pasirašymo naštą |
| Diegiklis arba kontroliuojama automatikos sistema turi savo saugumo modelį | Svarstykite process srities Bypass | Sukurtas kontroliuojamiems pagrindinio kompiuterio scenarijams; venkite daryti tai atsitiktiniu nuolatiniu numatytuoju nustatymu |
| Apibrėžta MachinePolicy arba UserPolicy | Laikykitės IT arba grupės politikos | Vietiniai srities pakeitimai nėra teisinga valdžia |
Dažnos klaidos, sukeliančios didesnę problemą nei pradinė klaida
- Nustatyti Unrestricted arba Bypass nuolat tik tam, kad paleistumėte vieną scenarijų. Tai išplečia tai, kas gali būti vykdoma, kai siauresnis Process, CurrentUser arba failui specifinis pakeitimas gali išspręsti problemą.
- Paleisti visas komandas kaip Administratorius. CurrentUser ir Process pakeitimams nereikia LocalMachine politikos pakeitimo.
- Ignoruoti grupės politiką. Jei įrenginys valdomas, politika gali būti sąmoninga, ir vietinis kitos srities keitimas nepakeičia organizacinės kontrolės.
- Atblokuoti scenarijų jį perskaičius. Unblock-File pašalina interneto kilmės bloką; jis nepatvirtina kodo.
- Manyti, kad pasirašytas scenarijus automatiškai yra nekenksmingas. „Microsoft“ pažymi, kad pasirašytas kodas vis tiek gali būti kenksmingas; parašai nustato leidėjo ir vientisumo informaciją, o ne saugaus elgesio garantiją.
- Pamiršti, kurią sritį pakeitėte. Komanda be
-Scope gali paveikti LocalMachine, o Process pakeitimas išnyksta išeinant.
Išvada
Daugeliui asmeninių Windows scenarijų rašymo CurrentUser RemoteSigned yra pagrįstas nuolatinis pasirinkimas, kai reguliariai paleidžiate vietinius scenarijus, o Unblock-File yra siauresnis pasirinkimas vienam peržiūrėtam scenarijui, atsisiųstam iš interneto. Laikinai derinimo sesijai Process RemoteSigned minimizuoja išliekamumą. Bypass turi teisėtą vaidmenį kontroliuojamoje automatikoje, tačiau jo kompromisas yra tas, kad vykdymo politikos blokavimas ir įspėjimai tam procesui pašalinami. Valdomuose kompiuteriuose grupės politiką reikėtų laikyti valdžia, o ne kliūtimi, kurią reikia apeiti.
Todėl geriausias sprendimas nėra viena politika visiems. Tai mažiausia sritis ir mažiausiai leidžiantis elgesys, kuris vis tiek palaiko patikimą scenarijų, kurį reikia paleisti.