Om körningsprinciper
Kort beskrivning
Beskriver PowerShell-körningsprinciperna och förklarar hur du hanterar dem.
Lång beskrivning
PowerShells körningsprincip är en säkerhetsfunktion som styr under vilka förhållanden PowerShell läser in konfigurationsfiler och kör skript. Den här funktionen hjälper till att förhindra körning av skadliga skript.
På en Windows-dator kan du ange en körningsprincip för den lokala datorn, för den aktuella användaren eller för en viss session. Du kan också använda en grupprincip inställning för att ange körningsprinciper för datorer och användare.
Körningsprinciper för den lokala datorn och den aktuella användaren lagras i registret. Du behöver inte ange körningsprinciper i PowerShell-profilen. Körningsprincipen för en viss session lagras endast i minnet och går förlorad när sessionen stängs.
Körningsprincipen är inte ett säkerhetssystem som begränsar användaråtgärder. Användare kan till exempel enkelt kringgå en princip genom att skriva skriptinnehållet på kommandoraden när de inte kan köra ett skript. I stället hjälper körningsprincipen användarna att ange grundläggande regler och förhindrar att de oavsiktligt bryter mot dem.
På datorer som inte är Windows-datorer är standardkörningsprincipen Obegränsad och kan inte ändras. Cmdleten Set-ExecutionPolicy
är tillgänglig, men PowerShell visar ett konsolmeddelande om att den inte stöds. Även om Get-ExecutionPolicy
returnerar Obegränsad på icke-Windows-plattformar matchar beteendet verkligen Bypass eftersom dessa plattformar inte implementerar Windows-säkerhet-zonerna.
PowerShell-körningsprinciper
Tillämpningen av dessa principer sker endast på Windows-plattformar. PowerShell-körningsprinciperna är följande:
AllSigned:
- Skript kan köras.
- Kräver att alla skript och konfigurationsfiler signeras av en betrodd utgivare, inklusive skript som du skriver på den lokala datorn.
- Uppmanar dig innan du kör skript från utgivare som du ännu inte har klassificerat som betrodda eller ej betrodda.
- Riskerar att köra signerade, men skadliga, skript.
Förbikoppling
- Ingenting blockeras och det finns inga varningar eller uppmaningar.
- Den här körningsprincipen är utformad för konfigurationer där ett PowerShell-skript är inbyggt i ett större program eller för konfigurationer där PowerShell är grunden för ett program som har en egen säkerhetsmodell.
Standardvärde
- Anger standardkörningsprincipen.
- Begränsad för Windows-klienter.
- RemoteSigned för Windows-servrar.
RemoteSigned
- Standardkörningsprincipen för Windows-serverdatorer.
- Skript kan köras.
- Kräver en digital signatur från en betrodd utgivare på skript och konfigurationsfiler som laddas ned från Internet, vilket inkluderar e-post- och snabbmeddelandeprogram.
- Kräver inte digitala signaturer på skript som skrivs på den lokala datorn och inte laddas ned från Internet.
- Kör skript som laddas ned från Internet och inte signeras, om skripten avblockeras, till exempel med hjälp av cmdleten
Unblock-File
. - Riskerar att köra osignerade skript från andra källor än Internet och signerade skript som kan vara skadliga.
Begränsade
- Standardkörningsprincipen för Windows-klientdatorer.
- Tillåter enskilda kommandon, men tillåter inte skript.
- Förhindrar körning av alla skriptfiler, inklusive formatering och konfigurationsfiler (
.ps1xml
), modulskriptfiler (.psm1
) och PowerShell-profiler (.ps1
).
Undefined (Odefinierad)
- Det finns ingen körningsprincip i det aktuella omfånget.
- Om körningsprincipen i alla omfång är Odefinierad är den effektiva körningsprincipen Begränsad för Windows-klienter och RemoteSigned för Windows Server.
Obegränsat
- Standardkörningsprincipen för datorer som inte är Windows-datorer och kan inte ändras.
- Osignerade skript kan köras. Det finns risk för att skadliga skript körs.
- Varnar användaren innan du kör skript och konfigurationsfiler som inte kommer från den lokala intranätzonen.
Anteckning
På system som inte skiljer UNC-sökvägar (Universal Naming Convention) från Internetsökvägar kanske skript som identifieras av en UNC-sökväg kanske inte tillåts köras med principen RemoteSigned-körning .
Omfång för körningsprincip
Du kan ange en körningsprincip som endast gäller i ett visst omfång.
Giltiga värden för Omfång är MachinePolicy, UserPolicy, Process, CurrentUser och LocalMachine. LocalMachine är standard när du anger en körningsprincip.
Omfångsvärdena visas i prioritetsordning. Principen som har företräde gäller i den aktuella sessionen, även om en mer restriktiv princip har angetts till en lägre prioritetsnivå.
Mer information finns i Set-ExecutionPolicy.
MachinePolicy
Anges av en grupprincip för alla användare av datorn.
UserPolicy
Anges av en grupprincip för den aktuella användaren av datorn.
Process
Processomfånget påverkar bara den aktuella PowerShell-sessionen. Körningsprincipen sparas i miljövariabeln $env:PSExecutionPolicyPreference
i stället för registret. När PowerShell-sessionen stängs tas variabeln och värdet bort.
CurrentUser
Körningsprincipen påverkar endast den aktuella användaren. Den lagras i HKEY_CURRENT_USER registerundernyckel.
LocalMachine
Körningsprincipen påverkar alla användare på den aktuella datorn. Den lagras i HKEY_LOCAL_MACHINE registerundernyckel.
Hantera körningsprincipen med PowerShell
Använd cmdleten Get-ExecutionPolicy
för att hämta den effektiva körningsprincipen för den aktuella PowerShell-sessionen.
Följande kommando hämtar den effektiva körningsprincipen:
Get-ExecutionPolicy
Så här hämtar du alla körningsprinciper som påverkar den aktuella sessionen och visar dem i prioritetsordning:
Get-ExecutionPolicy -List
Resultatet ser ut ungefär som följande exempelutdata:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
I det här fallet är den effektiva körningsprincipen RemoteSigned eftersom körningsprincipen för den aktuella användaren har företräde framför den körningsprincip som angetts för den lokala datorn.
Om du vill hämta körningsprincipen för ett visst omfång använder du parametern Get-ExecutionPolicy
Omfång för .
Följande kommando hämtar till exempel körningsprincipen för CurrentUser-omfånget :
Get-ExecutionPolicy -Scope CurrentUser
Ändra körningsprincipen
Om du vill ändra PowerShell-körningsprincipen på Windows-datorn använder du cmdleten Set-ExecutionPolicy
. Ändringen träder i kraft omedelbart. Du behöver inte starta om PowerShell.
Om du anger körningsprincipen för omfången LocalMachine eller CurrentUser sparas ändringen i registret och fortsätter att gälla tills du ändrar den igen.
Om du anger körningsprincipen för processomfånget sparas den inte i registret. Körningsprincipen behålls tills den aktuella processen och eventuella underordnade processer stängs.
Anteckning
I Windows Vista och senare versioner av Windows, för att köra kommandon som ändrar körningsprincipen för den lokala datorn, LocalMachine-omfånget , startar du PowerShell med alternativet Kör som administratör .
Så här ändrar du körningsprincipen:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Exempel:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Så här anger du körningsprincipen i ett visst omfång:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Exempel:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Ett kommando för att ändra en körningsprincip kan lyckas men ändå inte ändra den effektiva körningsprincipen.
Till exempel kan ett kommando som anger körningsprincipen för den lokala datorn lyckas men åsidosätts av körningsprincipen för den aktuella användaren.
Ta bort körningsprincipen
Om du vill ta bort körningsprincipen för ett visst omfång anger du körningsprincipen till Odefinierad.
Om du till exempel vill ta bort körningsprincipen för alla användare på den lokala datorn:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Så här tar du bort körningsprincipen för ett omfång:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Om ingen körningsprincip anges i något omfång är den effektiva körningsprincipen Begränsad, vilket är standard för Windows-klienter.
Ange en annan princip för en session
Du kan använda parametern ExecutionPolicy förpwsh.exe för att ange en körningsprincip för en ny PowerShell-session. Principen påverkar endast den aktuella sessionen och underordnade sessioner.
Om du vill ange körningsprincipen för en ny session startar du PowerShell på kommandoraden, till exempel cmd.exe eller från PowerShell, och använder sedan parametern ExecutionPolicy förpwsh.exe för att ange körningsprincipen.
Exempel:
pwsh.exe -ExecutionPolicy AllSigned
Körningsprincipen som du anger lagras inte i registret. I stället lagras den i $env:PSExecutionPolicyPreference
miljövariabeln. Variabeln tas bort när du stänger sessionen där principen har angetts. Du kan inte ändra principen genom att redigera variabelvärdet.
Under sessionen har den körningsprincip som har angetts för sessionen företräde framför en körningsprincip som anges i registret för den lokala datorn eller den aktuella användaren. Den har dock inte företräde framför den körningsprincip som angetts med hjälp av en grupprincip.
Använd grupprincip för att hantera körningsprincip
Du kan använda inställningen Aktivera skriptkörning grupprincip för att hantera körningsprincipen för datorer i företaget. Inställningen grupprincip åsidosätter körningsprinciperna som angetts i PowerShell i alla omfång.
Principinställningarna för Aktivera skriptkörning är följande:
Om du inaktiverar Aktivera skriptkörning körs inte skript. Detta motsvarar principen för begränsad körning.
Om du aktiverar Aktivera skriptkörning kan du välja en körningsprincip. Inställningarna för grupprincip motsvarar följande inställningar för körningsprincip:
Grupprincip Körningsprincip Tillåt alla skript Obegränsat Tillåt lokala skript och fjärrsignerade skript RemoteSigned Tillåt endast signerade skript AllSigned: Om Aktivera skriptkörning inte har konfigurerats har det ingen effekt. Körningsprincipen som anges i PowerShell är effektiv.
PowerShellExecutionPolicy.adm- och PowerShellExecutionPolicy.admx-filerna lägger till principen Aktivera skriptkörning i noderna Datorkonfiguration och Användarkonfiguration i redigeringsprogrammet för grupprincip på följande sökvägar.
För Windows XP och Windows Server 2003:
Administrativa mallar\Windows-komponenter\Windows PowerShell
För Windows Vista och senare versioner av Windows:
Administrativa mallar\klassiska administrativa mallar
Windows-komponenter\Windows PowerShell
Principer som anges i noden Datorkonfiguration har företräde framför principer som angetts i noden Användarkonfiguration.
Mer information finns i about_Group_Policy_Settings.
Prioritet för körningsprincip
När du fastställer den effektiva körningsprincipen för en session utvärderar PowerShell körningsprinciperna i följande prioritetsordning:
- grupprincip: MachinePolicy
- grupprincip: UserPolicy
- Körningsprincip: Process (eller
pwsh.exe -ExecutionPolicy
) - Körningsprincip: CurrentUser
- Körningsprincip: LocalMachine
Hantera signerade och osignerade skript
I Windows lägger program som Internet Explorer och Microsoft Edge till en alternativ dataström till filer som laddas ned. Detta markerar filen som "kommer från Internet". Om din PowerShell-körningsprincip är RemoteSigned kör PowerShell inte osignerade skript som laddas ned från Internet, vilket inkluderar e-post- och snabbmeddelandeprogram.
Du kan signera skriptet eller välja att köra ett osignerat skript utan att ändra körningsprincipen.
Från och med PowerShell 3.0 kan du använda parametern Stream för cmdleten Get-Item
för att identifiera filer som blockeras eftersom de har laddats ned från Internet. Använd cmdleten Unblock-File
för att avblockera skripten så att du kan köra dem i PowerShell.
Mer information finns i about_Signing, Get-Item och Unblock-File.
Anteckning
Andra metoder för att ladda ned filer kanske inte markerar att filerna kommer från Internetzonen. Några exempel är:
curl.exe
Invoke-RestMethod
Invoke-WebRequest
Körningsprincip på Windows Server Core och Windows Nano Server
När PowerShell 6 körs på Windows Server Core eller Windows Nano Server under vissa förhållanden kan körningsprinciper misslyckas med följande fel:
AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PowerShell använder API:er i Windows Desktop Shell (explorer.exe
) för att verifiera zonen för en skriptfil. Windows Shell är inte tillgängligt på Windows Server Core och Windows Nano Server.
Du kan också få det här felet på alla Windows-system om Windows Desktop Shell inte är tillgängligt eller inte svarar. Under inloggningen kan till exempel ett PowerShell-inloggningsskript starta körningen innan Windows Desktop är klart, vilket resulterar i fel.
Om du använder en körningsprincip för ByPass eller AllSigned krävs ingen zonkontroll som undviker problemet.