Ako opraviť chybu Obmedzená politika vykonávania v systéme Windows PowerShell

Najbezpečnejší spôsob, ako opraviť chybu „Obmedzená politika vykonávania“ v systéme Windows PowerShell, nie je skopírovať najširší príkaz, ktorý nájdete. Najprv identifikujte, ktorá politika vykonávania je skutočne účinná, a potom zvoľte najužšiu zmenu, ktorá zodpovedá tomu, čo sa snažíte spustiť.

Aktuálna dokumentácia spoločnosti Microsoft tiež zdôrazňuje dôležitosť kontextu verzie. Dokumentácia pre Windows PowerShell 5.1 uvádza Obmedzené (Restricted) ako predvolenú politiku vykonávania pre klientské počítače so systémom Windows. Súčasná dokumentácia pre PowerShell 7.6 definuje Predvolené (Default) ako RemoteSigned na systéme Windows. Ak sú však všetky rozsahy nedefinované (Undefined), Microsoft stále dokumentuje účinnú záložnú hodnotu na klientskych počítačoch so systémom Windows ako Obmedzené. Praktické ponaučenie je jednoduché: neodvozujte svoju politiku z verzie systému Windows ani z tutoriálu. Spustite príkazy politiky na počítači, kde sa vyskytuje chyba.

Táto príručka porovnáva hlavné opravy podľa rozsahu, trvalosti, vplyvu na administrátora a modelu dôvery. Cieľom je spustiť legitímny skript bez toho, aby sa oslabila bezpečnosť systému viac, než je nevyhnutné.

Čo chyba Obmedzené skutočne znamená

Pri politike Obmedzené (Restricted) systém PowerShell povoľuje jednotlivé príkazy, ale neumožňuje spúšťať skriptovacie súbory. To zahŕňa skripty PowerShell a súvisiace konfiguračné alebo skriptovacie súbory modulov. Microsoft opisuje politiku vykonávania ako bezpečnostnú funkciu, ktorá riadi podmienky, za ktorých sa načítavajú skripty a konfiguračné súbory. Nie je to bezpečnostná hranica; Microsoft výslovne uvádza, že používateľ môže stále zadávať príkazy interaktívne. Prečítajte si aktuálnu dokumentáciu about_Execution_Policies pre PowerShell 7.6 a dokumentáciu politiky vykonávania pre Windows PowerShell 5.1.

Konzola Windows PowerShell zobrazujúca súbor script.ps1 blokovaný, pretože spúšťanie skriptov je v systéme zakázané

Bežná chyba hovorí, že súbor .ps1 nemožno načítať, pretože spúšťanie skriptov je zakázané; pred zmenou politiky si zaznamenajte presnú správu.

Tento rozdiel je dôležitý. Politika vykonávania môže pomôcť zabrániť náhodnému spusteniu skriptu, ale nastavenie RemoteSigned alebo Bypass nespraví skript dôveryhodným. Najprv skontrolujte skript a jeho zdroj.

Krok 1: Identifikujte účinnú politiku a všetky rozsahy

Spustite tieto dva príkazy:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

Prvý vráti účinnú politiku pre aktuálnu reláciu. Druhý vypíše politiky aplikované na úrovni MachinePolicy, UserPolicy, Process, CurrentUser a LocalMachine. Microsoft odporúča Get-ExecutionPolicy -List špecificky na zobrazenie politík, ktoré môžu ovplyvniť reláciu. Pozri Get-ExecutionPolicy.

Windows PowerShell zobrazujúci Get-ExecutionPolicy -List s rozsahmi MachinePolicy, UserPolicy, Process, CurrentUser a LocalMachine

Skontrolujte všetky rozsahy namiesto predpokladu, že hodnota LocalMachine je tá, ktorá ovláda reláciu.

