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.
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 pomocí příkazu Spustit jako správce.
Pokud chcete zobrazit zásady spouštění pro každý obor v pořadí podle priority, 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 spouště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 s Zásady skupiny
Tento příkaz se pokusí nastavit zásadu spouš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 zapisují do podregistru registru 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 se zprostředkovatele 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 objekt 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 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í oboru zásad spouštění
Tento příklad ukazuje, jak nastavit zásadu spouštění pro zadaný obor CurrentUser. Obor CurrentUser má vliv pouze 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 spouštění pro uživatele se změní na AllSigned.
Příklad 5: Odebrání zásad spouštění pro aktuálního uživatele
Tento příklad ukazuje, jak pomocí nedefinované zásady spouštění odebrat zásady spouš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í nedefinované 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 procesu má vliv jenom na aktuální relaci PowerShellu. Zásady spouštění se uloží do proměnné $env:PSExecutionPolicyPreference
prostředí a při zavření relace se odstraní.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Parametr Set-ExecutionPolicy
ExecutionPolicy určuje zásadu 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í skriptu pro jeho spuštění beze změny zásad spouštění
Tento příklad ukazuje, jak zásady spouštění RemoteSigned brání spuštění nepodepsané skripty.
Osvědčeným postupem je před použitím Unblock-File
rutiny přečíst kód skriptu a ověřit jeho bezpečnost. Rutina Unblock-File
odblokuje skripty, aby mohly běžet, ale nezmě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:
Nástroj Set-ExecutionPolicy
používá parametr ExecutionPolicy k určení zásady RemoteSigned . Zásada je nastavená pro výchozí obor LocalMachine.
Rutina Get-ExecutionPolicy
ukazuje, že RemoteSigned je efektivní zásada spouštění pro aktuální relaci PowerShellu.
SkriptStart-ActivityTracker.ps1 se spustí z aktuálního adresáře. RemoteSigned blokuje skript, 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žije parametr Path k odblokování skriptu.
Pokud chcete ověřit, že Unblock-File
nedošlo ke změně zásad spouštění, Get-ExecutionPolicy
zobrazí efektivní zásadu 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 ho 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 spouštění. Pokud neexistují žádné zásady skupiny a zásady spouštění jednotlivých oborů jsou nastaveny na Hodnotu Nedefinováno, stane se omezení 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ů napsaných v místním počítači.
- Vynechat. Nic není zablokované a nezobrazují se žádná upozornění ani výzvy.
- Výchozí. Nastaví výchozí zásady spouštění. Omezeno pro klienty s 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 serverem Windows.
- Omezeno. Nenačítá konfigurační soubory ani nespouští skripty. Výchozí zásady spouštění klientských počítačů s Windows.
- Nedefinováno. Pro obor nejsou nastavené žádné zásady spouštění. Odebere přiřazenou zásadu spouštění z oboru, který není nastaven Zásady skupiny. Pokud je zásada spouštění ve všech oborech nedefinovaná, efektivní zásada spouštění je Omezená.
- Bez omezení. Načte všechny konfigurační soubory a spustí všechny skripty. Pokud spustíte nepodepsaný skript, který byl stažen z internetu, zobrazí se před spuštěním výzvy k zadání oprávnění.
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í. U tohoto parametru postupujte opatrně, abyste se vyhnuli neočekávaným výsledkům.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Určuje obor, který je ovlivněn zásadami spouště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ásady skupiny pro všechny uživatele počítače.
- UserPolicy. Nastaveno 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:PSExecutionPolicyPreference
prostředí , nikoli do 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 |
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
Microsoft.PowerShell.ExecutionPolicy, System.String
Objekt zásad spouštění nebo řetězec, který obsahuje název zásady spouštění, můžete nasměrovat na Set-ExecutionPolicy
.
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-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ásady skupiny Zapnout spouštění skriptů, uloží se předvolba uživatele, ale není platná. PowerShell zobrazí zprávu, která konflikt vysvětluje.