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.

PowerShell-körningsprinciper

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

    • 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:PSExecutionPolicyPreferencei 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 powershell.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 powershell.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.

Se även