Så här åtgärdar du felet "Execution Policy Restricted" i Windows PowerShell

Det säkraste sättet att åtgärda ett "Execution Policy Restricted"-fel i Windows PowerShell är inte att kopiera det bredaste kommandot du kan hitta. Identifiera först vilken körningspolicy som faktiskt är aktiv, välj sedan den smalaste ändringen som passar det du försöker köra.

Microsofts aktuella dokumentation betonar också att versionskontext är viktig. Dokumentationen för Windows PowerShell 5.1 listar Restricted som standardkörningspolicy för Windows-klientdatorer. Den aktuella dokumentationen för PowerShell 7.6 definierar Default som RemoteSigned på Windows. Om alla omfång är Undefined dokumenterar Microsoft dock fortfarande den effektiva reservlösningen på Windows-klienter som Restricted. Den praktiska lärdomen är enkel: dra inte slutsatser om din policy utifrån din Windows-version eller från en handledning. Kör policykommandona på den dator som har felet.

Den här guiden jämför de viktigaste lösningarna utifrån omfång, beständighet, administrativ påverkan och förtroendemodell. Målet är att få ett legitimt skript att köras utan att försvaga mer av systemet än nödvändigt.

Vad felet "Restricted" egentligen betyder

Under policyn Restricted tillåter PowerShell individuella kommandon men tillåter inte att skriptfiler körs. Det inkluderar PowerShell-skript och relaterade konfigurations- eller moduls-skriptfiler. Microsoft beskriver körningspolicy som en säkerhetsfunktion som styr under vilka villkor skript och konfigurationsfiler laddas. Det är inte en säkerhetsgräns; Microsoft noterar uttryckligen att en användare fortfarande kan skriva in kommandon interaktivt. Läs den aktuella dokumentationen om about_Execution_Policies för PowerShell 7.6 och dokumentationen om körningspolicy för Windows PowerShell 5.1.

Windows PowerShell-konsol som visar att en script.ps1-fil blockerats eftersom körning av skript är inaktiverat på systemet

Det vanliga felet säger att .ps1-filen inte kan laddas eftersom körning av skript är inaktiverat; fånga exakt meddelande innan du ändrar policyn.

Den distinktionen är viktig. Körningspolicy kan hjälpa till att förhindra oavsiktlig skriptkörning, men att ställa in RemoteSigned eller Bypass gör inte ett skript pålitligt. Granska skriptet och dess källa först.

Steg 1: Identifiera den effektiva policyn och alla omfång

Kör dessa två kommandon:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

Det första returnerar den effektiva policyn för den aktuella sessionen. Det andra listar de policyer som tillämpas på MachinePolicy, UserPolicy, Process, CurrentUser och LocalMachine. Microsoft rekommenderar specifikt Get-ExecutionPolicy -List för att se de policyer som kan påverka sessionen. Se Get-ExecutionPolicy.

Windows PowerShell som visar Get-ExecutionPolicy -List med omfången MachinePolicy, UserPolicy, Process, CurrentUser och LocalMachine

Kontrollera alla omfång istället för att anta att värdet för LocalMachine är det som styr sessionen.

Om MachinePolicy eller UserPolicy är definierat, stoppa innan du försöker tvinga fram en lokal lösning. Dessa värden kommer från grupprincip och kan åsidosätta inställningar för körningspolicy som gjorts med PowerShell. På en hanterad arbetsdator är nästa steg vanligtvis att följa organisationens process eller kontakta IT.

Välj lösning efter behov, inte efter det kortaste kommandot

