Sdílet prostřednictvím


o_Prováděcích_Politikách

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é 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 výchozí zásada spouštění Unrestricted a nelze ji změnit. Cmdlet Set-ExecutionPolicy je dostupný, ale PowerShell zobrazí konzolovou zprávu, že není podporován. I když Get-ExecutionPolicy vrací Unrestricted na jiných platformách než Windows, chování skutečně odpovídá Bypass, protože tyto platformy neimplementují zóny zabezpečení systému Windows.

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.
    • Než spustíte skripty od vydavatelů, které jste ještě nekategorizovali jako důvěryhodné nebo nedůvěryhodné, zobrazí se výzva.
    • Rizika spojená se spuštěním podepsaných, ale škodlivých skriptů.
  • 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í.
    • remoteSigned pro klienty a servery Windows.
  • RemoteSigned

    • Výchozí zásady spouštění pro počítače 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

    • Povoluje jednotlivé příkazy, ale neumožňuje skripty.
    • Zabraňuje spuštění všech souborů skriptů, 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 zásady spouštění ve všech oborech Undefined, pak efektivní zásady spouštění jsou 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.
    • 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í s RemoteSigned zásady provádění.

Rozsah zásad provádění

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

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

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.

  • Uživatelská politika

    Nastaveno zásadou 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í jsou uloženy v proměnné prostředí $Env:PSExecutionPolicyPreferencemísto konfiguračního souboru. Po zavření relace PowerShellu se proměnná a hodnota odstraní.

  • Aktuální uživatel

    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 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ě je efektivní zásada spuštění RemoteSigned, protože zásady spouštění pro aktuálního uživatele mají přednost před zásadou spuštění nastavenou pro místní počítač.

Chcete-li získat nastavení zásad provádění pro určitý rozsah, použijte parametr Scope u Get-ExecutionPolicy.

Například následující příkaz načte zásadu provádě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 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 obor Process, neuloží se do konfiguračního souboru. Zásady spouštění se uchovávají, dokud nezavřete 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 pro spuštění příkazů, které mění zásady spouštění pro místní počítač, v rozsahu LocalMachine spusťte PowerShell s možností Spustit jako správce.

Chcete-li změnit zásady spouštění:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Například:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Nastavení politiky provádění v určitém oboru:

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

Napří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ý, avšak bude přepsán zásadami spouštění pro aktuálního uživatele.

Odeberte zásady spouštění

Chcete-li odebrat zásady provádění pro určitý obor, nastavte zásady provádě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 provádění pro Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

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

Nastavte jinou zásadu pro jednu relaci

Pomocí parametru ExecutionPolicypwsh.exe můžete nastavit zásady 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 nebo z PowerShellu, a pak pomocí parametru ExecutionPolicypwsh.exe nastavte zásady spouštění.

Například:

pwsh.exe -ExecutionPolicy AllSigned

Zásady spouštění, které jste nastavili, nejsou uložené v konfiguračním souboru. Místo toho se uloží do proměnné prostředí $Env:PSExecutionPolicyPreference. Proměnná se odstraní, když zavřete relaci, ve které je politika nastavena. 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ásady spouštění skriptů počítačů ve vaší firmě 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ů jsou následující:

  • Pokud zakážete Spuštění skriptů, skripty se nespustí. To odpovídá zásadám spouštění Restricted.

  • Pokud povolíte funkci Spuštění skriptů, můžete vybrat zásady spuštění. Nastavení zásad skupiny odpovídá 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 Zapnout spuštění skriptu není nakonfigurováno, nemá to žádný vliv. Zásady spouštění nastavené v PowerShellu jsou účinné.

Soubory PowerShellExecutionPolicy.adm a PowerShellExecutionPolicy.admx přidávají zásady Zapnout spouštění skriptů do uzlů Konfigurace počítače a Konfigurace uživatele v Editoru zásad skupiny v následující cestě:

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 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 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 stahují z internetu, které zahrnují programy pro zasílání e-mailů a 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. Pomocí rutiny Unblock-File odblokujte skripty, abyste je mohli spustit v PowerShellu.

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

Poznámka

Jiné metody stahování souborů nemusí označit soubory jako pocházející z zóny internetu. Mezi 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í se může například začít vykonávat přihlašovací skript PowerShellu ještě předtím, než bude plocha Windows připravena, což může vést k selhání.

Použití zásad provádění ByPass nebo AllSigned nevyžaduje kontrolu zóny, což se vyhýbá problému.

Viz také