Ak je definovaná hodnota MachinePolicy alebo UserPolicy, zastavte sa pred pokusom vynútiť lokálne obídenie. Tieto hodnoty pochádzajú zo Skupinovej politiky a môžu prepísať nastavenia politiky vykonávania vykonané pomocou PowerShellu. Na spravovanom pracovnom počítači je správnym ďalším krokom zvyčajne dodržiavať proces organizácie alebo kontaktovať IT oddelenie.

Vyberte opravu podľa potreby, nie podľa najkratšieho príkazu

MožnosťTrvalosťAdministrátorské právaHlavný kompromisNajvhodnejšie použitie
Unblock-File pri použití RemoteSignedŠpecifické pre súborZvyčajne bez zvýšenia oprávnení pre váš vlastný súborVy explicitne dôverujete jednému stiahnutému súboru; iné stiahnuté nepodpísané súbory zostávajú podliehajúce pravidlám RemoteSignedJeden skontrolovaný skript stiahnutý z internetu
Process RemoteSignedIba aktuálny proces PowerShellŽiadna zmena LocalMachineNízka trvalosť, ale stiahnuté nepodpísané súbory môžu stále vyžadovať odblokovanieDočasná vývojová alebo ladiaca relácia
CurrentUser RemoteSignedTrvá pre váš používateľský účetNevyžaduje zmenu pre všetkých používateľovPohodlné pre pravidelné lokálne skriptovanie; širšie ako zmena pre jednu reláciuOsobný vývojový pracovný počítač
LocalMachine RemoteSignedTrvá pre všetkých používateľovVyžaduje zvýšenie oprávneníŠirší vplyv na celý počítačZdieľaný počítač, kde administrátor zámerne chce rovnakú politiku pre všetkých používateľov
AllSignedZávisí od rozsahuZávisí od rozsahuVyžaduje podpisy aj pre lokálne vytvorené skripty; pridáva réžiu certifikátov a procesu podpisovaniaOrganizácie s procesom podpisovania kódu
BypassZávisí od rozsahu; bežne používané na rozsahu ProcessZávisí od rozsahuŽiadne blokovanie skriptov, varovania ani výzvy zo strany politiky vykonávaniaRiadená automatizácia s vlastným modelom dôvery a bezpečnosti, nie bežné trvalé nastavenie

Krok 2: Používajte administrátorské práva iba pre zmenu na úrovni celého počítača

Nemusíte otvárať zvýšený PowerShell len preto, aby ste zmenili rozsah CurrentUser alebo Process. Microsoft uvádza, že zvýšenie oprávnení je potrebné pri zmene politiky pre lokálny počítač, čo znamená LocalMachine. Toto je užitočný kompromis: ak iba váš používateľský účet potrebuje lokálne skriptovanie, zmena politiky pre každého používateľa pridáva rozsah bez pridania výhody.

Výsledky vyhľadávania systému Windows pre Windows PowerShell so zvýraznenou možnosťou Spustiť ako správca

Spustiť ako správca je vhodné pre zámerne vykonanú zmenu LocalMachine, ale je zbytočné pre rozsah Process alebo CurrentUser.

Odporúčanie podľa potreby: použite CurrentUser pre vývojársky účet, ktorý pravidelne spúšťa lokálne vytvorené skripty. Vyhradzujte LocalMachine pre administrátora, ktorý zámerne chce, aby rovnaké nastavenie ovplyvnilo všetkých používateľov.

Krok 3: Pre pravidelné lokálne skriptovanie zvážte CurrentUser RemoteSigned

Pre mnoho osobných vývojových počítačov je praktickou trvalou voľbou:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSigned umožňuje spúšťať lokálne skripty bez požiadavky na podpis, zatiaľ čo skripty označené ako stiahnuté z internetu vyžadujú dôveryhodný digitálny podpis, pokiaľ súbor explicitne neodblokujete. To zachováva užitočné rozlíšenie medzi kódom, ktorý ste vytvorili lokálne, a kódom získaným z iného zdroja.