AlternativBeständighetAdministratörsrättigheterHuvudsaklig avvägningBästa passform
Unblock-File vid användning av RemoteSignedFilspecifikNormalt ingen behörighetshöjning för din egen filDu litar uttryckligen på en nedladdad fil; andra nedladdade osignerade filer omfattas fortfarande av RemoteSignedEtt granskat skript nedladdat från internet
Process RemoteSignedEndast aktuell PowerShell-processIngen ändring av LocalMachineLåg beständighet, men nedladdade osignerade filer kan fortfarande behöva avblockerasTillfällig utvecklings- eller felsökningssession
CurrentUser RemoteSignedBestår för ditt användarkontoKräver inte ändring för alla användareBekvämt för regelbunden lokal skriptning; bredare än en ändring för en sessionPersonlig utvecklingsarbetsstation
LocalMachine RemoteSignedBestår för alla användareKräver behörighetshöjningBredare påverkan på hela datornDelad dator där en administratör avsiktligt vill ha samma policy för alla användare
AllSignedBeroende på omfångBeroende på omfångKräver signaturer även för lokalt skapade skript; lägger till certifikat- och signeringsarbetsflödesöverhuvudOrganisationer med en kodsigneringsprocess
BypassBeroende på omfång; används vanligtvis på Process-omfångetBeroende på omfångIngen skriptblockering, varningar eller uppmaningar från körningspolicynKontrollerad automatisering med sin egen förtroende- och säkerhetsmodell, inte en tillfällig permanent inställning

Steg 2: Använd administratörsrättigheter endast för en maskinomfattande ändring

Du behöver inte öppna en förhöjd PowerShell enbart för att ändra omfånget CurrentUser eller Process. Microsoft säger att behörighetshöjning krävs när du ändrar policyn för den lokala datorn, det vill säga LocalMachine. Detta är en användbar avvägning: om bara ditt användarkonto behöver lokal skriptning, lägger en ändring av alla användares policy till omfång utan att tillföra nytta.

Windows-sökresultat för Windows PowerShell med alternativet Kör som administratör markerat

Kör som administratör är lämpligt för en avsiktlig LocalMachine-ändring, men det är onödigt för Process- eller CurrentUser-omfånget.

Rekommendation efter behov: använd CurrentUser för ett utvecklar-konto som regelbundet kör lokalt författade skript. Reservera LocalMachine för en administratör som avsiktligt vill att samma inställning ska påverka alla användare.

Steg 3: Överväg CurrentUser RemoteSigned för regelbunden lokal skriptning

För många personliga utvecklingsdatorer är ett praktiskt beständigt val:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSigned tillåter lokala skript att köras utan att kräva en signatur, medan skript som markerats som nedladdade från internet kräver en betrodd digital signatur om du inte uttryckligen avblockerar filen. Det bevarar en användbar distinktion mellan kod du skapat lokalt och kod som erhållits från en annan källa.

Administratörs-Windows PowerShell som visar Set-ExecutionPolicy RemoteSigned och bekräftelseuppmaningen för körningspolicy

Denna illustration visar ett maskinomfattande RemoteSigned-kommando eftersom omfånget utelämnas; LocalMachine är standardomfånget. Föredra ett uttryckligt omfång så att påverkan är avsiktlig.

Ett vanligt misstag är att köra Set-ExecutionPolicy RemoteSigned utan -Scope. Microsoft dokumenterar LocalMachine som standardomfånget när du ställer in körningspolicy. Därför är det bättre att vara uttrycklig:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Ändringen är effektiv omedelbart; PowerShell behöver inte startas om för ändringar av CurrentUser eller LocalMachine.

Steg 4: För en tillfällig session, föredra en policy med Process-omfång

Om du felsöker eller kör ett betrott lokalt skript en gång, undvik en beständig användar- eller maskinändring. Ett smalare alternativ är:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

Omfattningen Process gäller endast för den aktuella PowerShell-sessionen. Microsoft säger att den lagras i miljövariabeln $Env:PSExecutionPolicyPreference och raderas när processen avslutas.

Om en större applikation, installerare eller kontrollerad automatiseringsmiljö redan har sin egen säkerhetsmodell, tillhandahåller PowerShell också Bypass:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Windows PowerShell som visar Set-ExecutionPolicy på Process-omfånget med Bypass och Get-ExecutionPolicy -List som visar Process Bypass

