about_Execution_Policies

Krótki opis

Opisuje zasady wykonywania programu PowerShell i wyjaśnia, jak nimi zarządzać.

Długi opis

Zasady wykonywania programu PowerShell to funkcja bezpieczeństwa, która kontroluje warunki, w których program PowerShell ładuje pliki konfiguracji i uruchamia skrypty. Ta funkcja pomaga zapobiegać wykonywaniu złośliwych skryptów.

Na komputerze Windows można ustawić zasady wykonywania dla komputera lokalnego, dla bieżącego użytkownika lub dla określonej sesji. Można również użyć ustawienia zasady grupy, aby ustawić zasady wykonywania dla komputerów i użytkowników.

Zasady wykonywania dla komputera lokalnego i bieżącego użytkownika są przechowywane w rejestrze. Nie musisz ustawiać zasad wykonywania w profilu programu PowerShell. Zasady wykonywania dla określonej sesji są przechowywane tylko w pamięci i są utracone po zamknięciu sesji.

Zasady wykonywania nie są systemem zabezpieczeń, który ogranicza akcje użytkownika. Na przykład użytkownicy mogą łatwo pominąć zasady, wpisując zawartość skryptu w wierszu polecenia, gdy nie mogą uruchomić skryptu. Zamiast tego zasady wykonywania pomagają użytkownikom w ustawianiu podstawowych reguł i uniemożliwiają im przypadkowe naruszenie.

Zasady wykonywania programu PowerShell

Zasady wykonywania programu PowerShell są następujące:

AllSigned

  • Skrypty można uruchamiać.
  • Wymaga, aby wszystkie skrypty i pliki konfiguracji zostały podpisane przez zaufanego wydawcę, w tym skrypty pisane na komputerze lokalnym.
  • Przed uruchomieniem skryptów od wydawców zostanie wyświetlony monit, który nie został jeszcze sklasyfikowany jako zaufany lub niezaufany.
  • Ryzyko związane z uruchamianiem podpisanych, ale złośliwych skryptów.

Bypass

  • Nic nie jest blokowane i nie ma żadnych ostrzeżeń ani monitów.
  • Te zasady wykonywania są przeznaczone dla konfiguracji, w których skrypt programu PowerShell jest wbudowany w większą aplikację, lub dla konfiguracji, w których program PowerShell jest podstawą programu, który ma własny model zabezpieczeń.

Default

  • Ustawia domyślne zasady wykonywania.
  • Restricted dla Windows klientów.
  • RemoteSigned dla Windows serwerów.

Remotesigned

  • Domyślne zasady wykonywania dla Windows serwera.
  • Skrypty można uruchamiać.
  • Wymaga podpisu cyfrowego zaufanego wydawcy w skryptach i plikach konfiguracji pobieranych z Internetu, co obejmuje programy poczty e-mail i wiadomości błyskawicznych.
  • Nie wymaga podpisów cyfrowych w skryptach, które są zapisywane na komputerze lokalnym i nie są pobierane z Internetu.
  • Uruchamia skrypty, które są pobierane z Internetu i nie są podpisane, jeśli skrypty są odblokowane, Unblock-File na przykład za pomocą polecenia cmdlet .
  • Ryzyko związane z uruchamianiem niepodpisanych skryptów ze źródeł innych niż Internet i podpisanych skryptów, które mogą być złośliwe.

Restricted

  • Domyślne zasady wykonywania dla Windows klienckich.
  • Zezwala na poszczególne polecenia, ale nie zezwala na skrypty.
  • Uniemożliwia uruchamianie wszystkich plików skryptów, w tym plików formatowania i konfiguracji (.ps1xml), plików skryptów modułu (.psm1) i profilów programu PowerShell (.ps1).

Undefined

  • W bieżącym zakresie nie ustawiono żadnych zasad wykonywania.
  • Jeśli zasady wykonywania we wszystkich zakresach Undefined to , Restricted efektywne zasady wykonywania są dla klientów Windows i RemoteSigned dla Windows Server.

Unrestricted

  • Można uruchamiać niepodpisane skrypty. Istnieje ryzyko uruchomienia złośliwych skryptów.
  • Ostrzega użytkownika przed uruchomieniem skryptów i plików konfiguracji, które nie znajdują się w lokalnej strefie intranetowej.

Uwaga

W systemach, które nie odróżniają Universal Naming Convention (UNC) od ścieżek internetowych, skrypty, które są identyfikowane przez ścieżkę UNC, mogą nie być dozwolone do uruchamiania za pomocą zasad wykonywania RemoteSigned .

Zakres zasad wykonywania

Można ustawić zasady wykonywania, które są skuteczne tylko w określonym zakresie.

Prawidłowe wartości to Scope MachinePolicy, UserPolicy, Process, CurrentUser i LocalMachine. LocalMachine jest ustawieniem domyślnym podczas ustawiania zasad wykonywania.