Administrátorský Windows PowerShell zobrazujúci príkaz Set-ExecutionPolicy RemoteSigned a výzvu na potvrdenie politiky vykonávania

Táto ilustrácia ukazuje príkaz RemoteSigned pre celý počítač, pretože rozsah je vynechaný; LocalMachine je predvolený rozsah. Uprednostňujte explicitný rozsah, aby bol vplyv zámerný.

Bežnou chybou je spustenie Set-ExecutionPolicy RemoteSigned bez -Scope. Microsoft dokumentuje LocalMachine ako predvolený rozsah pri nastavovaní politiky vykonávania. Preto je lepšie byť explicitný:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Zmena je účinná okamžite; PowerShell nemusí byť reštartovaný pre zmeny CurrentUser alebo LocalMachine.

Krok 4: Pre dočasnú reláciu uprednostnite politiku s rozsahom Process

Ak ladicie problémy alebo spúšťate dôveryhodný lokálny skript raz, vyhnite sa trvalej zmene používateľa alebo počítača. Užšou možnosťou je:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

Rozsah Process sa vzťahuje iba na aktuálnu reláciu PowerShell. Microsoft uvádza, že je uložený v premennej prostredia $Env:PSExecutionPolicyPreference a je odstránený pri zatvorení procesu.

Ak väčšia aplikácia, inštalátor alebo riadené prostredie automatizácie už má svoj vlastný bezpečnostný model, PowerShell tiež poskytuje Bypass:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Windows PowerShell zobrazujúci Set-ExecutionPolicy na rozsahu Process s Bypass a Get-ExecutionPolicy -List zobrazujúci Process Bypass

Bypass s rozsahom Process zmizne, keď sa proces PowerShell zatvorí, ale tiež odstráni varovania a blokovanie politiky vykonávania pre túto reláciu.

Kompromis: Rozsah Process minimalizuje trvalosť, ale Bypass je širší ako RemoteSigned v rámci tejto relácie. Microsoft opisuje Bypass ako nič neblokujúci a nezobrazujúci žiadne varovania ani výzvy a uvádza, že je určený pre scenáre, kde inú aplikáciu poskytuje bezpečnostný model. Pre bežnú interaktívnu ladiacu reláciu použite najprv Process RemoteSigned, pokiaľ nemáte konkrétny dôvod pre Bypass.

Pre samostatný jednorazový proces Windows PowerShell môžete tiež spustiť:

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

Pre PowerShell 7 je spustiteľný súbor pwsh.exe. Nastavenie politiky vykonávania z príkazového riadku stále neprepíše politiku vykonávania vynútenú Skupinovou politikou.

Krok 5: Ak RemoteSigned blokuje stiahnutý skript, odblokujte iba tento súbor

RemoteSigned zaobchádza s súbormi označenými ako pochádzajúce z internetu odlišne. Microsoft dokumentuje cmdlet Unblock-File ako odstraňujúci túto značku internetovej zóny, čo umožňuje spustiť skontrolovaný nepodpísaný skript pod pravidlami RemoteSigned.

Najprv skontrolujte skript. Ak dôverujete zdroju a skontrolovali ste obsah, spustite:

Unblock-File -Path .\script.ps1

Môžete tiež použiť zaškrtávacie políčko Odblokovať (Unblock) v dialógovom okne Vlastnosti súboru. Microsoft uvádza, že Unblock-File vykonáva rovnakú základnú operáciu. Pozri Unblock-File.

Dialógové okno Vlastnosti súboru systému Windows pre script.ps1 zobrazujúce sekciu Bezpečnosť a zaškrtávacie políčko Odblokovať

Odblokovanie jedného skontrolovaného stiahnutého skriptu je užšie ako oslabenie politiky pre každý skript v počítači.

Môžete skontrolovať, či má súbor alternatívny dátový prúd Zone.Identifier pomocou:

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