Process-omfattande Bypass försvinner när PowerShell-processen avslutas, men det tar också bort körningspolicyvarningar och blockering för den sessionen.

Avvägning: Process-omfånget minimerar beständighet, men Bypass är bredare än RemoteSigned inuti den sessionen. Microsoft beskriver Bypass som att inte blockera något och inte visa varningar eller uppmaningar, och säger att det är avsett för scenarier där en annan applikation tillhandahåller säkerhetsmodellen. För en normal interaktiv felsökningssession, använd Process RemoteSigned först om du inte har en specifik anledning till Bypass.

För en separat engångsprocess för Windows PowerShell kan du också starta:

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

För PowerShell 7 är körbara filen pwsh.exe. En inställning av körningspolicy via kommandoraden åsidosätter fortfarande inte en körningspolicy som tillämpas av grupprincip.

Steg 5: Om RemoteSigned blockerar ett nedladdat skript, avblockera endast den filen

RemoteSigned behandlar filer som markerats som ursprungliga från internet annorlunda. Microsoft dokumenterar cmdleten Unblock-File som att den tar bort den internetzonmarkeringen, vilket tillåter ett granskat osignerat skript att köras under RemoteSigned.

Inspektera skriptet först. Om du litar på källan och har granskat innehållet, kör:

Unblock-File -Path .\script.ps1

Du kan också använda kryssrutan Avblockera i filens Egenskaper-dialogruta. Microsoft anger att Unblock-File utför samma grundläggande operation. Se Unblock-File.

Windows-filens Egenskaper-dialogruta för script.ps1 som visar säkerhetsavsnittet och kryssrutan Avblockera

Att avblockera ett granskat nedladdat skript är smalare än att försvaga policyn för alla skript på datorn.

Du kan kontrollera om en fil har en alternativ dataström för Zone.Identifier med:

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

Microsoft noterar att nedladdningsmetoder inte alla markerar filer på samma sätt, så frånvaron av den strömmen är inte bevis på att ett skript är säkert.

Steg 6: Använd AllSigned när organisationen har ett signeringsarbetsflöde

AllSigned kräver att alla skript och konfigurationsfiler signeras av en betrodd utgivare, inklusive skript som skapats lokalt. Det ger en organisation ett konsekvent utgivarförtroendearbetsflöde, men det skapar också operativt överhuvud: skript behöver Authenticode-signaturer och användare behöver lita på de relevanta utgivarna.

Microsofts dokumentation om about_Signing förklarar hur PowerShell kontrollerar skriptsignaturer och hur uppmaningar om betrodda utgivare fungerar.

Rekommendation efter behov: AllSigned är meningsfullt när din organisation redan har kodsigneringscertifikat, publiceringskontroller och en process för att uppdatera signerade skript. För en ensam utvecklare som skriver lokala verktygsskript, innebär RemoteSigned vanligtvis mindre friktion medan den fortfarande bevarar kontrollen av internetursprung.

Steg 7: Bekämpa inte grupprincip på en hanterad PC

PowerShell exponerar två policyomfång som kommer från grupprincip: MachinePolicy och UserPolicy. Microsofts dokumentation om grupprincip säger att inställningen Aktivera skriptkörning kan tillämpa beteendet Restricted, RemoteSigned eller AllSigned för hanterade användare och datorer. Inställningen finns under:

Administrative Templates\Windows Components\Windows PowerShell

Se about_Group_Policy_Settings.

Om Get-ExecutionPolicy -List visar en definierad MachinePolicy eller UserPolicy, kan ett lokalt Set-ExecutionPolicy-kommando ge dig det effektiva beteendet du förväntar dig. Den praktiska lösningen är att begära lämplig policy från administratören, använda ett signerat skript om det krävs, eller använda en godkänd distributionsmetod.

Steg 8: Återställ den inställning du faktiskt ändrade, verifiera sedan

Innan du ändrar ett beständigt omfång, registrera dess befintliga värde:

Get-ExecutionPolicy -Scope CurrentUser

