Sdílet prostřednictvím


about_Execution_Policies

Stručný 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 spouš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 určitou relaci. K nastavení zásad spouštění pro počítače a uživatele můžete použít také nastavení Zásady skupiny.

Zásady spouštění pro místní počítač a aktuálního uživatele jsou uložené v registru. Ve svém profilu PowerShellu nemusíte nastavovat zásady spouštění. Zásady spouštění pro určitou relaci jsou uloženy pouze v paměti a při zavření relace se ztratí.

Zásady spouštění nejsou bezpečnostní systém, který omezuje akce uživatelů. Uživatelé můžou například snadno obejít zásady zadáním obsahu skriptu na příkazový řádek, když nemůžou spustit skript. Místo toho zásady spouštění pomáhají uživatelům nastavit základní pravidla a brání jim v jejich nechtěném porušení.

Na počítačích s jiným systémem než Windows jsou Unrestricted výchozí zásady spouštění a nelze je změnit. Rutina Set-ExecutionPolicy je dostupná, ale PowerShell zobrazí zprávu konzoly, že se nepodporuje. Zatímco Get-ExecutionPolicy se vrací Unrestricted na jiných platformách než Windows, chování ve skutečnosti odpovídáBypass, 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 dají spustit.
    • Vyžaduje, aby všechny skripty a konfigurační soubory byly podepsány důvěryhodným vydavatelem, včetně skriptů, které píšete v místním počítači.
    • Zobrazí výzvu před spuštěním skriptů od vydavatelů, které jste dosud klasifikovali jako důvěryhodné nebo nedůvěryhodné.
    • Riskuje spuštění podepsaných, ale škodlivých skriptů.
  • Bypass

    • Nic není blokováno 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 Windows.
  • RemoteSigned

    • Výchozí zásady spouštění pro počítače se systémem Windows Server.
    • Skripty se dají spustit.
    • Vyžaduje digitální podpis od důvěryhodného vydavatele pro skripty a konfigurační soubory, které se stahují z internetu, včetně e-mailových programů a programů pro zasílání rychlých zpráv.
    • Nevyžaduje digitální podpisy ve skriptech, které jsou napsané v místním počítači a nejsou staženy z internetu.
    • Spustí skripty, které jsou staženy z internetu a nejsou podepsané, pokud jsou skripty odblokované, například pomocí rutiny Unblock-File .
    • Riskuje spouš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 nepovoluje skripty.
    • Zabrání spuštění všech souborů skriptu, včetně formátovacích 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 je Undefinedzásada spouštění ve všech oborech , platná zásada spouštění platí Restricted 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.
    • Je možné 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 ze zóny místního intranetu.

    Poznámka

    V systémech, které nerozlišují cesty UNC (Universal Naming Convention) od internetových cest, nemusí být skriptům identifikovaným cestou UNC povoleno spouštění pomocí zásad spouštění RemoteSigned .

Obor zásad spouštění

Můžete nastavit zásadu spouštění, která platí jenom v určitém oboru.

Platné hodnoty pro Scope jsou MachinePolicy, UserPolicy, Process, CurrentUser a LocalMachine. LocalMachine je výchozí při nastavování zásad spouštění.

Hodnoty Scope jsou uvedeny v pořadí priorit. Zásada, která má přednost, je účinná v aktuální relaci, i když byla nastavena přísnější zásada na nižší úrovni priority.

Další informace najdete v tématu Set-ExecutionPolicy.

  • MachinePolicy

    Nastaví Zásady skupiny pro všechny uživatele počítače.

  • Zásady uživatele

    Nastaveno Zásady 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í mají vliv jenom na aktuálního uživatele. Je uložený v podklíči registru HKEY_CURRENT_USER .

  • LocalMachine

    Zásady spouštění mají vliv na 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 rutinu Get-ExecutionPolicy .

Následující příkaz získá efektivní zásady spouštění:

Get-ExecutionPolicy

Pokud chcete získat všechny zásady spouštění, které mají vliv na aktuální relaci, a zobrazit je v pořadí priorit:

Get-ExecutionPolicy -List

