Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

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

Windows PowerShell konsolė, rodanti, kad script.ps1 failas užblokuotas, nes scenarijų vykdymas sistemoje išjungtas

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.

Windows PowerShell, rodantis Get-ExecutionPolicy -List su MachinePolicy, UserPolicy, Process, CurrentUser ir LocalMachine sritimis

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ą

ParinktisIšliekamumasAdministracinės teisėsPagrindinis kompromisasGeriausiai tinka
Unblock-File naudojant RemoteSignedFailui specifinisĮprastai nereikia pakėlimo savo failuiAiškiai pasitikite vienu atsisiųstu failu; kiti atsisiųsti nepasirašyti failai lieka veikiami RemoteSignedVienas peržiūrėtas scenarijus, atsisiųstas iš interneto
Process RemoteSignedTik dabartinis PowerShell procesasNėra LocalMachine pakeitimoMažas išliekamumas, tačiau atsisiųstiems nepasirašytiems failams vis tiek gali prireikti atblokavimoLaikina kūrimo ar derinimo sesija
CurrentUser RemoteSignedIšlieka jūsų vartotojo paskyraiNereikalauja keisti visų vartotojųPatogu reguliarų vietiniam scenarijų rašymui; platesnis nei vienos sesijos pakeitimasAsmeninė kūrimo darbo stotis
LocalMachine RemoteSignedIšlieka visiems vartotojamsReikalauja pakėlimoPlatesnis poveikis visam kompiuteriuiBendras kompiuteris, kuriame administratorius sąmoningai nori tos pačios politikos visiems vartotojams
AllSignedPriklauso nuo sritiesPriklauso nuo sritiesReikalauja parašų net vietiniams scenarijams; prideda sertifikato ir pasirašymo darbo krūvįOrganizacijos, turinčios kodo pasirašymo procesą
BypassPriklauso nuo srities; dažnai naudojama Process srityjePriklauso nuo sritiesJokių scenarijų blokavimų, įspėjimų ar užklausų dėl vykdymo politikosKontroliuojama 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.

Windows paieškos rezultatai Windows PowerShell su paryškinta parinktimi Vykdyti kaip administratorius

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.

Administratoriaus Windows PowerShell, rodantis Set-ExecutionPolicy RemoteSigned ir vykdymo politikos patvirtinimo užklausą

Š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

Windows PowerShell, rodantis Set-ExecutionPolicy Process srityje su Bypass ir Get-ExecutionPolicy -List, rodantis Process 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.

Windows failo savybių dialogas script.ps1, rodantis Saugumo skiltį ir Unblock žymėjimo langelį

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ė.

Windows PowerShell, rodantis Set-ExecutionPolicy Restricted patvirtinimo užklausą

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

Windows PowerShell, sėkmingai paleidžiantis script.ps1 ir grąžinantis Script ran successfully

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ų situacijaRekomenduojamas pradinis taškasKodėl
Atsisiuntėte vieną scenarijų iš šaltinio, kuriuo pasitikitePalikite RemoteSigned ir po peržiūros naudokite Unblock-FilePakeičia pasitikėjimą vienu failu, o ne visais scenarijais
Scenarijų reikia tik dabartinėje derinimo sesijojeProcess RemoteSignedUžsidaro kartu su sesija ir išlaiko interneto kilmės apribojimus
Reguliariai rašote ir paleidžiate savo scenarijusCurrentUser RemoteSignedNuolatinis 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 BypassSukurtas kontroliuojamiems pagrindinio kompiuterio scenarijams; venkite daryti tai atsitiktiniu nuolatiniu numatytuoju nustatymu
Apibrėžta MachinePolicy arba UserPolicyLaikykitės IT arba grupės politikosVietiniai 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.

Palikti komentarą

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Ištaisykite „Prisma Client“ nesugeneravimo klaidą patikrinę generatorių, schemą, išvesties kelią, importus, versijas, monorepo sąranką ir diegimo kūrimo veiksmus.

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Ištaisykite Git klaidą „unable to get local issuer certificate“ nustatydami pasitikėjimo šaltinį, įdiegdami tinkamą CA grandinę ir palikdami įjungtą SSL patikrą.

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Ištaisykite MongoDB tinklo laiko limito klaidas Mongoose nustatydami laiko limito tipą, patikrindami Atlas arba TCP pasiekiamumą, koreguodami URI ir tikslindami laiko limitus tik tada, kai tai pagrįsta.

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Ištaisykite PowerShell vykdymo politikos „Restricted“ klaidą patikrindami sritį ir grupės politiką, tada pasirinkdami RemoteSigned, Unblock-File arba laikiną sesijos parinktį.

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Ištaisykite npm ERESOLVE peer dependency konfliktus nustatydami nesuderinamą paketo diapazoną, suderindami versijas, naudodami komandas npm explain ir npm ls, bei laikydami legacy-peer-deps arba force tik kontroliuojamais atsarginiais variantais.

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Ištaisykite Redis prisijungimo atmetimo klaidas adresu 127.0.0.1:6379 tikrindami serverį, prievadą, Docker tinklą, redis.conf, autentifikaciją ir TLS.

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Ištaisykite Next.js Server Component 500 klaidas stebėdami serverio žurnalus, tikrindami duomenų gavimą ir aplinkos kintamuosius, apdorodami klaidas ir patikrindami gamybinį sukūrimą.

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Diagnozuokite ir ištaisykite Kubernetes CrashLoopBackOff klaidą vietiniame Minikube tikrindami pod būseną, ankstesnius žurnalus, išėjimo priežastis, zondas, konfigūraciją, atminties apribojimus ir klasterio sveikatą.

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Ištaisykite „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11 tikrindami Docker būseną, atnaujindami ir paleisdami iš naujo WSL 2, tikrindami virtualizaciją bei naudodami diagnostiką prieš atstatymą.

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Ištaisykite Vite klaidą „process is not defined“ pakeisdami Node stiliaus process.env naudojimą, teisingai sukonfigūruodami VITE_ kintamuosius ir patikrindami priklausomybes.