Sdílet prostřednictvím


Set-ExecutionPolicy

Nastaví zásady spouštění PowerShellu pro počítače s Windows.

Syntaxe

All

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

Description

Rutina Set-ExecutionPolicy změní zásady spouštění PowerShellu pro počítače s Windows. Další informace naleznete v části about_Execution_Policies.

Počínaje PowerShellem 6.0 pro počítače s jiným systémem než Windows je výchozí zásada spouštění Unrestricted a nedá se změnit. Cmdlet Set-ExecutionPolicy je dostupný, ale PowerShell zobrazí konzolovou zprávu, že není podporován.

Zásady spouštění jsou součástí strategie zabezpečení PowerShellu. Zásady spouštění určují, jestli můžete načíst konfigurační soubory, například profil PowerShellu, nebo spouštět skripty. A jestli musí být skripty před spuštěním digitálně podepsané.

Výchozí obor rutiny Set-ExecutionPolicy je LocalMachine, který ovlivňuje všechny uživatele počítače. Pokud chcete změnit zásady spouštění pro LocalMachine, spusťte PowerShell pomocí Spustit jako správce.

Chcete-li zobrazit zásady provádění pro každý obor, použijte Get-ExecutionPolicy -List. Pokud chcete zobrazit efektivní zásady spouštění pro relaci PowerShellu, použijte Get-ExecutionPolicy bez parametrů.

Příklady

Příklad 1: Nastavení zásad provádění

Tento příklad ukazuje, jak nastavit zásady spouštění pro místní počítač.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Rutina Set-ExecutionPolicy používá parametr ExecutionPolicy k určení zásady RemoteSigned. Parametr Scope určuje výchozí hodnotu oboru LocalMachine. Pokud chcete zobrazit nastavení zásad spouštění, použijte rutinu Get-ExecutionPolicy s parametrem List.

Příklad 2: Nastavení zásad spouštění, které jsou v konfliktu se zásadami skupiny

Tento příkaz se pokusí nastavit zásady provádění oboru LocalMachine na Restricted. LocalMachine je více omezující, ale není efektivní zásadou, protože je v konfliktu se zásadami skupiny. Zásada Restricted se zapíše do registru hive 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

Rutina Set-ExecutionPolicy používá parametr ExecutionPolicy k určení zásady Restricted. Parametr Scope určuje výchozí hodnotu oboru LocalMachine. Rutina Get-ChildItem používá parametr Path s jednotkou HKLM: k určení umístění registru.

Příklad 3: Použití zásad spouštění ze vzdáleného počítače na místní počítač

Tento příkaz získá objekt zásad spouštění ze vzdáleného počítače a nastaví zásadu na místním počítači. Get-ExecutionPolicy odešle Microsoft.PowerShell.ExecutionPolicy objektu dolů kanálu. Set-ExecutionPolicy přijímá vstup kanálu a nevyžaduje parametr ExecutionPolicy.

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

Rutina Invoke-Command se spustí v místním počítači a odešle ScriptBlock vzdálenému počítači. Parametr ComputerName určuje vzdálený počítač Server01. Parametr ScriptBlock spustí Get-ExecutionPolicy na vzdáleném počítači. Objekt Get-ExecutionPolicy se odešle do kanálu do Set-ExecutionPolicy. Set-ExecutionPolicy použije zásadu spouštění na výchozí obor místního počítače LocalMachine.

Příklad 4: Nastavení rozsahu zásad provádění

Tento příklad ukazuje, jak nastavit zásady provádění pro zadaný obor, CurrentUser. Obor CurrentUser má vliv jenom na uživatele, který tento obor nastaví.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy k určení zásad používá parametr AllSigned. Parametr Scope určuje CurrentUser. Pokud chcete zobrazit nastavení zásad spouštění, použijte rutinu Get-ExecutionPolicy s parametrem List.

Efektivní zásady provádění pro uživatele se stanou AllSigned.

Příklad 5: Odebrání zásad spuštění pro aktuálního uživatele

