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 jiným systémem než Windows je Unrestricted
výchozí zásada spouštění 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 spouštět skripty. A jestli musí být skripty před spuštěním digitálně podepsané.
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 s příkazem Spustit jako Správa istrator.
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 Get-ExecutionPolicy
PowerShellu 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í RemoteSigned
zásady. 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 LocalMachine
zásady provádění oboru 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 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í Restricted
zásady. 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 objekt Microsoft.PowerShell.ExecutionPolicy v 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 běží Get-ExecutionPolicy
na vzdáleném počítači. Objekt Get-ExecutionPolicy
se odešle do kanálu do objektu 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 spouště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í AllSigned
zásady.
Parametr Scope určuje CurrentUser
. Pokud chcete zobrazit nastavení zásad spouštění, použijte rutinu Get-ExecutionPolicy
s parametrem List .
Účinné 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
používá parametr ExecutionPolicy k určení Undefined
zásady. 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 Process
má vliv jenom na aktuální relaci PowerShellu. Zásady spuště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í AllSigned
zásady. 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 použitím rutiny ověřit, jestli je bezpečný.Unblock-File
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í RemoteSigned
zásady. Zásada je nastavena pro výchozí obor, LocalMachine
.
Rutina Get-ExecutionPolicy
ukazuje, že RemoteSigned
jde o efektivní zásady spouštění pro aktuální relaci PowerShellu.
Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
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
zásady provádění nezměnily, Get-ExecutionPolicy
zobrazí se platné zásady RemoteSigned
spuštění .
Skript Start-ActivityTracker.ps1
se spustí z aktuálního adresáře. Skript se začne spouštět, protože ji odblokovala rutina 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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExecutionPolicy
Určuje zásadu spuštění. Pokud neexistují žádné zásady skupiny a zásady spouštění jednotlivých oborů jsou nastavené na Undefined
, Restricted
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 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 neboRemoteSigned
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 jsouUndefined
zásady spouštění ve všech oborech , efektivní zásada spuštění jeRestricted
.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.
Type: | ExecutionPolicy |
Accepted values: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Required: | True |
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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čeUserPolicy
- Nastavení zásad skupiny pro aktuálního uživatele počítačeProcess
– Ovlivňuje pouze aktuální relaci PowerShellu.LocalMachine
– Výchozí obor, který má vliv na všechny uživatele počítačeCurrentUser
- Ovlivňuje pouze aktuálního uživatele.
Obor Process
má vliv jenom na aktuální relaci PowerShellu. Zásady spouštění se ukládají do proměnné $env:PSExecutionPolicyPreference
prostředí , nikoli do registru. Po zavření relace PowerShellu se proměnná a hodnota odstraní.
Zásady spouštění pro CurrentUser
obor se zapisují do podregistru HKEY_LOCAL_USER
registru .
Zásady spouštění pro LocalMachine
obor se zapisují do podregistru HKEY_LOCAL_MACHINE
registru .
Type: | ExecutionPolicyScope |
Accepted values: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Required: | False |
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Vstupy
Do této rutiny můžete převést objekt zásad spuštění.
Do této rutiny můžete převést řetězec, který obsahuje název zásady spuštění.
Výstupy
None
Tato rutina nevrátí žádný výstup.
Poznámky
Set-ExecutionPolicy
nemění obory MachinePolicy
a UserPolicy
obory, protože jsou nastavené zásadami skupiny.
Set-ExecutionPolicy
nepřepíše zásady skupiny, a to ani v případě, že je předvolba uživatele více omezující než zásada.
Pokud je pro počítač nebo uživatele povolená možnost Spuštění skriptu pomocí zásad skupiny, uloží se předvolba uživatele, ale není efektivní. PowerShell zobrazí zprávu s vysvětlením konfliktu.