Du skriver ett PowerShell-skript. Du sparar det som .ps1. Du försöker köra det. Plötsligt får du ett felmeddelande:
File cannot be loaded because running scripts is disabled on this system.
Du blir frustrerad. Varför kan jag inte köra mitt eget skript på min egen dator?
Svaret är Execution Policy. Det är en Windows-säkerhet som säger "endast tillåten PowerShell ska köra skript". Men det är ofta uppsatt på ett sätt som gör det svårt för dig som faktisk utvecklare.
Låt oss förstå det och lösa det rätt.
Execution Policy är Microsofts sätt att säga "vi vill inte att obehöriga skript körs på din dator". Det är därför Windows per default inte tillåter att skript körs.
Det är viktigt för säkerhet — om du laddar ner ett skadigt skript från internet bör det inte kunna köras automatiskt. Men det är irriterande när DU skriver ditt eget skript och vill köra det.
Kör detta kommando för att se vad du har nu.
| Policy | Vad det gör | För utvecklare? |
| Restricted | Ingen skript kan köras alls. Bara kommandon. | ❌ Kan inte |
| AllSigned | Bara skript signerade av ett tillitscertifikat. | ❌ Kan inte (såvida du inte signerar) |
| RemoteSigned | Skript från internet måste signeras. Lokala skript OK. | ✅ REKOMMENDERAD |
| Unrestricted | Alla skript kan köras (med varning). | ✅ Fungerar, men osäker |
| Bypass | Ingen begränsning alls — allt körs. | ⚠️ Mycket osäker |
RemoteSigned är the sweet spot — den tillåter dina egna lokala skript men varnar för skript från internet. Det är vad du bör använda.
Execution Policy kan ställas in på olika nivåer:
Process = bara denna PowerShell-fönster
CurrentUser = denna användare på denna dator
LocalMachine = alla användare på denna dator (kräver admin)
Om du bara vill köra skript i detta fönster, använd Process-scope. Det är det snabbaste fixet.
Snabb fix (bara denna session):
Kör detta i PowerShell och du kan köra skript i detta fönster. Nästa gång du öppnar PowerShell måste du göra det igen.
Permanent fix (denna användare):
Denna policy gäller varje gång du öppnar PowerShell från detta användarkonto. Du behöver inte admin-rättigheter.
Hela datorn (kräver admin):
Denna policy gäller för alla användare på datorn. Du måste köra PowerShell som Administrator.
Misstag 1: Ställa in Bypass för att "lösa problemet"
Många gör detta:
Det fungerar, men det är osäkert. Du säger till Windows "kör allt utan frågor". Om du laddar ner ett skadligt skript körs det utan varning.
RemoteSigned är säkert OCH praktiskt. Använd detta istället.
Misstag 2: Tro att Execution Policy är antivirusskydd
Det är det inte. En hacker som har åtkomst till din dator kan helt enkelt ändra Execution Policy. Det är bara en påminnelse, inte säkerhet.
Misstag 3: Glömma -Scope och bara köra Set-ExecutionPolicy
Utan -Scope försöker PowerShell ändra LocalMachine-nivån, vilket kräver admin-rättigheter. Specifiera alltid scope!
Med RemoteSigned kan du köra lokala skript utan problem. Fjärrskript måste signeras (eller du använder Invoke-Command).
Om din miljö kräver att alla skript signeras (vanligt i stora företag) kan du skriva under dina skript:
Detta är avancerat och behövs inte för personligt bruk — men det är bra att veta i företagsmiljöer.
Om du använder Invoke-Command för att köra skript på fjärrservrar är Execution Policy på VARJE SERVER viktig. Du behöver RemoteSigned på alla servrar som ska köra skript.
// SNABB GUIDE: EXECUTION POLICY
- Restricted = ingen skript alls (standard på många system)
- RemoteSigned = lokala skript OK, internet-skript måste signeras (REKOMMENDERAD)
- Unrestricted = alla skript OK (med varning)
- AllSigned = bara signerade skript (företag)
- Bypass = ingen begränsning (UNSAFE)
- Process-scope = endast denna session
- CurrentUser-scope = denna användare (permanent)
- LocalMachine-scope = alla användare (kräver admin)
✓ Fördelar med policy
- Skyddar mot oavsiktligt köra skadigt skript
- Tvingar dig att tänka innan du kör något
- Bra för företagsmiljöer
- Kan konfigureras per användare/dator
- RemoteSigned är bra balans
- Du kan alltid se vad du har
✗ Nackdelar
- Irriterande för utvecklare
- Skyddar INTE mot hacker
- Kan ändras av vem som helst
- Många ställer in Bypass (osäkert)
- Förvirrar nybörjare
- Gäller inte Invoke-Command
// CHECKLIST: EXECUTION POLICY SETUP
- Kontrollera din nuvarande policy: Get-ExecutionPolicy -List
- Ställ in RemoteSigned för detta användarkonto
- Testa att du kan köra ett lokalt skript
- Aldrig använda Bypass (såvida du inte måste)
- Om du ändrar LocalMachine — dokumentera varför
- På servrar — ställ in samma policy överallt
- Använd Process-scope för temporär testning