Kako riješiti grešku "Execution Policy Restricted" u sustavu Windows PowerShell

Najsigurniji način za rješavanje greške “Execution Policy Restricted” u sustavu Windows PowerShell nije kopiranje najšire moguće naredbe koju možete pronaći. Prvo identificirajte koja je izvršna politika zapravo na snazi, a zatim odaberite najužu promjenu koja odgovara onome što pokušavate pokrenuti.

Trenutna Microsoftova dokumentacija također naglašava važnost konteksta verzije. Dokumentacija za Windows PowerShell 5.1 navodi Restricted kao zadanu izvršnu politiku za Windows klijentska računala. Trenutna dokumentacija za PowerShell 7.6 definira Default kao RemoteSigned na sustavu Windows. Međutim, ako su svi opsezi nedefinirani (Undefined), Microsoft i dalje dokumentira efektivnu rezervnu opciju na Windows klijentima kao Restricted. Praktična lekcija je jednostavna: nemojte zaključivati svoju politiku na temelju verzije Windowsa ili tutorijala. Pokrenite naredbe za provjeru politike na računalu na kojem se javlja greška.

Ovaj vodič uspoređuje glavna rješenja prema opsegu, trajnosti, administrativnom utjecaju i modelu povjerenja. Cilj je pokrenuti legitimni skript bez nepotrebnog slabljenja sigurnosti sustava.

Što greška Restricted zapravo znači

Prema politici Restricted, PowerShell dopušta pojedinačne naredbe, ali ne dopušta pokretanje datoteka skripti. To uključuje PowerShell skripte i povezane konfiguracijske ili module-skript datoteke. Microsoft opisuje izvršnu politiku kao sigurnosnu značajku koja kontrolira uvjete pod kojima se skripte i konfiguracijske datoteke učitavaju. To nije sigurnosna granica; Microsoft izričito napominje da korisnik i dalje može unositi naredbe interaktivno. Pročitajte trenutnu dokumentaciju about_Execution_Policies za PowerShell 7.6 i dokumentaciju o izvršnoj politici za Windows PowerShell 5.1.

Konzola Windows PowerShell koja prikazuje datoteku script.ps1 blokirana jer je pokretanje skripti onemogućeno na sustavu

Uobičajena greška navodi da se .ps1 datoteka ne može učitati jer je pokretanje skripti onemogućeno; zabilježite točnu poruku prije promjene politike.

Ta razlika je važna. Izvršna politika može pomoći u sprječavanju slučajnog pokretanja skripti, ali postavljanje RemoteSigned ili Bypass ne čini skriptu pouzdanom. Prvo pregledajte skriptu i njezin izvor.

Korak 1: Identificirajte efektivnu politiku i svaki opseg

Pokrenite ove dvije naredbe:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

Prva vraća efektivnu politiku za trenutnu sesiju. Druga navodi politike primijenjene na razinama MachinePolicy, UserPolicy, Process, CurrentUser i LocalMachine. Microsoft preporučuje Get-ExecutionPolicy -List posebno za pregled politika koje mogu utjecati na sesiju. Pogledajte Get-ExecutionPolicy.

Windows PowerShell prikazuje Get-ExecutionPolicy -List s opsezima MachinePolicy, UserPolicy, Process, CurrentUser i LocalMachine

Provjerite sve opsege umjesto da pretpostavljate da je vrijednost LocalMachine ona koja kontrolira sesiju.

Ako je MachinePolicy ili UserPolicy definirana, zaustavite se prije nego što pokušate prisiliti lokalno zaobilazno rješenje. Te vrijednosti dolaze iz Group Policyja i mogu nadjačati postavke izvršne politike napravljene putem PowerShell-a. Na upravljanim poslovnim računalima, sljedeći ispravan korak obično je praćenje organizacijskog postupka ili kontaktiranje IT odjela.

Odaberite rješenje prema potrebi, a ne prema najkraćoj naredbi

