about_Execution_Policies

Kort beskrivning

Beskriver PowerShell-körningsprinciper och förklarar hur du hanterar dem.

Lång beskrivning

PowerShells körningsprincip är en säkerhetsfunktion som styr de villkor under vilka PowerShell läser in konfigurationsfiler och kör skript. Den här funktionen förhindrar körning av skadliga skript.

På en Windows 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 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 din PowerShell-profil. Körningsprincipen för en viss session lagras bara 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å icke-Windows-datorer är och kan standardkörningsprincipen Unrestricted inte ändras. Set-ExecutionPolicyCmdleten är tillgänglig, men PowerShell visar ett konsolmeddelande om att den inte stöds. Även Get-ExecutionPolicy om Unrestricted returneras på Windows plattformar matchar beteendet egentligen Bypass eftersom dessa plattformar inte implementerar de Windows-säkerhet Zonerna.

PowerShell-körningsprinciper

Tillämpningen av dessa principer sker bara 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

  • Inget 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 för skript och konfigurationsfiler som laddas ned från Internet som innehåller e-post- och snabbmeddelanden.
  • Kräver inte digitala signaturer för skript som är skrivna på den lokala datorn och som inte laddas ned från Internet.
  • Kör skript som laddas ned från Internet och inte signeras, om skripten är avblockerade, till exempel med hjälp av Unblock-File cmdleten .
  • 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

  • Ingen körningsprincip har angetts i det aktuella omfånget.
  • Om körningsprincipen i alla omfång är är den effektiva körningsprincipen för Windows klienter och Undefined Restricted RemoteSigned för Windows Server.

Unrestricted

  • Standardkörningsprincipen för icke-Windows datorer och kan inte ändras.
  • Osignerade skript kan köras. Det finns en risk för att skadliga skript körs.
  • Varnar användaren innan skript och konfigurationsfiler som inte kommer från den lokala intranätzonen körs.

Anteckning

I system som inte skiljer Universal Naming Convention (UNC)-sökvägar från Internetsökvägar kanske skript som identifieras av en UNC-sökväg inte tillåts att köras med remoteSigned-körningsprincipen.

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 Scope är MachinePolicy , UserPolicy Process , CurrentUser och LocalMachine. 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 begränsande princip har angetts på 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 grupprincip för den aktuella användaren av datorn.

Process

Process Omfå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 bara den aktuella användaren. Den lagras i den HKEY_CURRENT_USER registerundernyckeln.

LocalMachine

Körningsprincipen påverkar alla användare på den aktuella datorn. Den lagras i den HKEY_LOCAL_MACHINE registerundernyckeln.

Hantera körningsprincipen med PowerShell

Hämta den effektiva körningsprincipen för den aktuella PowerShell-sessionen med hjälp av Get-ExecutionPolicy cmdleten .

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 Scope parametern för Get-ExecutionPolicy .

Följande kommando hämtar till exempel körningsprincipen för omfånget CurrentUser:

Get-ExecutionPolicy -Scope CurrentUser

Ändra körningsprincipen

Om du vill ändra PowerShell-körningsprincipen Windows datorn använder du Set-ExecutionPolicy cmdleten . Ändringen börjar gälla 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 gälla tills du ändrar den igen.

Om du anger körningsprincipen för Process omfå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 startar du PowerShell med alternativet Kör som administratör för att köra kommandon som ändrar körningsprincipen för den lokala datorn, LocalMachine-omfånget.

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.

Ett kommando som anger körningsprincipen för den lokala datorn kan till exempel 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 av 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 har angetts i något omfång är den effektiva körningsprincipen , som Restricted är standard för Windows klienter.

Ange en annan princip för en session

Du kan använda parametern ExecutionPolicy för pwsh.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 eller från PowerShell, och använder sedan parametern ExecutionPolicy för för att ange cmd.exe pwsh.exe körningsprincipen.

Exempel:

pwsh.exe -ExecutionPolicy AllSigned

Den körningsprincip 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 körningsprincipen som 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ända 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 Aktivera körning av skript ä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 grupprincip motsvarar följande körningsprincipinställningar:

    Grupprincip Körningsprincip
    Tillåt alla skript Unrestricted
    Tillåt lokala skript och fjärranslutna signerade 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.

Filerna PowerShellExecutionPolicy.adm och PowerShellExecutionPolicy.admx lägger till principen Aktivera skriptkörning i noderna Datorkonfiguration och Användarkonfiguration i grupprincip Editor i 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 anges 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: CurrentUser
Execution Policy: LocalMachine

Hantera signerade och osignerade skript

I Windows kan program som Internet Explorer Microsoft Edge lägga till en alternativ dataström i 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 parametern Stream för cmdleten för att identifiera filer som har blockerats eftersom de har laddats Get-Item ned från Internet. Använd Unblock-File cmdleten för att avblockera skripten så att du kan köra dem i PowerShell.

Mer information finns i about_Signing, Get-Itemoch Unblock-File.

Anteckning

Andra metoder för att ladda ned filer kanske inte markerar filerna som att de kommer från zonen Internet. 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örningsprinciperna 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. Gränssnittet Windows är inte tillgängligt på Windows Server Core och Windows Nano Server.

Du kan också få det här felet Windows 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 redo, vilket resulterar i fel.

Användning av en körningsprincip för ByPass eller AllSigned kräver inte en zonkontroll som undviker problemet.

Se även

about_Environment_Variables

about_Group_Policy_Settings

about_Signing

Get-ExecutionPolicy

Hämta objekt

about_Pwsh

Set-ExecutionPolicy

Avblockera fil