Dela via


Set-ExecutionPolicy

Anger PowerShell-körningsprinciperna för Windows-datorer.

Syntax

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Description

Cmdleten Set-ExecutionPolicy ändrar PowerShell-körningsprinciper för Windows-datorer. Mer information finns i about_Execution_Policies.

Från och med PowerShell 6.0 för datorer som inte är Windows är standardkörningsprincipen Unrestricted och kan inte ändras. Cmdleten Set-ExecutionPolicy är tillgänglig, men PowerShell visar ett konsolmeddelande om att den inte stöds.

En körningsprincip är en del av PowerShell-säkerhetsstrategin. Körningsprinciper avgör om du kan läsa in konfigurationsfiler, till exempel din PowerShell-profil eller köra skript. Och om skript måste signeras digitalt innan de körs.

Standardomfånget för Set-ExecutionPolicy-cmdleten är LocalMachine, vilket påverkar alla som använder datorn. Om du vill ändra körningsprincipen för LocalMachinestartar du PowerShell med Kör som administratör.

Om du vill visa körningsprinciperna för varje omfång använder du Get-ExecutionPolicy -List. Om du vill se den effektiva körningsprincipen för powershell-sessionen använder du Get-ExecutionPolicy utan parametrar.

Exempel

Exempel 1: Ange en körningsprincip

Det här exemplet visar hur du anger körningsprincipen för den lokala datorn.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Cmdleten Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange RemoteSigned princip. Parametern Scope anger standardomfångsvärdet LocalMachine. Om du vill visa körningsprincipinställningarna använder du cmdleten Get-ExecutionPolicy med parametern List.

Exempel 2: Ange en körningsprincip som står i konflikt med en grupprincip

Det här kommandot försöker ange körningsprincipen för LocalMachine-omfånget till Restricted. LocalMachine är mer restriktiv, men är inte den effektiva principen eftersom den står i konflikt med en grupprincip. Principen Restricted skrivs till registreringsdatafilen HKEY_LOCAL_MACHINE.

PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted

PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds

Name                    Property
----                    --------
Microsoft.PowerShell    Path            : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Restricted
ScriptedDiagnostics     ExecutionPolicy : Unrestricted

Cmdleten Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange Restricted princip. Parametern Scope anger standardomfångsvärdet LocalMachine. Cmdleten Get-ChildItem använder parametern Path med HKLM:-enheten för att ange registerplats.

Exempel 3: Tillämpa körningsprincipen från en fjärrdator på en lokal dator

Det här kommandot hämtar körningsprincipobjektet från en fjärrdator och anger principen på den lokala datorn. Get-ExecutionPolicy skickar ett Microsoft.PowerShell.ExecutionPolicy- objekt i pipelinen. Set-ExecutionPolicy accepterar pipelineindata och kräver inte parametern ExecutionPolicy.

Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Cmdleten Invoke-Command körs på den lokala datorn och skickar ScriptBlock- till fjärrdatorn. Parametern ComputerName anger fjärrdatorn Server01. Parametern ScriptBlock körs Get-ExecutionPolicy på fjärrdatorn. Get-ExecutionPolicy-objektet skickas ned i pipelinen till Set-ExecutionPolicy. Set-ExecutionPolicy tillämpar körningsprincipen på den lokala datorns standardomfång LocalMachine.

Exempel 4: Ange omfånget för en körningsprincip

Det här exemplet visar hur du anger en körningsprincip för ett angivet omfång CurrentUser. Omfånget CurrentUser påverkar bara den användare som anger det här omfånget.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange AllSigned princip. Parametern Scope anger CurrentUser. Om du vill visa körningsprincipinställningarna använder du cmdleten Get-ExecutionPolicy med parametern List.

Den effektiva körningsprincipen för användaren blir AllSigned.

Exempel 5: Ta bort körningsprincipen för den aktuella användaren

Det här exemplet visar hur du använder körningsprincipen Undefined för att ta bort en körningsprincip för ett angivet omfång.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange Undefined princip. Parametern Scope anger CurrentUser. Om du vill visa körningsprincipinställningarna använder du cmdleten Get-ExecutionPolicy med parametern List.

Exempel 6: Ange körningsprincipen för den aktuella PowerShell-sessionen

Omfånget Process påverkar endast den aktuella PowerShell-sessionen. Körningsprincipen sparas i miljövariabeln $Env:PSExecutionPolicyPreference och tas bort när sessionen stängs.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       AllSigned
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange AllSigned princip. Parametern Scope anger värdet Process. Om du vill visa körningsprincipinställningarna använder du cmdleten Get-ExecutionPolicy med parametern List.

Exempel 7: Avblockera ett skript för att köra det utan att ändra körningsprincipen

