Set-ExecutionPolicy

Zmienia politykę wykonywania skryptów PowerShell.

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] [-Scope ] [-Force]

  • -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-odczytu MachinePolicy i UserPolicy (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 zakresie LocalMachine (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 jest Set, 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.