Microsoft uvádza, že metódy sťahovania neoznačujú všetky súbory rovnakým spôsobom, takže neprítomnosť tohto prúdu nie je dôkazom, že je skript bezpečný.

Krok 6: Použite AllSigned, keď má organizácia proces podpisovania

AllSigned vyžaduje, aby všetky skripty a konfiguračné súbory boli podpísané dôveryhodným vydavateľom, vrátane skriptov vytvorených lokálne. To poskytuje organizácii konzistentný proces dôvery vydavateľa, ale tiež vytvára operačnú réžiu: skripty potrebujú podpisy Authenticode a používatelia musia dôverovať príslušným vydavateľom.

Dokumentácia spoločnosti Microsoft about_Signing vysvetľuje, ako PowerShell kontroluje podpisy skriptov a ako fungujú výzvy na dôveryhodných vydavateľov.

Odporúčanie podľa potreby: AllSigned dáva zmysel, keď vaša organizácia už má certifikáty na podpisovanie kódu, kontrolu publikovania a proces na aktualizáciu podpísaných skriptov. Pre samostatného vývojára píšuceho lokálne utilitné skripty zvyčajne RemoteSigned zahŕňa menej trenia, pričom stále zachováva kontrolu pôvodu z internetu.

Krok 7: Nebojujte so Skupinovou politikou na spravovanom PC

PowerShell vystavuje dva rozsahy politiky, ktoré pochádzajú zo Skupinovej politiky: MachinePolicy a UserPolicy. Dokumentácia Skupinovej politiky Microsoftu uvádza, že nastavenie Zapnúť spúšťanie skriptov môže vynútiť správanie Obmedzené (Restricted), RemoteSigned alebo AllSigned pre spravovaných používateľov a počítače. Nastavenie sa nachádza pod:

Administrative Templates\Windows Components\Windows PowerShell

Pozri about_Group_Policy_Settings.

Ak Get-ExecutionPolicy -List zobrazuje definovanú MachinePolicy alebo UserPolicy, lokálny príkaz Set-ExecutionPolicy vám nemusí poskytnúť očakávané účinné správanie. Praktickým riešením je požiadať administrátora o príslušnú politiku, použiť podpísaný skript, ak je to vyžadované, alebo použiť schválenú metódu nasadenia.

Krok 8: Obnovte nastavenie, ktoré ste skutočne zmenili, a potom overte

Pred zmenou trvalého rozsahu si zaznamenajte jeho existujúcu hodnotu:

Get-ExecutionPolicy -Scope CurrentUser

Get-ExecutionPolicy -Scope LocalMachine

Ak budete neskôr potrebovať odstrániť hodnotu politiky, ktorú ste nastavili, Microsoft dokumentuje nastavenie tohto rozsahu na Undefined:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined

Nespúšťajte naslepo Set-ExecutionPolicy Restricted len preto, že snímka obrazovky ju zobrazuje. Bez rozsahu príkaz cieli na LocalMachine predvolene a „Obmedzené“ nemuselo byť predchádzajúcou hodnotou tohto rozsahu.

Windows PowerShell zobrazujúci výzvu na potvrdenie zmeny Set-ExecutionPolicy Restricted

Snímka obrazovky ilustruje zmenu na Obmedzené, ale skutočné vrátenie späť by malo obnoviť rozsah a hodnotu, ktoré ste si zaznamenali, namiesto hádania predchádzajúcej konfigurácie.

Nakoniec overte účinnú politiku aj skript:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

.\script.ps1

Windows PowerShell úspešne spúšťajúci script.ps1 a vracejúci hlášku Skript sa úspešne spustil

Úspešné spustenie skriptu potvrdzuje, že bezprostredný príznak je vyriešený; znova skontrolujte zoznam politík, aby ste sa uistili, že ste nezanechali širší rozsah zmenený neúmyselne.

Ktorú opravu by ste si mali vybrať?