OpcijaTrajnostAdministrativna pravaGlavni kompromisNajbolja primjena
Unblock-File uz korištenje RemoteSignedSpecifično za datotekuObično bez povišenih prava za vašu vlastitu datotekuIzričito vjerujete jednoj preuzetoj datoteci; druge preuzete nepotpisane datoteke i dalje podliježu pravilima RemoteSignedJedna pregledana skripta preuzeta s interneta
Process RemoteSignedSamo trenutni PowerShell procesBez promjene na razini LocalMachineNiska trajnost, ali preuzete nepotpisane datoteke i dalje mogu zahtijevati deblokiranjePrivremena razvojna ili sesija za rješavanje problema
CurrentUser RemoteSignedTraje za vaš korisnički računNe zahtijeva promjenu za sve korisnikePogodno za redovito lokalno skriptiranje; šire od promjene za jednu sesijuOsobno razvojno radno mjesto
LocalMachine RemoteSignedTraje za sve korisnikeZahtijeva povišene ovlastiŠiri utjecaj na cijelo računaloDijeljeno računalo gdje administrator namjerno želi istu politiku za sve korisnike
AllSignedOvisi o opseguOvisi o opseguZahtijeva potpise čak i za lokalno kreirane skripte; dodaje prekovremeni rad s certifikatima i postupkom potpisivanjaOrganizacije s postupkom potpisivanja koda
BypassOvisi o opsegu; često se koristi na razini ProcessOvisi o opseguBez blokiranja skripti, upozorenja ili upita od strane izvršne politikeKontrolirana automatizacija s vlastitim modelom povjerenja i sigurnosti, a ne casual trajna postavka

Korak 2: Koristite administratorska prava samo za promjene na razini cijelog računala

Ne morate otvarati povišeni PowerShell samo za promjenu opsega CurrentUser ili Process. Microsoft navodi da su povišene ovlasti potrebne pri promjeni politike za lokalno računalo, što znači LocalMachine. Ovo je koristan kompromis: ako samo vaš korisnički račun treba lokalno skriptiranje, promjena politike za svakog korisnika dodaje opseg bez dodavanja koristi.

Rezultati pretraživanja Windowsa za Windows PowerShell s istaknutom opcijom Pokreni kao administrator

Pokretanje kao administrator prikladno je za namjernu promjenu na razini LocalMachine, ali je nepotrebno za opseg Process ili CurrentUser.

Preporuka prema potrebi: koristite CurrentUser za developerski račun koji redovito pokreće lokalno napisane skripte. Zadržite LocalMachine za administratora koji namjerno želi da ista postavka utječe na sve korisnike.

Korak 3: Za redovito lokalno skriptiranje razmislite o CurrentUser RemoteSigned

Za mnoga osobna razvojna računala, praktičan trajan izbor je:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSigned dopušta pokretanje lokalnih skripti bez zahtijevanja potpisa, dok skripte označene kao preuzete s interneta zahtijevaju pouzdan digitalni potpis osim ako izričito ne deblokirate datoteku. To čuva korisnu razliku između koda koji ste stvorili lokalno i koda dobivenog iz drugog izvora.

Administratorski Windows PowerShell prikazuje Set-ExecutionPolicy RemoteSigned i upit za potvrdu izvršne politike

Ova ilustracija prikazuje naredbu RemoteSigned na razini cijelog računala jer je opseg izostavljen; LocalMachine je zadani opseg. Preporučuje se eksplicitno navođenje opsega kako bi utjecaj bio namjeran.

Uobičajena greška je pokretanje Set-ExecutionPolicy RemoteSigned bez -Scope. Microsoft dokumentira LocalMachine kao zadani opseg pri postavljanju izvršne politike. Zato je bolje biti eksplicitan:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Promjena stupa na snagu odmah; PowerShell ne treba ponovno pokretati za promjene na razini CurrentUser ili LocalMachine.

Korak 4: Za privremenu sesiju preferirajte politiku na razini Process

Ako rješavate probleme ili pokrećete pouzdanu lokalnu skriptu jednom, izbjegavajte trajnu promjenu korisnika ili računala. Uža opcija je:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

Opseg Process primjenjuje se samo na trenutnu PowerShell sesiju. Microsoft navodi da se ona pohranjuje u varijabli okruženja $Env:PSExecutionPolicyPreference i briše se kada se proces zatvori.

Ako veća aplikacija, instalater ili kontrolirano okruženje za automatizaciju već ima svoj vlastiti sigurnosni model, PowerShell također pruža Bypass:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Windows PowerShell prikazuje Set-ExecutionPolicy na opsegu Process s Bypass i Get-ExecutionPolicy -List koji prikazuje Process Bypass

Bypass na razini Process nestaje kada se PowerShell proces zatvori, ali također uklanja upozorenja i blokiranje izvršne politike za tu sesiju.

