PowerShell: Jak deaktivovat PowerShell Execution Policy
Při práci s PowerShell skripty asi velmi brzo narazíte na politiku spouštění skriptů, tedy PowerShell Execution Policy. S pomocí Execution Policy můžete definovat jaké typy skriptů je možné spouštět a především tím podstatně ovlivnit bezpečnost celého operačního systému.
Co je PowerShell Execution Policy
PowerShell Execution Policy je systém pro konfiguraci spouštěcích politik v PowerShellu. Díky Execution Policy můžete podstatně ovlivnit bezpečnost celého operačního systému. Jak? Execution Policy definují, zda je vyžadováno pro spouštění skriptů, aby byly digitálně podepsány. Standardně jsou klientské systémy Windows nastaveny v režimu Restricted. To znamená, že je možné spouštět jednotlivé příkazy PowerShellu ručně, nikoli však skripty, nebo jiné hromadné operace.
Typy Execution Policy
Execution Policy má následující možnosti:
AllSigned. Požaduje, aby všechny skripty a konfigurační soubory byly podepsány důvěryhodným vydavatelem. Týká se to i skriptů napsaných přímo v daném stroji (nebyly staženy z internetu).
Bypass. Plně deaktivovaná ochrana, nic se nekontroluje, neblokuje. Nezobrazují se žádná varování, či dotazy.
Default. Resetuje politiku spouštění do výchozího stavu. V klientských systémech Windows definuje politiku Restricted, v serverových systémech Windows Server definuje politiku RemoteSigned.
RemoteSigned. Požaduje, aby všechny skripty a konfigurační soubory stažené z internetu byly podepsány důvěryhodným vydavatelem. Toto je výchozí (Default) politika spouštění pro systémy Windows Server.
Restricted. Blokuje spuštění skriptů nebo načtení konfiguračních souborů. Toto je výchozí spouštěcí politika pro počítače s klientskými systémy Windows (Windows 10).
Undefined . Systém bez definice spouštěcí politiky. Tento stav nastane, pokud není v Group Policy definována politika spouštění pro tento stroj. Efektivní (skutečná) spouštěcí politika pro daný stroj je Restricted.
Unrestricted. Spustí jakýkoli skript nebo konfigurační soubor. Pokud se pokusíte spustit nepodepsaný skript stažený z internetu, budete požádáni o svolení jej spustit.
Pro uživatele je tedy v ideálním případě vhodné nastavit politiku AllSigned. Pro správce, z důvodu testování a vývoje je nutná politika RemoteSigned, nebo Unrestricted.
Typy Scope
Politiky spouštění je možné definovat pro určité oblasti (scope):
MachinePolicy. Nastavení aplikované skrze Group Policy na počítač (pro všechny uživatele).
UserPolicy. Nastavení aplikované skrze Group Policy na konkrétního uživatele v počítači.
Process. Nastavení aplikované pouze pro aktuálně běžící session PowerShellu.
CurrentUser. Nastavení aplikované na konkrétního uživatele v počítači.
LocalMachine. Výchozí scope pro všechny uživatele v počítači.
Jaká politika je nastavena v aktuálně běžící session PowerShellu můžete zjistit v proměnné $env:PSExecutionPolicyPreference.
Výpis aktuální konfigurace Execution Policy
Aktuální konfiguraci PowerShell Execution Policy zjistíte s pomocí commandletu Get-ExecutionPolicy dle následujícího příkladu:
Get-ExecutionPolicy -List
Jak vypnout Execution Policy na uživatele
Execution Policy na uživatele můžete vypnout s pomocí následujícího příkazu:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
Jak vypnout Execution Policy na počítač
Execution Policy na počítač můžete vypnout s pomocí následujícího příkazu:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
Jak deaktivovat Execution Policy pouze při spuštění skriptu
Velice užitečnou možností vypnout PS Execution Policy pouze pro okamžik spuštění skriptu je možné provést s pomocí následujícího příkazu:
powershell.exe -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1"
Tento příkaz používám ve všech mých skriptech jako pomocný CMD skript. Mám tedy hlavní skript skript.ps1 a k němu pomocný CMD skript skript.cmd. Daný PS skript pak vždy spouštím s pomocí CMD skriptu. Pro lepší představu se můžete podívat například do mého repozitáře na GitHubu.
Odkazy
- Set-ExecutionPolicy (anglicky)