Det här exemplet visar hur RemoteSigned körningsprincipen hindrar dig från att köra osignerade skript.

Bästa praxis är att läsa skriptets kod och kontrollera att den är säker innan med hjälp av cmdleten Unblock-File. Den Unblock-File cmdleten avblockera skript så att de kan köras, men ändrar inte körningsprincipen.

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PS> Unblock-File -Path .\Start-ActivityTracker.ps1

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

Task 1:

Set-ExecutionPolicy använder parametern ExecutionPolicy för att ange RemoteSigned princip. Principen har angetts för standardomfånget LocalMachine.

Cmdleten Get-ExecutionPolicy visar att RemoteSigned är den effektiva körningsprincipen för den aktuella PowerShell-sessionen.

Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by RemoteSigned eftersom skriptet inte är digitalt signerat.

I det här exemplet har skriptets kod granskats och verifierats som säker att köra. Cmdleten Unblock-File använder parametern Path för att avblockera skriptet.

För att kontrollera att Unblock-File inte ändrade körningsprincipen visar Get-ExecutionPolicy den effektiva körningsprincipen RemoteSigned.

Skriptet Start-ActivityTracker.ps1 körs från den aktuella katalogen. Skriptet börjar köras eftersom det avblockerades av cmdleten Unblock-File.

Parametrar

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

Typ:SwitchParameter
Alias:cf
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ExecutionPolicy

Anger körningsprincipen. Om det inte finns några grupprinciper och varje omfångs körningsprincip är inställd på Undefinedblir Restricted den effektiva principen för alla användare.

De acceptabla körningsprincipvärdena är följande:

  • AllSigned. Kräver att alla skript och konfigurationsfiler signeras av en betrodd utgivare, inklusive skript som skrivits på den lokala datorn.
  • Bypass. Ingenting blockeras och det finns inga varningar eller uppmaningar.
  • Default. Anger standardkörningsprincipen. Restricted för Windows-klienter eller RemoteSigned för Windows-servrar.
  • RemoteSigned. Kräver att alla skript och konfigurationsfiler som laddas ned från Internet är signerade av en betrodd utgivare. Standardkörningsprincipen för Windows-serverdatorer.
  • Restricted. Läser inte in konfigurationsfiler eller kör skript. Standardkörningsprincipen för Windows-klientdatorer.
  • Undefined. Ingen körningsprincip har angetts för omfånget. Tar bort en tilldelad körningsprincip från ett omfång som inte har angetts av en grupprincip. Om körningsprincipen i alla omfång är Undefinedär den effektiva körningsprincipen Restricted.
  • Unrestricted. Från och med PowerShell 6.0 är detta standardkörningsprincipen för icke-Windows-datorer och kan inte ändras. Läser in alla konfigurationsfiler och kör alla skript. Om du kör ett osignerat skript som har laddats ned från Internet uppmanas du att ange behörighet innan det körs.
Typ:ExecutionPolicy
Godkända värden:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Force

Undertrycker alla bekräftelseprompter. Var försiktig med den här parametern för att undvika oväntade resultat.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Scope

Anger det omfång som påverkas av en körningsprincip. Standardomfånget är LocalMachine.

Den effektiva körningsprincipen bestäms av prioritetsordningen enligt följande:

  • 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 – Påverkar endast den aktuella PowerShell-sessionen
  • LocalMachine – Standardomfång som påverkar alla användare av datorn
  • CurrentUser – Påverkar endast den aktuella användaren

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.

Körningsprinciper för CurrentUser-omfånget skrivs till registreringsdatafilen HKEY_LOCAL_USER.

Körningsprinciper för LocalMachine-omfånget skrivs till registreringsdatafilen HKEY_LOCAL_MACHINE.

Typ:ExecutionPolicyScope
Godkända värden:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Standardvärde:LocalMachine
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-WhatIf

Visar vad som skulle hända om cmdleten körs. Cmdleten körs inte.

Typ:SwitchParameter
Alias:wi
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

ExecutionPolicy

Du kan skicka ett körningsprincipobjekt till den här cmdleten.

String

Du kan skicka en sträng som innehåller namnet på en körningsprincip till den här cmdleten.

Utdata

None

Den här cmdleten returnerar inga utdata.

Kommentarer

Set-ExecutionPolicy ändrar inte MachinePolicy och UserPolicy omfång eftersom de anges av grupprinciper.

Set-ExecutionPolicy åsidosätter inte en grupprincip, även om användarinställningarna är mer restriktiva än principen.

Om grupprincipen Aktivera skriptkörning är aktiverad för datorn eller användaren sparas användarinställningen, men den är inte effektiv. PowerShell visar ett meddelande som förklarar konflikten.