Kompromis: Opseg Process minimizira trajnost, ali Bypass je širi od RemoteSigned unutar te sesije. Microsoft opisuje Bypass kao opciju koja ništa ne blokira i ne prikazuje upozorenja ili upite, te navodi da je namijenjena scenarijima u kojima druga aplikacija pruža sigurnosni model. Za normalnu interaktivnu sesiju rješavanja problema, prvo koristite Process RemoteSigned osim ako nemate specifičan razlog za Bypass.

Za zaseban jednokratni Windows PowerShell proces, također možete pokrenuti:

powershell.exe -ExecutionPolicy RemoteSigned -File .\script.ps1

Za PowerShell 7, izvršna datoteka je pwsh.exe. Postavka izvršne politike s naredbenog retka i dalje ne nadjačava izvršnu politiku nametnutu putem Group Policyja.

Korak 5: Ako RemoteSigned blokira preuzetu skriptu, deblokirajte samo tu datoteku

RemoteSigned različito tretira datoteke označene kao da potječu s interneta. Microsoft dokumentira cmdlet Unblock-File kao alat koji uklanja tu oznaku internetske zone, omogućujući pregledanoj nepotpisanoj skripti da se pokrene pod RemoteSigned.

Prvo pregledajte skriptu. Ako vjerujete izvoru i pregledali ste sadržaj, pokrenite:

Unblock-File -Path .\script.ps1

Također možete koristiti kvačicu Unblock u dijaloškom okviru Svojstva datoteke. Microsoft navodi da Unblock-File izvršava istu osnovnu operaciju. Pogledajte Unblock-File.

Dijaloški okvir Svojstva datoteke Windowsa za script.ps1 koji prikazuje odjeljak Sigurnost i kvačicu Unblock

Deblokiranje jedne pregledane preuzete skripte uže je od slabljenja politike za svaku skriptu na računalu.

Možete provjeriti ima li datoteka alternativni tok podataka Zone.Identifier pomoću:

Get-Item .\script.ps1 -Stream Zone.Identifier -ErrorAction SilentlyContinue

Microsoft napominje da metode preuzimanja ne označavaju sve datoteke na isti način, pa odsutnost tog toka nije dokaz da je skripta sigurna.

Korak 6: Koristite AllSigned kada organizacija ima postupak potpisivanja

AllSigned zahtijeva da sve skripte i konfiguracijske datoteke budu potpisane od strane pouzdanog izdavača, uključujući skripte kreirane lokalno. To organizaciji daje dosljedan postupak povjerenja u izdavača, ali također stvara operativni prekovremeni rad: skripte trebaju Authenticode potpise, a korisnici moraju vjerovati relevantnim izdavačima.

Microsoftova dokumentacija about_Signing objašnjava kako PowerShell provjerava potpise skripti i kako funkcioniraju upiti za pouzdane izdavače.

Preporuka prema potrebi: AllSigned ima smisla kada vaša organizacija već ima certifikate za potpisivanje koda, kontrole objavljivanja i postupak za ažuriranje potpisanih skripti. Za samostalnog developera koji piše lokalne pomoćne skripte, RemoteSigned obično uključuje manje trenja, a ipak čuva provjeru internetskog podrijetla.

Korak 7: Ne borite se protiv Group Policyja na upravljanim PC-jevima

PowerShell izlaže dva opsega politike koji dolaze iz Group Policyja: MachinePolicy i UserPolicy. Microsoftova dokumentacija o Group Policyju navodi da postavka Turn on Script Execution može nametnuti ponašanje Restricted, RemoteSigned ili AllSigned za upravljane korisnike i računala. Postavka se nalazi pod:

Administrative Templates\Windows Components\Windows PowerShell

Pogledajte about_Group_Policy_Settings.

Ako Get-ExecutionPolicy -List prikazuje definiranu MachinePolicy ili UserPolicy, lokalna naredba Set-ExecutionPolicy možda neće dati očekivano efektivno ponašanje. Praktično rješenje je zatražiti odgovarajuću politiku od administratora, koristiti potpisanu skriptu ako je potrebno ili koristiti odobrenu metodu implementacije.

Korak 8: Vratite postavku koju ste zapravo promijenili, a zatim provjerite

Prije promjene trajnog opsega, zabilježite njegovu postojeću vrijednost:

Get-ExecutionPolicy -Scope CurrentUser

Get-ExecutionPolicy -Scope LocalMachine

