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í uživatel jsou uloženy v registru. 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é mohou například snadno obejít zásadu zadáním obsahu 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 s jiným systémem než Windows je Unrestricted výchozí 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í výchozí zásady spouštění.
    • Restricted pro klienty Windows.
    • RemoteSigned pro servery s Windows
  • RemoteSigned

    • Výchozí zásady spouštění pro počítače se systémem Windows Server.
    • 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

    • Výchozí zásady 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 oboru nejsou nastavené žádné zásady spouš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

    • Výchozí zásady 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 .

Rozsah zásad spouštění

Můžete nastavit zásadu spouštění, která je platná pouze v konkrétním oboru.

Platné hodnoty jsou Scope , UserPolicy, Process, CurrentUser a LocalMachine. MachinePolicy LocalMachine je výchozí nastavení 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

    Obor Process má vliv jenom na aktuální relaci PowerShellu. Zásady spouštění se ukládají do proměnné $env:PSExecutionPolicyPreferenceprostředí , nikoli do registru. 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 podklíči registru HKEY_CURRENT_USER .

  • LocalMachine

    Zásady spouštění ovlivňují všechny uživatele v aktuálním počítači. Je uložený v podklíči registru HKEY_LOCAL_MACHINE .

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 určitý obor, použijte Scope parametr .Get-ExecutionPolicy

Například následující příkaz získá zásadu spuštění pro obor CurrentUser :

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ží v registru a zůstane platná, dokud ji znovu nezměníte.

Pokud nastavíte zásadu Process spouštění pro obor, neuloží se do registru. Zásady spouštění se uchovávají, dokud se nezavře aktuální proces 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č, obor LocalMachine , 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 určitém oboru:

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 spuštění pro určitý obor, 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 není v žádném oboru nastavená žádná zásada spouštění, je platná zásada Restrictedspuštění , což je výchozí hodnota pro klienty Windows.

Nastavení různých zásad pro jednu relaci

Parametr ExecutionPolicypwsh.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.exeExecutionPolicy nastavte zásady spouštění.

Příklad:

pwsh.exe -ExecutionPolicy AllSigned

Zásady spouštění, které nastavíte, nejsou uložené v registru. 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 spuštění nastavená pro relaci před zásadou spuštění, která je nastavena v registru pro místní počítač 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í na 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í ByPass nebo AllSigned nevyžaduje kontrolu zóny, která zabraňuje problému.

Viz také