Tento příklad ukazuje, jak pomocí Undefined zásad spouštění odebrat zásadu spuštění pro zadaný obor.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy k určení zásad používá parametr Undefined. Parametr Scope určuje CurrentUser. Pokud chcete zobrazit nastavení zásad spouštění, použijte rutinu Get-ExecutionPolicy s parametrem List.

Příklad 6: Nastavení zásad spouštění pro aktuální relaci PowerShellu

Rozsah Process ovlivňuje pouze aktuální relaci PowerShellu. Zásady spuštění se uloží do proměnné prostředí $Env:PSExecutionPolicyPreference a po zavření relace se odstraní.

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

Set-ExecutionPolicy používá parametr ExecutionPolicy k určení zásady AllSigned. Parametr Scope určuje hodnotu Process. Pokud chcete zobrazit nastavení zásad spouštění, použijte rutinu Get-ExecutionPolicy s parametrem List.

Příklad 7: Odblokování spuštění skriptu beze změny zásad spuštění

Tento příklad ukazuje, jak RemoteSigned zásady spouštění brání spuštění nepodepsaných skriptů.

Osvědčeným postupem je přečíst kód skriptu a před pomocí rutiny ověřit, že je bezpečné . Rutina Unblock-File odblokuje skripty, aby mohly běžet, ale nemění zásady spouštění.

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 používá parametr ExecutionPolicy k určení zásady RemoteSigned. Zásada je nastavena pro výchozí obor, LocalMachine.

Cmdlet Get-ExecutionPolicy ukazuje, že RemoteSigned je efektivní zásada provádění pro aktuální relaci PowerShellu.

Skript Start-ActivityTracker.ps1 se spustí z aktuálního adresáře. Skript je blokovaný RemoteSigned, protože skript není digitálně podepsaný.

V tomto příkladu byl kód skriptu zkontrolován a ověřen jako bezpečný ke spuštění. Rutina Unblock-File používá k odblokování skriptu parametr Path.

Pokud chcete ověřit, že Unblock-File nezměnil zásady provádění, Get-ExecutionPolicy zobrazí platné zásady provádění RemoteSigned.

Skript, Start-ActivityTracker.ps1 se spustí z aktuálního adresáře. Skript se začne spouštět, protože ho odblokovala rutina Unblock-File.

Parametry

-Confirm

Před spuštěním cmdletu vás vyzve k potvrzení.

Vlastnosti parametru

Typ:SwitchParameter
Default value:False
Podporuje zástupné znaky:False
DontShow:False
Aliasy:viz

Sady parametrů

(All)
Position:Named
Povinné:False
Hodnota z kanálu:False
Hodnota z kanálu podle názvu vlastnosti:False
Hodnota ze zbývajících argumentů:False

-ExecutionPolicy

Určuje zásadu spuštění. Pokud neexistují žádné zásady skupiny a zásady provádění jednotlivých oborů jsou nastaveny na Undefined, pak Restricted stane efektivní zásadou pro všechny uživatele.

Přijatelné hodnoty zásad spouštění jsou následující:

  • AllSigned. Vyžaduje, aby byly všechny skripty a konfigurační soubory podepsané důvěryhodným vydavatelem, včetně skriptů zapsaných na místním počítači.
  • Bypass. Nic není zablokované a nejsou k dispozici žádná upozornění ani výzvy.
  • Default. Nastaví výchozí zásady spouštění. Restricted pro klienty Windows nebo RemoteSigned pro servery s Windows.
  • RemoteSigned. Vyžaduje, aby všechny skripty a konfigurační soubory stažené z internetu byly podepsány důvěryhodným vydavatelem. Výchozí zásady spouštění pro počítače se systémem Windows Server.
  • Restricted. Nenačítá konfigurační soubory ani nespouští skripty. Výchozí zásady spouštění pro klientské počítače s Windows.
  • Undefined. Pro obor není nastavená žádná zásada spouštění. Odebere přiřazenou zásadu spuštění z oboru, který není nastaven zásadou skupiny. Pokud je zásada spouštění ve všech oborech Undefined, efektivní zásada spuštění je Restricted.
  • Unrestricted. Počínaje PowerShellem 6.0 se jedná o výchozí zásady spouštění pro počítače s jiným systémem než Windows a nedá se změnit. Načte všechny konfigurační soubory a spustí všechny skripty. Pokud spustíte nepodepsaný skript stažený z internetu, zobrazí se výzva k zadání oprávnění před spuštěním.

