Set-ExecutionPolicy

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

Syntax

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 najdete v tématu about_Execution_Policies.

Počínaje PowerShellem 6.0 pro počítače s windows je výchozí zásada spouštění unrestricted a nedá se změnit. Tato rutina Set-ExecutionPolicy je dostupná, ale PowerShell zobrazí zprávu konzoly, že není podporovaná.

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 spustit skripty. A jestli se skripty musí před spuštěním digitálně podepsat.

Výchozí Set-ExecutionPolicy obor rutiny 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í rutiny Spustit jako správce.

Chcete-li zobrazit zásady provádění pro každý obor v pořadí priority, použijte Get-ExecutionPolicy -List. Pokud chcete zobrazit efektivní zásady spouštění pro relaci PowerShellu bez Get-ExecutionPolicy 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ásad 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é kolidují s Zásady skupiny

Tento příkaz se pokusí nastavit zásadu spuštění oboru LocalMachine na hodnotu Restricted. LocalMachine je více omezující, ale není efektivní zásadou, protože je v konfliktu s Zásady skupiny. Zásady s omezeným přístupem se zapisuje do podregistru HKEY_LOCAL_MACHINE registru.

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 s omezeným přístupem . Parametr Scope určuje výchozí hodnotu oboru LocalMachine. Rutina Get-ChildItem používá parametr Path s poskytovatelem 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 v místním počítači. Get-ExecutionPolicy odešle objekt Microsoft.PowerShell.ExecutionPolicy v kanálu. Set-ExecutionPolicy přijímá vstup kanálu a nevyžaduje parametr ExecutionPolicy .

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

Rutina Invoke-Command se spustí v místním počítači a odešle SkriptBlock vzdálenému počítači. Parametr ComputerName určuje vzdálený počítač Server01. Parametr ScriptBlock běží Get-ExecutionPolicy na vzdáleném počítači. Objekt Get-ExecutionPolicy se odešle do kanálu .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 používá parametr ExecutionPolicy k určení zásady 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 změní na AllSigned.

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

Tento příklad ukazuje, jak pomocí zásady nedefinovaného spuštění odebrat zásadu provádě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 používá parametr ExecutionPolicy k určení zásady 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

Obor procesu má vliv jenom na aktuální relaci PowerShellu. Zásady provádění se uloží do proměnné $env:PSExecutionPolicyPreference prostředí 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

Použije Set-ExecutionPolicy 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 provádění

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

Osvědčeným postupem je přečíst kód skriptu a před použitímUnblock-File 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:

Použije Set-ExecutionPolicy parametr ExecutionPolicy k určení zásady RemoteSigned . Zásada je nastavená pro výchozí obor LocalMachine.

Rutina Get-ExecutionPolicy ukazuje, že RemoteSigned je platná zásada spouštění pro aktuální relaci PowerShellu.

Skript Start-ActivityTracker.ps1 se spustí z aktuálního adresáře. Skript je blokovaný aplikací 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 pomocí parametru Path odblokuje skript.

Pokud chcete ověřit, že Unblock-File se zásady provádění nezměnily, Get-ExecutionPolicy zobrazí efektivní zásady spouštění RemoteSigned.

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

Parametry

-Confirm

Před spuštěním rutiny zobrazí výzvu k potvrzení.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

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

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

  • AllSigned. Vyžaduje, aby všechny skripty a konfigurační soubory byly podepsány důvěryhodným vydavatelem, včetně skriptů zapsaných v místním počítači.
  • Obejití. Nic není blokováno a nejsou k dispozici žádná upozornění ani výzvy.
  • Výchozí. Nastaví výchozí zásadu spouštění. Omezeno pro klienty Windows nebo RemoteSigned pro servery 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.
  • Omezeno. Nenačítá konfigurační soubory ani nespouští skripty. Výchozí zásady spouštění pro klientské počítače s Windows.
  • Nedefinováno. Pro obor není nastavená žádná zásada provádění. Odebere přiřazenou zásadu spuštění z oboru, který není nastavený Zásady skupiny. Pokud zásady provádění ve všech oborech nejsou definovány, je platná zásada spuštění omezená.
  • Bez omezení. Počínaje PowerShellem 6.0 se jedná o výchozí zásadu spouštění pro počítače bez 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 jeho spuštěním.
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

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

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

  • MachinePolicy. Nastavte Zásady skupiny pro všechny uživatele počítače.
  • UserPolicy. Nastavte Zásady skupiny pro aktuálního uživatele počítače.
  • Proces. Ovlivňuje jenom aktuální relaci PowerShellu.
  • CurrentUser. Ovlivňuje pouze aktuálního uživatele.
  • LocalMachine. Výchozí obor, který ovlivňuje všechny uživatele počítače.

Obor procesu má vliv jenom na aktuální relaci PowerShellu. Zásady spouštění se ukládají do 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 podregistru registru HKEY_LOCAL_USER.

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

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Zobrazuje, co by se stalo při spuštění rutiny. Rutina není spuštěna.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Vstupy

Microsoft.PowerShell.ExecutionPolicy, System.String

Objekt zásad spuštění nebo řetězec, který obsahuje název zásady Set-ExecutionPolicyprovádění, můžete do .

Výstupy

None

Set-ExecutionPolicy nevrací žádný výstup.

Poznámky

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

Set-ExecutionPolicynepř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ásady skupiny Zapnout spouštění skriptů, uloží se předvolba uživatele, ale není platná. PowerShell zobrazí zprávu, která vysvětluje konflikt.