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.
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.
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
| Opcija | Trajnost | Administrativna prava | Glavni kompromis | Najbolja primjena |
Unblock-File uz korištenje RemoteSigned | Specifično za datoteku | Obično bez povišenih prava za vašu vlastitu datoteku | Izričito vjerujete jednoj preuzetoj datoteci; druge preuzete nepotpisane datoteke i dalje podliježu pravilima RemoteSigned | Jedna pregledana skripta preuzeta s interneta |
Process RemoteSigned | Samo trenutni PowerShell proces | Bez promjene na razini LocalMachine | Niska trajnost, ali preuzete nepotpisane datoteke i dalje mogu zahtijevati deblokiranje | Privremena razvojna ili sesija za rješavanje problema |
CurrentUser RemoteSigned | Traje za vaš korisnički račun | Ne zahtijeva promjenu za sve korisnike | Pogodno za redovito lokalno skriptiranje; šire od promjene za jednu sesiju | Osobno razvojno radno mjesto |
LocalMachine RemoteSigned | Traje za sve korisnike | Zahtijeva povišene ovlasti | Širi utjecaj na cijelo računalo | Dijeljeno računalo gdje administrator namjerno želi istu politiku za sve korisnike |
AllSigned | Ovisi o opsegu | Ovisi o opsegu | Zahtijeva potpise čak i za lokalno kreirane skripte; dodaje prekovremeni rad s certifikatima i postupkom potpisivanja | Organizacije s postupkom potpisivanja koda |
Bypass | Ovisi o opsegu; često se koristi na razini Process | Ovisi o opsegu | Bez blokiranja skripti, upozorenja ili upita od strane izvršne politike | Kontrolirana 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.
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.
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
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.
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.
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
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 situacija | Preporučena početna točka | Zašto |
| Preuzeli ste jednu skriptu s izvora kojem vjerujete | Zadržite RemoteSigned i koristite Unblock-File nakon pregleda | Mijenja povjerenje za jednu datoteku umjesto za sve skripte |
| Trebate skripte samo u trenutnoj sesiji rješavanja problema | Process RemoteSigned | Zatvara se sa sesijom i zadržava ograničenja internetskog podrijetla |
| Redovito pišete i pokrećete vlastite skripte | CurrentUser RemoteSigned | Trajna pogodnost za jednog korisnika bez utjecaja na sve na PC-u |
| Administrirate dijeljeno radno mjesto | Procijenite LocalMachine RemoteSigned ili organizacijsku politiku | Dosljedno ponašanje za sve korisnike, ali širi utjecaj |
| Vaša tvrtka zahtijeva skripte pod kontrolom izdavača | AllSigned putem postupka potpisivanja i politike organizacije | Dosljedan zahtjev za potpisom uz cijenu prekovremenog rada s potpisivanjem |
| Instalater ili kontrolirani sustav automatizacije ima svoj vlastiti sigurnosni model | Razmislite o Bypass na razini Process | Dizajnirano za kontrolirane scenarije hosta; izbjegavajte ga činiti casual trajnom zadanoj postavkom |
| MachinePolicy ili UserPolicy je definiran | Slijedite IT ili Group Policy | Lokalne 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.