about_Execution_Policies
Krátký popis
Popisuje zásady spouštění PowerShellu a vysvětluje, jak je spravovat.
Dlouhý popis
Zásady spouštění PowerShellu jsou bezpečnostní funkce, která řídí podmínky, za kterých PowerShell načítá konfigurační soubory a spouští skripty. Tato funkce pomáhá zabránit spuštění škodlivých skriptů.
Na počítači s Windows můžete nastavit zásady spouštění pro místní počítač, pro aktuálního uživatele nebo pro konkrétní relaci. Nastavení zásad skupiny můžete také použít k nastavení zásad spouštění pro počítače a uživatele.
Zásady spouštění pro místní počítač a aktuálního uživatele jsou uložené v konfiguračních souborech PowerShellu. V profilu PowerShellu nemusíte nastavovat zásady spouštění. Zásady spouštění pro konkrétní relaci jsou uloženy pouze v paměti a při zavření relace dojde ke ztrátě.
Zásady spouštění nejsou systémem zabezpečení, který omezuje akce uživatelů. Uživatelé můžou například snadno bypass zadat obsah skriptu na příkazovém řádku, když nemůžou spustit skript. Místo toho zásady spouštění pomáhají uživatelům nastavit základní pravidla a znemožnit jim neúmyslné porušení.
Na počítačích mimo default Systém Windows je Unrestricted zásada spouštění a nelze ji změnit. Tato rutina Set-ExecutionPolicy
je dostupná, ale PowerShell zobrazí zprávu konzoly, že není podporovaná. I když Get-ExecutionPolicy
se vrátí Unrestricted na jiných platformách než Windows, chování se skutečně shodujeBypass, protože tyto platformy neimplementují Zabezpečení Windows zóny.
Zásady spouštění PowerShellu
K vynucování těchto zásad dochází pouze na platformách Windows. Zásady spouštění PowerShellu jsou následující:
AllSigned
- Skripty se můžou spustit.
- Vyžaduje, aby všechny skripty a konfigurační soubory byly podepsány důvěryhodným vydavatelem, včetně skriptů, které zapisujete do místního počítače.
- Před spuštěním skriptů od vydavatelů se zobrazí výzva, které jste ještě klasifikovali jako důvěryhodné nebo nedůvěryhodné.
- Rizika, která jsou podepsaná, ale škodlivá, skripty.
Bypass
- Nic není zablokované a nejsou k dispozici žádná upozornění ani výzvy.
- Tato zásada spouštění je určená pro konfigurace, ve kterých je skript PowerShellu integrovaný do větší aplikace nebo pro konfigurace, ve kterých je PowerShell základem pro program, který má vlastní model zabezpečení.
Default
- Nastaví zásadu default spuštění.
- Restricted pro klienty Windows.
- RemoteSigned pro servery s Windows
RemoteSigned
- Zásady default spouštění pro počítače se serverem s Windows.
- Skripty se můžou spustit.
- Vyžaduje digitální podpis od důvěryhodného vydavatele ve skriptech a konfiguračních souborech stažených z internetu, které zahrnují programy pro zasílání e-mailů a rychlých zpráv.
- Nevyžaduje digitální podpisy ve skriptech, které jsou napsané v místním počítači a nestáhnou se z internetu.
- Spustí skripty, které se stáhnou z internetu a nejsou podepsané, pokud jsou skripty odblokované, například pomocí rutiny
Unblock-File
. - Riziko spuštění nepodepsaných skriptů z jiných zdrojů než z internetu a podepsaných skriptů, které by mohly být škodlivé.
Restricted
- Zásady default spouštění pro klientské počítače s Windows.
- Povoluje jednotlivé příkazy, ale neumožňuje skripty.
- Zabraňuje spuštění všech souborů skriptu, včetně formátování a konfiguračních souborů (
.ps1xml
), souborů skriptů modulů (.psm1
) a profilů PowerShellu (.ps1
).
Undefined
- V aktuálním scopestavu není nastavená žádná zásada spuštění .
- Pokud jsou Undefinedzásady spouštění ve všech oborech platné zásady Restricted spouštění pro klienty Windows a RemoteSigned pro Windows Server.
Unrestricted
- Zásady default spouštění pro počítače s jiným systémem než Windows a nelze je změnit.
- Můžou se spustit nepodepsané skripty. Existuje riziko spuštění škodlivých skriptů.
- Upozorní uživatele před spuštěním skriptů a konfiguračních souborů, které nejsou z místní zóny intranetu.
Poznámka:
V systémech, které nerozlišují cesty UNC (Universal Naming Convention) od internetových cest, nemusí být skripty identifikované cestou UNC povoleny ke spuštění pomocí zásad provádění RemoteSigned .
Zásady spouštění scope
Můžete nastavit zásadu spuštění, která je efektivní pouze v konkrétním scope.
Platné hodnoty jsou Scope , UserPolicy, Process, CurrentUser a LocalMachine. MachinePolicy LocalMachine je default při nastavování zásad spouštění.
Hodnoty Scope jsou uvedeny v pořadí priority. Zásada, která má přednost, je platná v aktuální relaci, i když byla na nižší úrovni priority nastavena přísnější zásada.
Další informace naleznete v tématu Set-ExecutionPolicy.
MachinePolicy
Nastavte zásadu skupiny pro všechny uživatele počítače.
UserPolicy
Nastavte zásadu skupiny pro aktuálního uživatele počítače.
Process
Jediná Processscope změna má vliv na aktuální relaci PowerShellu. Zásady spouštění se ukládají do proměnné
$env:PSExecutionPolicyPreference
prostředí místo konfiguračního souboru. Po zavření relace PowerShellu se proměnná a hodnota odstraní.CurrentUser
Zásady spouštění ovlivňují pouze aktuálního uživatele. Je uložený v konfiguračním souboru CurrentUser .
LocalMachine
Zásady spouštění ovlivňují všechny uživatele v aktuálním počítači. Je uložený v konfiguračním souboru AllUsers .
Správa zásad spouštění pomocí PowerShellu
Pokud chcete získat efektivní zásady spouštění pro aktuální relaci PowerShellu, použijte tuto rutinu Get-ExecutionPolicy
.
Následující příkaz získá efektivní zásadu spuštění:
Get-ExecutionPolicy
Pokud chcete získat všechny zásady spuštění, které ovlivňují aktuální relaci, a zobrazit je v pořadí priority:
Get-ExecutionPolicy -List
Výsledek vypadá podobně jako následující ukázkový výstup:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
V tomto případě platí, že efektivní zásada spouštění je RemoteSigned , protože zásady spouštění pro aktuálního uživatele mají přednost před zásadou spouštění nastavenou pro místní počítač.
Chcete-li získat sadu zásad spouštění pro konkrétní scope, použijte Scope parametr .Get-ExecutionPolicy
Například následující příkaz získá zásadu spuštění pro CurrentUserscope:
Get-ExecutionPolicy -Scope CurrentUser
Změna zásad spouštění
Pokud chcete změnit zásady spouštění PowerShellu na počítači s Windows, použijte tuto rutinu Set-ExecutionPolicy
. Změna je okamžitě efektivní. Nemusíte restartovat PowerShell.
Pokud nastavíte zásady spouštění pro obory LocalMachine nebo CurrentUser, změna se uloží do konfiguračního souboru a zůstane platná, dokud ji znovu nezměníte.
Pokud nastavíte zásadu spouštění pro danou zásadu Processscope, neuloží se do konfiguračního souboru. Zásady spouštění se zachovají, dokud se nezavře aktuální process a všechny podřízené procesy.
Poznámka:
V systému Windows Vista a novějších verzích systému Windows spusťte příkazy, které mění zásady spouštění pro místní počítač, LocalMachinescope, spusťte PowerShell s možností Spustit jako správce .
Změna zásad spouštění:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Příklad:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Nastavení zásad spouštění v konkrétním scope:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Příklad:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Příkaz, který změní zásadu spuštění, může být úspěšný, ale přesto nezmění efektivní zásadu spuštění.
Například příkaz, který nastaví zásady spouštění pro místní počítač, může být úspěšný, ale bude přepsán zásadami spuštění pro aktuálního uživatele.
Odebrání zásad spouštění
Chcete-li odebrat zásady provádění pro konkrétní scope, nastavte zásadu spuštění na Undefined.
Pokud chcete například odebrat zásady spouštění pro všechny uživatele místního počítače:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Odebrání zásad spuštění pro Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Pokud žádné zásady spouštění nejsou nastaveny scope, efektivní zásada spuštění je Restricted, což je default pro klienty Systému Windows.
Nastavení různých zásad pro jednu relaci
Parametr ExecutionPolicy pwsh.exe
můžete použít k nastavení zásad spouštění pro novou relaci PowerShellu. Zásady ovlivňují pouze aktuální relace a podřízené relace.
Pokud chcete nastavit zásady spouštění pro novou relaci, spusťte PowerShell na příkazovém řádku, například cmd.exe
z PowerShellu nebo z PowerShellu, a pak pomocí parametru pwsh.exe
ExecutionPolicy nastavte zásady spouštění.
Příklad:
pwsh.exe -ExecutionPolicy AllSigned
Zásady spouštění, které jste nastavili, nejsou uložené v konfiguračním souboru. Místo toho je uložená v $env:PSExecutionPolicyPreference
proměnné prostředí. Proměnná se odstraní, když zavřete relaci, ve které je zásada nastavená. Zásadu nelze změnit úpravou hodnoty proměnné.
Během relace má přednost zásada spouštění nastavená pro relaci před zásadou spuštění, která je nastavena v konfiguračním souboru místního počítače nebo aktuálního uživatele. Nemá však přednost před zásadou spouštění nastavenou pomocí zásad skupiny.
Použití zásad skupiny ke správě zásad spouštění
Ke správě zásad spouštění počítačů v podniku můžete použít nastavení zásad skupiny Zapnout spouštění skriptů. Nastavení zásad skupiny přepíše zásady spouštění nastavené v PowerShellu ve všech oborech.
Nastavení zásad Zapnout spouštění skriptů je následující:
Pokud zakážete Zapnout spouštění skriptů, skripty se nespustí. To odpovídá zásadám Restricted provádění.
Pokud povolíte Zapnout spouštění skriptů, můžete vybrat zásadu spouštění. Nastavení Zásady skupiny jsou ekvivalentní následujícímu nastavení zásad spouštění:
Zásady skupiny Zásady spouštění Povolit všechny skripty Unrestricted Povolit místní skripty a vzdálené podepsané skripty RemoteSigned Povolit pouze podepsané skripty AllSigned: Pokud není možnost Zapnout spouštění skriptů nakonfigurovaná, nemá to žádný vliv. Platí zásady spouštění nastavené v PowerShellu.
Soubory PowerShellExecutionPolicy.adm a PowerShellExecutionPolicy.admx přidávají zásadu Zapnout spouštění skriptů do uzlů Konfigurace počítače a Konfigurace uživatele v editoru Zásady skupiny v následujících cestách.
Ve Windows XP a Windows Serveru 2003:
Administrative Templates\Windows Components\Windows PowerShell
Ve Windows Vista a novějších verzích Windows:
Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell
Zásady nastavené v uzlu Konfigurace počítače mají přednost před zásadami nastavenými v uzlu Konfigurace uživatele.
Další informace najdete na webu about_Group_Policy_Settings.
Priorita zásad spouštění
Při určování efektivních zásad spouštění pro relaci PowerShell vyhodnotí zásady spouštění v následujícím pořadí priority:
Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser
Správa podepsaných a nepodepsaných skriptů
Programy jako Internet Explorer a Microsoft Edge ve Windows přidávají do stažených souborů alternativní datový stream. Soubor se tak označí jako "pochází z internetu". Pokud je zásada spouštění PowerShellu RemoteSigned, PowerShell nespustí nepodepsané skripty, které se stáhnou z internetu, které zahrnují e-maily a programy pro zasílání rychlých zpráv.
Skript můžete podepsat nebo se rozhodnout spustit nepodepsaný skript beze změny zásad spuštění.
Počínaje PowerShellem 3.0 můžete pomocí parametru Stream rutiny Get-Item
zjistit soubory, které jsou blokované, protože byly staženy z internetu. Unblock-File
Pomocí rutiny odblokujte skripty, abyste je mohli spustit v PowerShellu.
Další informace najdete v tématu about_Signing, Get-Item a Unblock-File.
Poznámka:
Jiné metody stahování souborů nemusí označit soubory jako pocházející z zóny internetu. Mezi některé příklady patří:
curl.exe
Invoke-RestMethod
Invoke-WebRequest
Zásady spouštění ve Windows Serveru Core a Windows Nano Serveru
Při spuštění PowerShellu 6 na Windows Serveru Core nebo Windows Nano Serveru za určitých podmínek můžou zásady spouštění selhat s následující chybou:
AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PowerShell používá rozhraní API v prostředí Windows Desktop Shell (explorer.exe
) k ověření zóny souboru skriptu. Prostředí Windows Shell není k dispozici na Windows Serveru Core a Windows Nano Serveru.
Tato chyba se může zobrazit také v jakémkoli systému Windows, pokud není prostředí Windows Desktop Shell k dispozici nebo nereaguje. Při přihlašování může například spustit přihlašovací skript PowerShellu, než bude připravena plocha Windows, což vede k selhání.
Použití zásad spuštění nebo ByPass AllSigned nevyžaduje kontrolu zóny, která zabraňuje problému.