Wartości Scope są wymienione w kolejności pierwszeństwa. Zasady, które mają pierwszeństwo, są obowiązujące w bieżącej sesji, nawet jeśli bardziej restrykcyjne zasady są ustawione na niższym poziomie pierwszeństwa.

Aby uzyskać więcej informacji, zobacz Set-ExecutionPolicy.

MachinePolicy

Ustawiany zasady grupy dla wszystkich użytkowników komputera.

UserPolicy

Ustawiany zasady grupy dla bieżącego użytkownika komputera.

Process

Zakres Process ma wpływ tylko na bieżącą sesję programu PowerShell. Zasady wykonywania są zapisywane w zmiennej środowiskowej $env:PSExecutionPolicyPreference, a nie w rejestrze. Po zamknięciu sesji programu PowerShell zmienna i wartość są usuwane.

Currentuser

Zasady wykonywania dotyczą tylko bieżącego użytkownika. Jest on przechowywany w podkluczu HKEY_CURRENT_USER rejestru.

Localmachine

Zasady wykonywania dotyczą wszystkich użytkowników na bieżącym komputerze. Jest on przechowywany w podkluczu HKEY_LOCAL_MACHINE rejestru.

Zarządzanie zasadami wykonywania za pomocą programu PowerShell

Aby uzyskać obowiązujące zasady wykonywania dla bieżącej sesji programu PowerShell, użyj polecenia Get-ExecutionPolicy cmdlet .

Następujące polecenie pobiera efektywne zasady wykonywania:

Get-ExecutionPolicy

Aby uzyskać wszystkie zasady wykonywania, które mają wpływ na bieżącą sesję, i wyświetlić je w kolejności pierwszeństwa:

Get-ExecutionPolicy -List

Wynik wygląda podobnie do następujących przykładowych danych wyjściowych:

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

W takim przypadku obowiązujące zasady wykonywania to RemoteSigned , ponieważ zasady wykonywania dla bieżącego użytkownika mają pierwszeństwo przed zasadami wykonywania ustawionymi dla komputera lokalnego.

Aby pobrać zasady wykonywania ustawione dla określonego zakresu, użyj parametru Scope .Get-ExecutionPolicy

Na przykład następujące polecenie pobiera zasady wykonywania dla zakresu CurrentUser :

Get-ExecutionPolicy -Scope CurrentUser

Zmienianie zasad wykonywania

Aby zmienić zasady wykonywania programu PowerShell na komputerze Windows, użyj polecenia Set-ExecutionPolicy cmdlet . Zmiana obowiązuje natychmiast. Nie trzeba ponownie uruchamiać programu PowerShell.

Jeśli ustawisz zasady wykonywania dla zakresów LocalMachine lub CurrentUser, zmiana zostanie zapisana w rejestrze i będzie obowiązywać do momentu jej zmiany ponownie.

Jeśli ustawisz zasady wykonywania dla Process zakresu, nie zostaną one zapisane w rejestrze. Zasady wykonywania są zachowywane do momentu zamknięcia bieżącego procesu i wszystkich procesów podrzędnych.

Uwaga

W Windows Vista i nowszych wersjach programu Windows, aby uruchomić polecenia, które zmieniają zasady wykonywania dla komputera lokalnego, zakres LocalMachine, uruchom program PowerShell z opcją Uruchom jako administrator.

Aby zmienić zasady wykonywania:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Na przykład:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Aby ustawić zasady wykonywania w określonym zakresie:

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

Na przykład:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Polecenie zmiany zasad wykonywania może zakończyć się powodzeniem, ale nadal nie może zmienić efektywnych zasad wykonywania.

Na przykład polecenie, które ustawia zasady wykonywania dla komputera lokalnego, może zakończyć się powodzeniem, ale może zostać zastąpione przez zasady wykonywania dla bieżącego użytkownika.

Usuwanie zasad wykonywania

Aby usunąć zasady wykonywania dla określonego zakresu, ustaw zasady wykonywania na wartość Undefined.

Aby na przykład usunąć zasady wykonywania dla wszystkich użytkowników komputera lokalnego:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Aby usunąć zasady wykonywania dla :Scope

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Jeśli żadne zasady wykonywania nie są ustawione w żadnym zakresie, Restricted efektywne zasady wykonywania to , co jest ustawieniem domyślnym dla Windows klienckich.

Ustawianie innych zasad dla jednej sesji

Możesz użyć parametru ExecutionPolicy polecenia powershell.exe , aby ustawić zasady wykonywania dla nowej sesji programu PowerShell. Zasady mają wpływ tylko na bieżącą sesję i sesje podrzędne.

Aby ustawić zasady wykonywania dla nowej sesji, uruchom program PowerShell w wierszu polecenia, cmd.exe takim jak lub z programu PowerShell, a następnie użyj parametru ExecutionPolicy powershell.exe polecenia , aby ustawić zasady wykonywania.

Na przykład:

