about_Execution_Policies
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 grupprincipinstä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 Unrestricted standardkörningsprincipen 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
det returneras Unrestricted på plattformar som inte är Windows matchar Bypass beteendet verkligen 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.
Bypass
- 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.
Default
- Anger standardkörningsprincipen.
- Restricted 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 är skrivna 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.
Restricted
- Standardkörningsprincipen för Windows-klientdatorer.
- Tillåter enskilda kommandon, men tillåter inte skript.
- Förhindrar körning av alla skriptfiler, inklusive formaterings- och konfigurationsfiler (
.ps1xml
), modulskriptfiler (.psm1
) och PowerShell-profiler (.ps1
).
Undefined
- Det finns ingen körningsprincip i det aktuella omfånget.
- Om körningsprincipen i alla omfång är Undefinedär Restricted den effektiva körningsprincipen för Windows-klienter och RemoteSigned för Windows Server.
Unrestricted
- Standardkörningsprincipen för icke-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.
Kommentar
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 kan köras med körningsprincipen RemoteSigned .
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 är , UserPolicy, Process, CurrentUser och LocalMachine. MachinePolicyScope LocalMachine är standard när du anger en körningsprincip.
Värdena Scope 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
Omfånget Process påverkar endast 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 körningsprincipuppsättningen för den lokala datorn.
Om du vill hämta körningsprincipuppsättningen för ett visst omfång använder du parametern ScopeGet-ExecutionPolicy
.
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å din Windows-dator 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 omfånget Process sparas den inte i registret. Körningsprincipen behålls tills den aktuella processen och eventuella underordnade processer stängs.
Kommentar
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ång , startar du PowerShell med alternativet Kör som administratör .
Så här ändrar du körningsprincipen:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Till exempel:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Så här anger du körningsprincipen i ett visst omfång:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Till 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.
Ett kommando som till exempel anger körningsprincipen för den lokala datorn kan lyckas men åsidosättas 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 Undefined.
Om du till exempel vill ta bort körningsprincipen för alla användare på den lokala datorn:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Ta bort körningsprincipen för en Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Om ingen körningsprincip anges i något omfång är Restrictedden effektiva körningsprincipen , vilket är standardvärdet för Windows-klienter.
Ange en annan princip för en session
Du kan använda parametern pwsh.exe
ExecutionPolicy för 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 pwsh.exe
ExecutionPolicy för för att ange körningsprincipen.
Till 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 anges. 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 grupprincipinställningen Aktivera skriptkörning 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 Restricted körningsprincipen.
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 Unrestricted 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:
Administrative Templates\Windows Components\Windows PowerShell
För Windows Vista och senare versioner av Windows:
Administrative Templates\Classic Administrative Templates\Windows Components\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:
Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser
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 som innehåller 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 stream-parametern 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.
Kommentar
Andra metoder för att ladda ned filer kanske inte markerar att filerna kommer från Internetzonen. Vissa exempel inkluderar:
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.