Vlastnosti parametru

Typ:ExecutionPolicy
Default value:None
Přípustné hodnoty:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Podporuje zástupné znaky:False
DontShow:False

Sady parametrů

(All)
Position:0
Povinné:True
Hodnota z kanálu:True
Hodnota z kanálu podle názvu vlastnosti:False
Hodnota ze zbývajících argumentů:False

-Force

Potlačí všechny výzvy k potvrzení. Při použití tohoto parametru buďte opatrní, abyste se vyhnuli neočekávaným výsledkům.

Vlastnosti parametru

Typ:SwitchParameter
Default value:False
Podporuje zástupné znaky:False
DontShow:False

Sady parametrů

(All)
Position:Named
Povinné:False
Hodnota z kanálu:False
Hodnota z kanálu podle názvu vlastnosti:False
Hodnota ze zbývajících argumentů:False

-Scope

Určuje obor, který má vliv na zásady provádění. Výchozí obor je LocalMachine.

Efektivní zásady spouštění jsou určeny pořadím priority následujícím způsobem:

  • MachinePolicy – Nastavení zásad skupiny pro všechny uživatele počítače
  • UserPolicy – Nastavení zásad skupiny pro aktuálního uživatele počítače
  • Process – ovlivňuje pouze aktuální relaci PowerShellu.
  • LocalMachine – výchozí obor, který má vliv na všechny uživatele počítače
  • CurrentUser – ovlivňuje pouze aktuálního uživatele.

Rozsah Process ovlivňuje pouze aktuální relaci PowerShellu. Zásady spouštění jsou uloženy v proměnné $Env:PSExecutionPolicyPreferenceprostředí , nikoli v registru. Po zavření relace PowerShellu se proměnná a hodnota odstraní.

Zásady spouštění pro obor CurrentUser se zapisují do registru hive HKEY_LOCAL_USER.

Zásady spouštění pro obor LocalMachine se zapisují do registru hive HKEY_LOCAL_MACHINE.

Vlastnosti parametru

Typ:ExecutionPolicyScope
Default value:LocalMachine
Přípustné hodnoty:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Podporuje zástupné znaky:False
DontShow:False

Sady parametrů

(All)
Position:1
Povinné:False
Hodnota z kanálu:False
Hodnota z kanálu podle názvu vlastnosti:True
Hodnota ze zbývajících argumentů:False

-WhatIf

Ukazuje, co se stane, když se příkaz spustí. Příkazový modul nebyl spuštěn.

Vlastnosti parametru

Typ:SwitchParameter
Default value:False
Podporuje zástupné znaky:False
DontShow:False
Aliasy:Wi

Sady parametrů

(All)
Position:Named
Povinné:False
Hodnota z kanálu:False
Hodnota z kanálu podle názvu vlastnosti:False
Hodnota ze zbývajících argumentů:False

CommonParameters

Tato rutina podporuje běžné parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction a -WarningVariable. Další informace najdete v about_CommonParameters.

Vstupy

ExecutionPolicy

Do této rutiny můžete převést objekt zásad spuštění.

String

Do této rutiny můžete převést řetězec, který obsahuje název zásady spuštění.

Výstupy

None

Tento cmdlet nevrátí žádný výstup.

Poznámky

Set-ExecutionPolicy nezmění rozsahy MachinePolicy a UserPolicy, protože jsou nastavené zásadami skupiny.

Set-ExecutionPolicy nepřepíše zásady skupiny, i když je předvolba uživatele více omezující než zásada.

Pokud je pro počítač nebo uživatele povolená zásada skupiny Zapnout spouštění skriptů, uloží se předvolba uživatele, ale není efektivní. PowerShell zobrazí zprávu s vysvětlením konfliktu.