Vaša situáciaOdporúčaný východiskový bodPrečo
Stiahli ste jeden skript zo zdroja, ktorému dôverujetePonechajte RemoteSigned a po kontrole použite Unblock-FileZmení dôveru pre jeden súbor namiesto všetkých skriptov
Potrebujete skripty iba v aktuálnej ladiacej reláciiProcess RemoteSignedZatvorí sa spolu s reláciou a zachová obmedzenia pôvodu z internetu
Pravidelne píšete a spúšťate vlastné skriptyCurrentUser RemoteSignedTrvalé pohodlie pre jedného používateľa bez ovplyvnenia všetkých na PC
Spravujete zdieľaný pracovný počítačVyhodnoťte LocalMachine RemoteSigned alebo organizačnú politikuKonzistentné správanie pre všetkých používateľov, ale širší vplyv
Vaša firma vyžaduje skripty kontrolované vydavateľomAllSigned prostredníctvom procesu podpisovania a politiky organizácieKonzistentná požiadavka na podpis za cenu réžie podpisovania
Inštalátor alebo riadený systém automatizácie má svoj vlastný bezpečnostný modelZvážte Bypass s rozsahom processNavrhnuté pre riadené hostiteľské scenáre; vyhnite sa tomu, aby sa stalo bežným trvalým predvoleným nastavením
Je definovaná MachinePolicy alebo UserPolicyDodržujte IT alebo Skupinovú politikuZmeny lokálneho rozsahu nie sú správnou autoritou

Bežné chyby, ktoré vytvoria väčší problém ako pôvodná chyba

  • Nastavenie Unrestricted alebo Bypass trvalo len preto, aby ste spustili jeden skript. Toto rozširuje to, čo môže byť vykonané, keď užšia zmena Process, CurrentUser alebo špecifická pre súbor môže problém vyriešiť.
  • Spúšťanie každého príkazu ako Správca. Zmeny CurrentUser a Process nevyžadujú zmenu politiky LocalMachine.
  • Ignorovanie Skupinovej politiky. Ak je zariadenie spravované, politika môže byť zámerná a lokálna zmena iného rozsahu nenahrádza organizačnú kontrolu.
  • Odblokovanie skriptu bez jeho prečítania. Unblock-File odstráni blokovanie pôvodu z internetu; neoveruje kód.
  • Predpoklad, že podpísaný skript je automaticky neškodný. Microsoft uvádza, že podpísaný kód môže byť stále škodlivý; podpisy establishing vydavateľa a informácie o integrite, nie záruku bezpečného správania.
  • Zabudnutie, ktorý rozsah ste zmenili. Príkaz bez -Scope môže ovplyvniť LocalMachine, zatiaľ čo zmena Process zmizne pri ukončení.

Záver

Pre väčšinu osobných skriptovacích úloh vo Windows je CurrentUser RemoteSigned rozumnou trvalou voľbou, keď pravidelne spúšťate lokálne vytvorené skripty, zatiaľ čo Unblock-File je užšou voľbou pre jeden skontrolovaný skript stiahnutý z internetu. Pre dočasnú ladiacu reláciu Process RemoteSigned minimalizuje trvalosť. Bypass má legitímnu úlohu v riadenej automatizácii, ale jeho kompromisom je, že blokovanie a varovania politiky vykonávania sú pre tento proces odstránené. Na spravovaných počítačoch by sa Skupinová politika mala považovať za autoritu, a nie za prekážku, ktorú treba obísť.

Najlepšou opravou preto nie je jedna politika pre všetkých. Je to najmenší rozsah a najmenej povolené správanie, ktoré stále podporuje dôveryhodný skript, ktorý potrebujete spustiť.

Zanechať komentár

Ako opraviť chybu „CSS štýly Tailwind sa neaktualizujú“ v aplikácii Vite React

Ako opraviť chybu „CSS štýly Tailwind sa neaktualizujú“ v aplikácii Vite React