Get-ExecutionPolicy -Scope LocalMachine

Om du senare behöver ta bort ett policyvärde du ställt in, dokumenterar Microsoft att ställa in det omfånget till Undefined:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined

Kör inte blindt Set-ExecutionPolicy Restricted bara för att en skärmdump visar det. Utan omfång riktar kommandot sig mot LocalMachine som standard, och "Restricted" kanske inte var det omfångets tidigare värde.

Windows PowerShell som visar en bekräftelseuppmaning för Set-ExecutionPolicy Restricted

Skärmdumpen illustrerar en Restricted-ändring, men en riktig återställning bör återställa det omfång och värde du registrerade istället för att gissa den tidigare konfigurationen.

Verifiera slutligen både den effektiva policyn och skriptet:

Get-ExecutionPolicy

Get-ExecutionPolicy -List

.\script.ps1

Windows PowerShell som kör script.ps1 framgångsrikt och returnerar Script ran successfully

En framgångsrik skriptkörning bekräftar att det omedelbara symtomet är åtgärdat; kontrollera policylistan igen för att bekräfta att du inte lämnade ett bredare omfång oavsiktligt ändrat.

Vilken lösning bör du välja?

Din situationRekommenderad utgångspunktVarför
Du laddade ner ett skript från en källa du litar påBehåll RemoteSigned och använd Unblock-File efter granskningÄndrar förtroendet för en fil istället för alla skript
Du behöver skript endast i den aktuella felsökningssessionenProcess RemoteSignedAvslutas med sessionen och behåller begränsningar för internetursprung
Du skriver och kör regelbundet dina egna skriptCurrentUser RemoteSignedBeständig bekvämlighet för en användare utan att påverka alla på PC:n
Du administrerar en delad arbetsstationUtvärdera LocalMachine RemoteSigned eller organisationspolicyKonsekvent beteende för alla användare, men bredare påverkan
Ditt företag kräver utgivarstyrda skriptAllSigned via organisationens signerings- och policyprocessKonsekvent signeringskrav till priset av signeringsöverhuvud
En installerare eller kontrollerat automatiseringssystem har sin egen säkerhetsmodellÖverväg processomfattande BypassUtformat för kontrollerade värdscenarier; undvik att göra det till en tillfällig permanent standard
MachinePolicy eller UserPolicy är definieratFölj IT eller grupprincipLokala omfångsändringar är inte rätt auktoritet

Vanliga misstag som skapar ett större problem än det ursprungliga felet

  • Att ställa in Unrestricted eller Bypass permanent bara för att få ett skript att köras. Detta vidgar vad som kan köras när en smalare Process-, CurrentUser- eller filspecifik ändring kan lösa problemet.
  • Att köra varje kommando som Administratör. Ändringar av CurrentUser och Process kräver inte en policyändring för LocalMachine.
  • Att ignorera grupprincip. Om enheten är hanterad kan policyn vara avsiktlig och en lokal ändring av ett annat omfång ersätter inte organisationskontroll.
  • Att avblockera ett skript utan att läsa det. Unblock-File tar bort blockeringen för internetursprung; det validerar inte koden.
  • Att anta att ett signerat skript automatiskt är ofarligt. Microsoft noterar att signerad kod fortfarande kan vara skadlig; signaturer etablerar utgivare- och integritetsinformation, inte en garanti för säkert beteende.
  • Att glömma vilket omfång du ändrade. Ett kommando utan -Scope kan påverka LocalMachine, medan en Process-ändring försvinner vid avslutning.

Slutsats

För de flesta personliga Windows-skript är CurrentUser RemoteSigned ett rimligt beständigt val när du rutinmässigt kör lokalt skapade skript, medan Unblock-File är det smalare valet för ett granskat skript nedladdat från internet. För en tillfällig felsökningssession minimerar Process RemoteSigned beständighet. Bypass har en legitim roll i kontrollerad automatisering, men dess avvägning är att körningspolicyblockering och varningar tas bort för den processen. På hanterade datorer bör grupprincip behandlas som auktoritet snarare än ett hinder att kringgå.