Ako kasnije trebate ukloniti vrijednost politike koju ste postavili, Microsoft dokumentira postavljanje tog opsega na Undefined:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined

Nemojte slijepo pokretati Set-ExecutionPolicy Restricted samo zato što snimka zaslona to prikazuje. Bez opsega, naredba cilja na LocalMachine po zadanoj postavci, a “Restricted” možda nije bila prethodna vrijednost tog opsega.

Windows PowerShell prikazuje upit za potvrdu promjene na Restricted

Snimka zaslona ilustrira promjenu na Restricted, ali stvarno vraćanje treba vratiti opseg i vrijednost koju ste zabilježili, a ne nagađati prethodnu konfiguraciju.

Konačno, provjerite i efektivnu politiku i skriptu:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

.\script.ps1

Windows PowerShell uspješno pokreće script.ps1 i vraća poruku Script ran successfully

Uspješno pokretanje skripte potvrđuje da je trenutni simptom riješen; ponovno provjerite popis politika kako biste potvrdili da niste ostavili širi opseg slučajno promijenjenim.

Koje rješenje biste trebali odabrati?

Vaša situacijaPreporučena početna točkaZašto
Preuzeli ste jednu skriptu s izvora kojem vjerujeteZadržite RemoteSigned i koristite Unblock-File nakon pregledaMijenja povjerenje za jednu datoteku umjesto za sve skripte
Trebate skripte samo u trenutnoj sesiji rješavanja problemaProcess RemoteSignedZatvara se sa sesijom i zadržava ograničenja internetskog podrijetla
Redovito pišete i pokrećete vlastite skripteCurrentUser RemoteSignedTrajna pogodnost za jednog korisnika bez utjecaja na sve na PC-u
Administrirate dijeljeno radno mjestoProcijenite LocalMachine RemoteSigned ili organizacijsku politikuDosljedno ponašanje za sve korisnike, ali širi utjecaj
Vaša tvrtka zahtijeva skripte pod kontrolom izdavačaAllSigned putem postupka potpisivanja i politike organizacijeDosljedan zahtjev za potpisom uz cijenu prekovremenog rada s potpisivanjem
Instalater ili kontrolirani sustav automatizacije ima svoj vlastiti sigurnosni modelRazmislite o Bypass na razini ProcessDizajnirano za kontrolirane scenarije hosta; izbjegavajte ga činiti casual trajnom zadanoj postavkom
MachinePolicy ili UserPolicy je definiranSlijedite IT ili Group PolicyLokalne promjene opsega nisu pravi autoritet

Uobičajene greške koje stvaraju veći problem od izvorne greške

  • Postavljanje Unrestricted ili Bypass trajno samo da bi se pokrenula jedna skripta. To proširuje ono što se može izvršiti kada uža promjena na razini Process, CurrentUser ili specifična za datoteku može riješiti problem.
  • Pokretanje svake naredbe kao Administrator. Promjene na razini CurrentUser i Process ne zahtijevaju promjenu politike na razini LocalMachine.
  • Ignoriranje Group Policyja. Ako je uređaj pod upravom, politika može biti namjerna, a lokalna promjena drugog opsega ne zamjenjuje organizacijsku kontrolu.
  • Deblokiranje skripte bez čitanja. Unblock-File uklanja blokadu internetskog podrijetla; ne validira kod.
  • Pretpostavljanje da je potpisana skripta automatski bezopasna. Microsoft napominje da potpisani kod i dalje može biti zlonamjeran; potpisi uspostavljaju informacije o izdavaču i integritetu, a ne jamstvo sigurnog ponašanja.
  • Zaboravljanje koji ste opseg promijenili. Naredba bez -Scope može utjecati na LocalMachine, dok promjena na razini Process nestaje pri izlasku.

Zaključak

Za većinu osobnih Windows skripti, CurrentUser RemoteSigned je razuman trajan izbor kada redovito pokrećete lokalno kreirane skripte, dok je Unblock-File uži izbor za jednu pregledanu skriptu preuzetu s interneta. Za privremenu sesiju rješavanja problema, Process RemoteSigned minimizira trajnost. Bypass ima legitimnu ulogu u kontroliranoj automatizaciji, ali njegov kompromis je da se blokiranje i upozorenja izvršne politike uklanjaju za taj proces. Na upravljanim računalima, Group Policy treba tretirati kao autoritet, a ne kao prepreku koju treba zaobići.

