about_Execution_Policies

Krótki opis

W tym artykule opisano zasady wykonywania programu PowerShell i wyjaśniono, 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 z systemem 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 zasad 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ą tracone 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 ułatwiają użytkownikom ustawianie podstawowych reguł i uniemożliwia im przypadkowe naruszenie.

Na komputerach z systemem innych niż Windows domyślne zasady wykonywania są Unrestricted i nie można ich zmienić. Polecenie Set-ExecutionPolicy cmdlet jest dostępne, ale program PowerShell wyświetla komunikat konsoli, że nie jest obsługiwany. Chociaż Get-ExecutionPolicy zwracane Unrestricted są na platformach innych niż Windows, zachowanie jest naprawdę zgodneBypass, ponieważ te platformy nie implementują stref Zabezpieczenia Windows.

Zasady wykonywania programu PowerShell

Wymuszanie tych zasad odbywa się tylko na platformach windows. Zasady wykonywania programu PowerShell są następujące:

  • AllSigned

    • Skrypty mogą być uruchamiane.
    • Wymaga podpisania wszystkich skryptów i plików konfiguracji przez zaufanego wydawcę, w tym skryptów zapisywanych na komputerze lokalnym.
    • Monituje cię przed uruchomieniem skryptów od wydawców, których jeszcze nie sklasyfikowano jako zaufanych lub niezaufanych.
    • Ryzyko związane z uruchomionym podpisem, ale złośliwymi skryptami.
  • Bypass

    • Nic nie jest zablokowane 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 konfiguracje, w których program PowerShell jest podstawą programu, który ma własny model zabezpieczeń.
  • Default

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

    • Domyślne zasady wykonywania dla komputerów z systemem Windows Server.
    • Skrypty mogą być uruchamiane.
    • Wymaga podpisu cyfrowego od zaufanego wydawcy na skryptach i plikach konfiguracji pobranych z Internetu, w tym wiadomościach e-mail i programach do obsługi wiadomości błyskawicznych.
    • Nie wymaga podpisów cyfrowych na skryptach napisanych na komputerze lokalnym i nie pobieranych z Internetu.
    • Uruchamia skrypty pobierane z Internetu, a nie podpisane, jeśli skrypty są odblokowane, na przykład za pomocą Unblock-File polecenia cmdlet .
    • Ryzyko uruchamiania 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 komputerów klienckich z systemem Windows.
    • Zezwala na poszczególne polecenia, ale nie zezwala na wykonywanie skryptów.
    • Zapobiega uruchamianiu wszystkich plików skryptów, w tym formatowania i plików 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 to Undefined, obowiązują zasady wykonywania są Restricted przeznaczone dla klientów systemu Windows i RemoteSigned dla systemu Windows Server.
  • Unrestricted

    • Domyślne zasady wykonywania dla komputerów z systemem innych niż Windows i nie można ich zmienić.
    • Skrypty niepodpisane mogą być uruchamiane. Istnieje ryzyko uruchomienia złośliwych skryptów.
    • Ostrzega użytkownika przed uruchomieniem skryptów i plików konfiguracji, które nie pochodzą z lokalnej strefy intranetu.

    Uwaga

    W systemach, które nie rozróżniają ścieżek unc (Universal Naming Convention) ze ścieżek internetowych, skrypty identyfikowane przez ścieżkę UNC mogą nie być dozwolone do uruchamiania z zasadami 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 , UserPolicy, Process, CurrentUser i LocalMachine. MachinePolicy 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, obowiązują w bieżącej sesji, nawet jeśli bardziej restrykcyjne zasady zostały ustawione na niższym poziomie pierwszeństwa.

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

  • MachinePolicy

    Ustaw według zasad grupy dla wszystkich użytkowników komputera.

  • Zasady użytkownika

    Ustaw według zasad 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ść zostaną usunięte.

  • CurrentUser

    Zasady wykonywania mają wpływ tylko na bieżącego użytkownika. Jest on przechowywany w podkluczu rejestru HKEY_CURRENT_USER .

  • Localmachine

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

Zarządzanie zasadami wykonywania za pomocą programu PowerShell

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

Następujące polecenie pobiera obowiązujące 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 uzyskać zestaw zasad wykonywania dla określonego zakresu, użyj parametru ScopeGet-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 z systemem Windows, użyj Set-ExecutionPolicy polecenia cmdlet . Zmiana jest skuteczna natychmiast. Nie musisz ponownie uruchamiać programu PowerShell.

