Set-ExecutionPolicy to polecenie PowerShell, które zmienia politykę wykonywania skryptów (execution policy) na Windowsie. Mówiąc wprost: decyduje, czy w ogóle pozwolisz odpalać pliki .ps1, a jeśli tak, to czy muszą być podpisane cyfrowo. To nie jest mechanizm bezpieczeństwa w sensie sandboxa (każdy obejdzie go jednym przełącznikiem), tylko bezpiecznik chroniący przed przypadkowym uruchomieniem losowego skryptu pobranego z internetu. Klasyk: świeży skrypt, dwuklik, „nie można załadować pliku, ponieważ wykonywanie skryptów jest wyłączone w tym systemie” — i właśnie tu wchodzi Set-ExecutionPolicy.
Składnia i najważniejsze opcje
Podstawowa forma wygląda tak:
Set-ExecutionPolicy [-ExecutionPolicy]
-ExecutionPolicy— docelowa polityka. Wartości:Restricted(zero skryptów),AllSigned(tylko podpisane),RemoteSigned(lokalne wolno, pobrane muszą być podpisane),Unrestricted,Bypass(nic nie blokuje, nic nie pyta),Undefined.-Scope— gdzie obowiązuje:CurrentUser,LocalMachine(domyślny, wymaga admina),Process(tylko bieżąca sesja), oraz tylko-do-odczytuMachinePolicyiUserPolicy(ustawiane przez Group Policy).-Force— pomija pytania o potwierdzenie. Przydatne w skryptach automatyzacji.-WhatIf— pokazuje, co by się stało, bez wprowadzania zmiany. Dobry nawyk przed ruchem na produkcji.-Confirm— wymusza prośbę o potwierdzenie przed wykonaniem.
Przykłady użycia
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser— najczęstszy, rozsądny wybór: pozwala odpalać własne skrypty, a pobrane wymaga podpisanych. Nie potrzebuje uprawnień admina.Set-ExecutionPolicy RemoteSigned— to samo, ale w domyślnym zakresieLocalMachine(dla wszystkich użytkowników) — uruchom PowerShell jako administrator.Set-ExecutionPolicy Bypass -Scope Process -Force— luzuje politykę tylko na czas bieżącej sesji, bez śladu po zamknięciu okna. Idealne, gdy chcesz coś odpalić raz, nie grzebiąc w ustawieniach systemu.Set-ExecutionPolicy Undefined -Scope CurrentUser— kasuje ustawienie w danym zakresie i wraca do dziedziczenia z wyższego poziomu.Get-ExecutionPolicy -List— to nie jestSet, ale obowiązkowy towarzysz: pokazuje politykę dla każdego zakresu naraz, żebyś wiedział, co realnie obowiązuje.
Częste błędy i pułapki
Najpopularniejsza wpadka: ustawiasz LocalMachine bez praw administratora i dostajesz access denied. Wtedy użyj -Scope CurrentUser — nie wymaga admina i wystarcza w 90% przypadków.
Druga pułapka to precedencja zakresów. Polityka z Group Policy (MachinePolicy/UserPolicy) zawsze wygrywa z tym, co ustawisz lokalnie — możesz wpisywać RemoteSigned w kółko, a i tak będzie obowiązywać reguła z domeny. Sprawdzaj efektywny stan przez Get-ExecutionPolicy -List, a nie samo Get-ExecutionPolicy.
I rzecz najważniejsza: Bypass oraz Unrestricted w zakresie LocalMachine to proszenie się o kłopoty — wyłączasz bezpiecznik dla całej maszyny na stałe. Domyślnie Windows klient ma Restricted, a Windows Server RemoteSigned. Trzymaj się RemoteSigned i nie kombinuj „na chwilę”, bo to „na chwilę” zwykle zostaje na lata.
Powiązane komendy: Get-ExecutionPolicy, Get-AuthenticodeSignature, Set-AuthenticodeSignature, Unblock-File, Get-Help about_Execution_Policies.