Den bästa lösningen är därför inte en policy för alla. Det är det minsta omfånget och det minst tillåtande beteendet som fortfarande stöder det betrodda skript du behöver köra.

Lämna en kommentar

Hur man åtgärdar "Tailwind CSS-stilar uppdateras inte" i en Vite React-app

Hur man åtgärdar "Tailwind CSS-stilar uppdateras inte" i en Vite React-app

Åtgärda Tailwind CSS-stilar som inte uppdateras i Vite React genom att kontrollera Tailwind v4-inställningar, CSS-importer, källkodsidentifiering, dynamiska klasser, HMR och inaktuella cacher.

Så här åtgärdar du ModuleNotFoundError: Ingen modul med namnet 'pip' i Python 3

Så här åtgärdar du ModuleNotFoundError: Ingen modul med namnet 'pip' i Python 3

Åtgärda Python 3:s ModuleNotFoundError för pip på Windows, macOS och Linux med ensurepip, OS-paket, virtuella miljöer och tolkkontroller.

Hur man åtgärdar "Tillstånd nekad (publickey)" i GitHub SSH

Hur man åtgärdar "Tillstånd nekad (publickey)" i GitHub SSH

Åtgärda GitHub SSH-behörighet nekad (publickey) genom att kontrollera värden, aktiv SSH-nyckel, GitHub-konto, SSO-auktorisering, fjärr-URL och port 22-åtkomst.

Hur man åtgärdar "Git Push Rejected: Non-Spolar framåt" utan att förlora ändringar

Hur man åtgärdar "Git Push Rejected: Non-Spolar framåt" utan att förlora ändringar

Åtgärda en Git-push som inte snabbspolar framåt på ett säkert sätt. Skydda lokalt arbete, hämta fjärrcommits, välj merge eller rebase, lös konflikter och pusha utan att förlora ändringar.

Hur man åtgärdar "Nginx 502 Bad Gateway" vid proxyanvändning till Node.js

Hur man åtgärdar "Nginx 502 Bad Gateway" vid proxyanvändning till Node.js

Åtgärda Nginx 502 Bad Gateway-fel med en Node.js-uppström genom att kontrollera appporten, NGINX-loggarna, proxy_pass-adressen, containernätverk, timeouts och omladdning.

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

Fix TypeScript's “Type 'null' is not assignable to type” error with union types, narrowing, defaults, and safe assertions under strictNullChecks.

Så här åtgärdar du felet ”Prisma Client has not been generated yet”

Så här åtgärdar du felet ”Prisma Client has not been generated yet”

Åtgärda felet att Prisma Client inte har genererats genom att kontrollera din generator, ditt schema, utdatasökvägen, importerna, versionerna, monorepo-konfigurationen och byggstegen vid distribution.

Hur man åtgärdar "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Hur man åtgärdar "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Åtgärda Node.js ERR_MODULE_NOT_FOUND i ESM genom att kontrollera importsökvägar, filtillägg, paketinstallation, exporter, ESM-läge och rena installationer.

Så här åtgärdar du SSL-certifikatproblemet: Unable to Get Local Issuer Certificate i Git

Så här åtgärdar du SSL-certifikatproblemet: Unable to Get Local Issuer Certificate i Git

Åtgärda Gits fel 'unable to get local issuer certificate' genom att identifiera förtroendebakgrunden, installera rätt CA-kedja och hålla SSL-verifieringen aktiverad.

Så åtgärdar du MongoDB-nätverksavbrott vid Mongoose-anslutning

Så åtgärdar du MongoDB-nätverksavbrott vid Mongoose-anslutning

Åtgärda MongoDB-nätverksavbrott i Mongoose genom att identifiera avbrottstypen, testa Atlas- eller TCP-anslutning, korrigera URI:n och justera tidsgränser endast när det är motiverat.