Jeśli ustawisz zasady wykonywania dla zakresów LocalMachine lub CurrentUser, zmiana zostanie zapisana w rejestrze i pozostanie obowiązująca do momentu ponownej zmiany.

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

Uwaga

W systemie Windows Vista i nowszych wersjach systemu Windows, aby uruchomić polecenia, które zmieniają zasady wykonywania 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 zmienia obowiązujących zasad wykonywania.

Na przykład polecenie, które ustawia zasady wykonywania dla komputera lokalnego może zakończyć się powodzeniem, ale 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 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 elementu Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Jeśli żadne zasady wykonywania nie są ustawione w żadnym zakresie, obowiązująca zasada wykonywania to Restricted, która jest domyślna dla klientów systemu Windows.

Ustawianie innych zasad dla jednej sesji

Możesz użyć parametru ExecutionPolicy polecenia , pwsh.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, takim jak cmd.exe lub z programu PowerShell, a następnie użyj parametru ExecutionPolicy polecenia pwsh.exe , aby ustawić zasady wykonywania.

Na przykład:

pwsh.exe -ExecutionPolicy AllSigned

Ustawione zasady wykonywania nie są przechowywane w rejestrze. Zamiast tego jest on przechowywany w zmiennej środowiskowej $env:PSExecutionPolicyPreference . Zmienna zostanie usunięta 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. Nie ma jednak pierwszeństwa przed zasadami wykonywania ustawionymi przy użyciu zasad grupy.

Zarządzanie zasadami wykonywania przy użyciu zasad grupy

Możesz użyć ustawienia Włącz zasady grupy wykonywania skryptów, aby zarządzać zasadami wykonywania dla komputerów w przedsiębiorstwie. Ustawienie zasad grupy zastępuje zasady wykonywania ustawione w programie PowerShell we wszystkich zakresach.

Ustawienia zasad Włącz wykonywanie skryptów są następujące:

  • Jeśli wyłączysz opcję Włącz wykonywanie skryptów, skrypty nie będą uruchamiane. Jest to odpowiednik Restricted zasad wykonywania.

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

    Zasady grupy Zasady wykonywania
    Zezwalaj na wszystkie skrypty Unrestricted
    Zezwalaj na skrypty lokalne i podpisane skrypty zdalne RemoteSigned
    Zezwalaj tylko na podpisane skrypty AllSigned
  • Jeśli nie skonfigurowano ustawienia Włącz wykonywanie skryptów, nie ma to żadnego wpływu. Obowiązują zasady wykonywania ustawione w programie PowerShell.

Pliki PowerShellExecutionPolicy.adm i PowerShellExecutionPolicy.admx dodają zasady Włącz wykonywanie skryptów do węzłów Konfiguracja komputera i Konfiguracja użytkownika w edytorze zasad grupy w następujących ścieżkach.

W systemach Windows XP i Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

W systemie Windows Vista i nowszych wersjach systemu 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 obowiązujących 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: LocalMachine
Execution Policy: CurrentUser

Zarządzanie podpisanymi i niepodpisanym skryptami

W systemie Windows programy, takie jak Internet Explorer i Microsoft Edge, dodają alternatywny strumień danych do pobranych plików. Oznacza to plik jako "pochodzący z Internetu". Jeśli zasady wykonywania programu PowerShell są remoteSigned, program PowerShell nie będzie uruchamiał niepodpisanych skryptów pobranych z Internetu, które obejmują programy do obsługi wiadomości e-mail i wiadomości błyskawicznych.

Możesz podpisać skrypt lub wybrać uruchamianie niepodpisanego skryptu bez zmiany zasad wykonywania.

Począwszy od programu PowerShell 3.0, można użyć parametru Get-Item stream polecenia cmdlet do wykrywania plików zablokowanych, ponieważ zostały pobrane z Internetu. Unblock-File Użyj polecenia cmdlet , aby odblokować skrypty, aby można było je 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. Przykłady obejmują:

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

Zasady wykonywania w systemach Windows Server Core i Windows Nano Server

Gdy program PowerShell 6 jest uruchamiany w systemie Windows Server Core lub Windows Nano Server w określonych warunkach, zasady wykonywania mogą zakończyć się niepowodzeniem z powodu następującego błędu:

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 powłoce pulpitu systemu Windows (explorer.exe), aby zweryfikować strefę pliku skryptu. Powłoka systemu Windows nie jest dostępna w systemach Windows Server Core i Windows Nano Server.

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

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

Zobacz też