Výsledek vypadá podobně jako v následujícím ukázkovém výstupu:

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

V tomto případě je efektivní zásada spouštění RemoteSigned , protože zásady spouštění pro aktuálního uživatele mají přednost před zásadami spouštění nastavenými pro místní počítač.

Pokud chcete získat zásady spouštění nastavené pro konkrétní obor, použijte Scope parametr Get-ExecutionPolicy.

Například následující příkaz získá zásady spouš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 rutinu Set-ExecutionPolicy . Změna je účinná okamžitě. Nemusíte restartovat PowerShell.

Pokud nastavíte zásady spouštění pro obory LocalMachine nebo CurrentUser, změna se uloží do registru a zůstane platná, dokud ji znovu nezměníte.

Pokud nastavíte zásady spouštění pro obor Process , neuloží se do registru. Zásady spouštění se zachovají až do uzavření aktuálního procesu a všech podřízených procesů.

Poznámka

Pokud chcete v systému Windows Vista a novějších verzích systému Windows spouštět příkazy, které mění zásady spouštění pro místní počítač v oboru 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 konkrétním oboru:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Příklad:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Příkaz ke změně zásad spouštění může být úspěšný, ale stále nemění efektivní zásady spouš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 může být přepsán zásadami spouštění pro aktuálního uživatele.

Odebrání zásad spouštění

Pokud chcete odebrat zásady spouštění pro konkrétní obor, nastavte zásady spouš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 spouštění pro :Scope

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Pokud nejsou v žádném oboru nastaveny žádné zásady spouštění, efektivní zásada spouštění je Restricted, což je výchozí nastavení pro klienty Windows.

Nastavení jiných zásad pro jednu relaci

K nastavení zásad spouštění pro novou relaci PowerShellu můžete použít parametr pwsh.exeExecutionPolicy z . Zásady mají vliv jenom na aktuální relaci a podřízené relace.

Pokud chcete nastavit zásady spouštění pro novou relaci, spusťte PowerShell z příkazového řádku, například cmd.exe 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 nemůžete změnit úpravou hodnoty proměnné.

Během relace má zásada spouštění nastavená pro relaci přednost před zásadami spouštění, které jsou nastaveny v registru pro místní počítač nebo aktuálního uživatele. Nemá ale přednost před zásadami spouštění nastavenými pomocí Zásady skupiny.

Použití zásad skupiny ke správě zásad spouštění

Pomocí nastavení Zapnout spouštění skriptů Zásady skupiny můžete spravovat zásady spouštění počítačů v podniku. 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í. Jedná se o Restricted ekvivalent zásady spouště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 naleznete v tématu 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 vyhodnocuje zásady spouštění v následujícím pořadí priorit:

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í ke staženým souborům alternativní datový stream. Tím se soubor označí jako "pocházející z internetu". Pokud jsou zásady spouštění PowerShellu nastavené na RemoteSigned, PowerShell nespustí nepodepsané skripty, které se stahují z internetu, což zahrnuje 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 spouštění.

Od PowerShellu 3.0 můžete pomocí parametruGet-Item Stream rutiny zjistit soubory, které jsou blokované, protože byly staženy z internetu. Pomocí rutiny Unblock-File odblokujte skripty, abyste je mohli spustit v PowerShellu.

Další informace najdete v tématech about_Signing, Get-Item a Unblock-File.

Poznámka

Jiné metody stahování souborů nemusí označit soubory jako pocházející ze zóny Internetu. Možné příklady:

  • 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 desktopovém prostředí Windows (explorer.exe) k ověření zóny souboru skriptu. Prostředí systému Windows není k dispozici v systémech Windows Server Core a Windows Nano Server.

Tato chyba se může zobrazit také v jakémkoli systému Windows, pokud je desktopové prostředí Windows nedostupné nebo nereaguje. Například při přihlašování se může spustit přihlašovací skript PowerShellu dříve, než bude plocha Windows připravená, což může mít za následek selhání.

Použití zásad spouštění ByPass nebo AllSigned nevyžaduje kontrolu zóny, která zabrání problému.

Viz také