Opravte neaktualizované štýly CSS v Tailwind vo Vite React kontrolou nastavenia Tailwind v4, importu CSS, detekcie zdrojov, dynamických tried, HMR a zastaraných vyrovnávacích pamätí.

Ako opraviť ModuleNotFoundError: V Pythone 3 neexistuje modul s názvom „pip“

Ako opraviť ModuleNotFoundError: V Pythone 3 neexistuje modul s názvom „pip“

Oprava chyby ModuleNotFoundError v jazyku Python 3 pre príkaz pip v systémoch Windows, macOS a Linux pomocou nástroja ensurepip, balíkov operačného systému, virtuálnych prostredí a kontrol interpretov.

Ako opraviť chybu „Oprávnenie zamietnuté (verejný kľúč)“ v GitHub SSH

Ako opraviť chybu „Oprávnenie zamietnuté (verejný kľúč)“ v GitHub SSH

Opravte chybu „Oprávnenie GitHub SSH zamietnuté (verejný kľúč)“ kontrolou hostiteľa, aktívneho kľúča SSH, účtu GitHub, autorizácie SSO, vzdialenej adresy URL a prístupu na port 22.

Ako opraviť chybu „Git Push Rejected: Non-FastForward“ bez straty zmien

Ako opraviť chybu „Git Push Rejected: Non-FastForward“ bez straty zmien

Bezpečne opravte nerýchle pretáčanie zmien v Gite. Chráňte lokálnu prácu, načítajte vzdialené commity, vyberte zlúčenie alebo rebase, vyriešte konflikty a odošlite zmeny bez straty.

Ako opraviť chybu „Nginx 502 Bad Gateway“ pri proxyovaní do Node.js

Ako opraviť chybu „Nginx 502 Bad Gateway“ pri proxyovaní do Node.js

Opravte chyby Nginx 502 Bad Gateway s Node.js upstream kontrolou portu aplikácie, protokolov NGINX, adresy proxy_pass, siete kontajnerov, časových limitov a opätovného načítania.

Ako opraviť chybu „Typ 'null' nie je priraditeľný k typu“ v TypeScripte

Ako opraviť chybu „Typ 'null' nie je priraditeľný k typu“ v TypeScripte

Oprava chyby „Typ 'null' nie je možné priradiť k typu“ v jazyku TypeScript pomocou typov zjednotenia, zúženia, predvolených hodnôt a bezpečných tvrdení v rámci strictNullChecks.

Ako opraviť chybu „Prisma Client has not been generated yet“

Ako opraviť chybu „Prisma Client has not been generated yet“

Opravte chybu nevygenerovaného Prisma Client kontrolou generátora, schémy, výstupnej cesty, importov, verzií, nastavenia monorepa a krokov zostavenia pri nasadení.

Ako opraviť chybu „ERR_MODULE_NOT_FOUND“ v importoch Node.js ESM

Ako opraviť chybu „ERR_MODULE_NOT_FOUND“ v importoch Node.js ESM

Opravte chybu Node.js ERR_MODULE_NOT_FOUND v ESM kontrolou ciest importu, prípon súborov, inštalácie balíkov, exportov, režimu ESM a čistých inštalácií.

Ako vyriešiť problém so SSL certifikátom: Unable to get local issuer certificate v Git

Ako vyriešiť problém so SSL certifikátom: Unable to get local issuer certificate v Git

Vyriešte chybu Git 'unable to get local issuer certificate' identifikáciou dôveryhodného backendu, inštaláciou správneho reťazca CA a ponechaním zapnutej SSL verifikácie.

Ako opraviť chybu časového limitu siete MongoDB v pripojení Mongoose

Ako opraviť chybu časového limitu siete MongoDB v pripojení Mongoose

Opravte chyby časového limitu siete MongoDB v Mongoose identifikáciou typu časového limitu, testovaním dosiahnuteľnosti Atlasu alebo TCP, opravou URI a ladením časových limitov len v odôvodnených prípadoch.