Najbolje rješenje stoga nije jedna politika za sve. To je najmanji opseg i najmanje dopustivo ponašanje koje i dalje podržava pouzdanu skriptu koju trebate pokrenuti.

Ostavite komentar

Kako popraviti grešku "Tailwind CSS stilovi se ne ažuriraju" u Vite React aplikaciji

Kako popraviti grešku "Tailwind CSS stilovi se ne ažuriraju" u Vite React aplikaciji

Ispravite Tailwind CSS stilove koji se ne ažuriraju u Vite Reactu provjerom postavki Tailwind v4, CSS uvoza, otkrivanja izvora, dinamičkih klasa, HMR-a i zastarjelih predmemorija.

Kako popraviti ModuleNotFoundError: Nema modula pod nazivom 'pip' u Pythonu 3

Kako popraviti ModuleNotFoundError: Nema modula pod nazivom 'pip' u Pythonu 3

Ispravite ModuleNotFoundError u Pythonu 3 za pip na Windowsima, macOS-u i Linuxu pomoću ensurepipa, OS paketa, virtualnih okruženja i provjera interpretera.

Kako popraviti "Dozvola odbijena (javni ključ)" u GitHub SSH-u

Kako popraviti "Dozvola odbijena (javni ključ)" u GitHub SSH-u

Ispravite GitHub SSH Permission Denied (publickey) provjerom hosta, aktivnog SSH ključa, GitHub računa, SSO autorizacije, udaljenog URL-a i pristupa portu 22.

Kako popraviti "Git Push Rejected: Non-FastForward" bez gubitka promjena

Kako popraviti "Git Push Rejected: Non-FastForward" bez gubitka promjena

Sigurno ispravite Git push koji ne omogućuje brzo premotavanje. Zaštitite lokalni rad, dohvatite udaljene commitove, odaberite spajanje ili rebase, riješite sukobe i pushajte bez gubitka promjena.

Kako popraviti "Nginx 502 Bad Gateway" prilikom proxyja za Node.js

Kako popraviti "Nginx 502 Bad Gateway" prilikom proxyja za Node.js

Ispravite greške Nginx 502 Bad Gateway s Node.js uzvodno provjerom porta aplikacije, NGINX logova, proxy_pass adrese, umrežavanja kontejnera, vremenskih ograničenja i ponovnog učitavanja.

Kako popraviti "Tip 'null' se ne može dodijeliti tipu" u TypeScriptu

Kako popraviti "Tip 'null' se ne može dodijeliti tipu" u TypeScriptu

Ispravljena je greška "Tip 'null' nije moguće dodijeliti tipu" u TypeScriptu s tipovima unija, sužavanjem, zadanim vrijednostima i sigurnim tvrdnjama pod strictNullChecks.

Kako ispraviti pogrešku „Prisma Client has not been generated yet”

Kako ispraviti pogrešku „Prisma Client has not been generated yet”

Ispravite pogrešku da Prisma Client nije generiran provjerom generatora, sheme, izlazne putanje, uvoza, verzija, monorepo postavki i koraka izgradnje pri implementaciji.

Kako ispraviti "ERR_MODULE_NOT_FOUND" u Node.js ESM uvozima

Kako ispraviti "ERR_MODULE_NOT_FOUND" u Node.js ESM uvozima

Ispravite Node.js ERR_MODULE_NOT_FOUND u ESM-u provjerom putanja uvoza, ekstenzija datoteka, instalacije paketa, izvoza, ESM načina rada i čistih instalacija.

Kako riješiti problem sa SSL certifikatom: Nemoguće dobiti lokalni certifikat izdavatelja u Gitu

Kako riješiti problem sa SSL certifikatom: Nemoguće dobiti lokalni certifikat izdavatelja u Gitu

Riješite Gitovu grešku 'nemoguće dobiti lokalni certifikat izdavatelja' identificiranjem pozadine povjerenja, instaliranjem ispravnog lanca CA i održavanjem omogućene SSL verifikacije.

Kako riješiti grešku mrežnog isteka vremena MongoDB u Mongoose vezi

Kako riješiti grešku mrežnog isteka vremena MongoDB u Mongoose vezi

Riješite greške mrežnog isteka vremena MongoDB u Mongooseu identificiranjem vrste isteka, testiranjem dostupnosti Atlasa ili TCP-a, ispravljanjem URI-ja i podešavanjem vremena isteka samo kada je opravdano.