powershell.exe -ExecutionPolicy AllSigned

Ustawione zasady wykonywania nie są przechowywane w rejestrze. Zamiast tego jest on przechowywany w zmiennej środowiskowej $env:PSExecutionPolicyPreference . Zmienna jest usuwana po zamknięciu sesji, w której ustawiono zasady. Nie można zmienić zasad, edytując wartość zmiennej.

Podczas sesji zasady wykonywania ustawione dla sesji mają pierwszeństwo przed zasadami wykonywania ustawionymi w rejestrze dla komputera lokalnego lub bieżącego użytkownika. Jednak nie ma ona pierwszeństwa przed zasadami wykonywania ustawionymi przy użyciu zasady grupy.

Używanie zasady grupy do zarządzania zasadami wykonywania

Aby zarządzać zasadami wykonywania komputerów w przedsiębiorstwie, można zasady grupy ustawienie Włącz wykonywanie skryptu. Ustawienie zasady grupy zastępuje zasady wykonywania ustawione w programie PowerShell we wszystkich zakresach.

Ustawienia zasad Włącz wykonywanie skryptu są następujące:

  • Jeśli wyłączysz opcję Włącz wykonywanie skryptu, skrypty nie będą uruchamiane. Jest to równoważne zasadom Restricted wykonywania.

  • Jeśli włączysz opcję Włącz wykonywanie skryptu, możesz wybrać zasady wykonywania. Ustawienia zasady grupy są równoważne następującymi ustawieniami zasad wykonywania:

    Zasady grupy Zasady wykonywania
    Zezwalaj na wszystkie skrypty Unrestricted
    Zezwalaj na skrypty lokalne i skrypty podpisane zdalnie Remotesigned
    Zezwalaj tylko na podpisane skrypty AllSigned
  • Jeśli nie skonfigurowano ustawienia Włącz wykonywanie skryptu, nie ma to żadnego efektu. Zasady wykonywania ustawione w programie PowerShell są skuteczne.

Pliki PowerShellExecutionPolicy.adm i PowerShellExecutionPolicy.admx dodają zasady Włącz wykonywanie skryptu do węzłów Konfiguracja komputera i Konfiguracja użytkownika w edytorze zasady grupy w poniższych ścieżkach.

W Windows XP i Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

Dla Windows Vista i nowszych wersji Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

Zasady ustawione w węźle Konfiguracja komputera mają pierwszeństwo przed zasadami ustawionymi w węźle Konfiguracja użytkownika.

Aby uzyskać więcej informacji, zobacz about_Group_Policy_Settings.

Pierwszeństwo zasad wykonywania

Podczas określania efektywnych zasad wykonywania dla sesji program PowerShell ocenia zasady wykonywania w następującej kolejności pierwszeństwa:

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Zarządzanie podpisanymi i niepodpisanych skryptami

W Windows programy takie jak Internet Explorer i Microsoft Edge dodają alternatywny strumień danych do pobranych plików. Oznacza to plik jako "pochodzące z Internetu". Jeśli zasady wykonywania programu PowerShell mają ustawienie RemoteSigned, program PowerShell nie będzie uruchamiać niepodpisanych skryptów pobieranych z Internetu, co obejmuje programy do obsługi wiadomości e-mail i wiadomości błyskawicznych.

Możesz podpisać skrypt lub zdecydować się na uruchomienie niepodpisanych skryptów bez zmiany zasad wykonywania.

Począwszy od programu PowerShell 3.0, Get-Item można użyć stream parametru polecenia cmdlet do wykrywania plików, które są zablokowane, ponieważ zostały pobrane z Internetu. Użyj polecenia Unblock-File cmdlet , aby odblokować skrypty, aby można je było uruchomić w programie PowerShell.

Aby uzyskać więcej informacji, zobacz about_Signing, Get-Item i Unblock-File.

Uwaga

Inne metody pobierania plików mogą nie oznaczać plików jako pochodzących ze strefy internetowej. Oto niektóre przykłady:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Zasady wykonywania na Windows Server Core i Window Nano Server

Jeśli program PowerShell 5.1 jest uruchamiany na serwerze Windows Server Core lub Windows Nano Server w określonych warunkach, zasady wykonywania mogą się nie powieść z następującym błędem:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Program PowerShell używa interfejsów API w Windows Desktop Shell (explorer.exe), aby zweryfikować strefę pliku skryptu. Powłoka Windows nie jest dostępna na Windows Server Core i Windows Nano Server.

Ten błąd można również uzyskać w dowolnym Windows, jeśli Windows Desktop Shell jest niedostępna lub nie odpowiada. Na przykład podczas logowania skrypt logowania programu PowerShell może rozpocząć wykonywanie, zanim program Windows Desktop będzie gotowy, co spowoduje niepowodzenie.

Użycie zasad wykonywania ByPass lub AllSigned nie wymaga sprawdzenia strefy, co pozwala uniknąć problemu.

Zobacz też