Share via


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: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 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-ExecutionPolicyOmfå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.

Se även

about_Environment_Variables

about_Group_Policy_Settings

about_Signing

Get-ExecutionPolicy

Get-Item

Hjälp om Pwsh-konsolen

Set-ExecutionPolicy

Unblock-File