Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 plikach konfiguracji programu PowerShell. Nie musisz ustawiać zasad wykonywania w profilu programu PowerShell. Polityka wykonywania dla określonej sesji jest przechowywana tylko w pamięci i jest tracona po zamknięciu sesji.
Zasady wykonywania nie są granicą zabezpieczeń, są w głębi systemu ochrony. 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.
Aby uzyskać więcej informacji na temat granic zabezpieczeń, zobacz sekcję Kryteria usługi zabezpieczeńfunkcji zabezpieczeń programu PowerShell.
Na komputerach innych niż Windows domyślne zasady wykonywania są Unrestricted i nie można ich zmienić. Polecenie cmdlet Set-ExecutionPolicy jest dostępne, ale program PowerShell wyświetla komunikat konsoli, że nie jest obsługiwany. Chociaż Get-ExecutionPolicy funkcja jest zwracana Unrestricted na platformach innych niż Windows, zachowanie jest naprawdę zgodneBypass, ponieważ te platformy nie implementują stref Zabezpieczenia systemu 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 uruchomienia podpisanych, ale złośliwych skryptów.
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.
- remoteSigned dla klientów i serwerów z systemem Windows.
RemoteSigned- Domyślne zasady wykonywania dla komputerów z systemem Windows.
- 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ą polecenia cmdlet
Unblock-File. - Ryzyko uruchamiania niepodpisanych skryptów ze źródeł innych niż Internet i podpisanych skryptów, które mogą być złośliwe.
Restricted- Zezwala na poszczególne polecenia, ale nie zezwala na wykonywanie skryptów.
- Zapobiega uruchamianiu 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 są Undefined, obowiązujące zasady wykonywania są Restricted dla klientów systemu Windows i RemoteSigned dla systemu Windows Server.
Unrestricted- Domyślne zasady wykonywania dla komputerów 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.
Notatka
W systemach, które nie rozróżniają ścieżek uniwersalnej konwencji nazewnictwa (UNC) ze ścieżek internetowych, skrypty identyfikowane przez ścieżkę UNC mogą nie być dozwolone do uruchamiania z zasadami wykonywania RemoteSigned .
Zakres i pierwszeństwo zasad wykonywania
Można ustawić zasady wykonywania, które są skuteczne tylko w określonym zakresie. Parametr akceptuje następujące wartości:
-
MachinePolicy— ustawiana przez zasady grupy dla wszystkich użytkowników komputera -
UserPolicy— ustawiana przez zasady grupy dla bieżącego użytkownika komputera -
Process— wpływa tylko na bieżącą sesję programu PowerShell -
CurrentUser— dotyczy tylko bieżącego użytkownika -
LocalMachine— Default zakres, który ma wpływ na wszystkich użytkowników komputera
Notatka
MachinePolicy i UserPolicy są ustawiane przez zasady grupy. Jeśli spróbujesz ustawić zakres na jedną z tych wartości, program PowerShell wyświetli komunikat o błędzie, że zakres został ustawiony przez zasady grupy i nie można go zmienić.
Jeśli zasady wykonywania nie są zdefiniowane przez zasady grupy, obowiązujące zasady wykonywania są określane według kolejności pierwszeństwa w następujący sposób:
-
Process- Najwyższy priorytet. ZakresProcessdotyczy tylko bieżącej sesji programu PowerShell. Zasady wykonywania są zapisywane w zmiennej$Env:PSExecutionPolicyPreferenceśrodowiskowej , a nie w rejestrze. Po zamknięciu sesji programu PowerShell zmienna i wartość zostaną usunięte. -
CurrentUser- Drugi najwyższy priorytet. Ustawienie jest przechowywane w pliku specyficznym dlapowershell.config.jsonużytkownika. -
LocalMachine- Najniższy priorytet. To ustawienie jest przechowywane w$PSHOME/powershell.config.jsonpliku.
Aby uzyskać więcej informacji na temat powershell.config.json pliku, zobacz about_PowerShell_Config.
Zarządzanie zasadami wykonywania za pomocą programu PowerShell
Aby uzyskać obowiązujące zasady wykonywania dla bieżącej sesji programu PowerShell, użyj polecenia cmdlet Get-ExecutionPolicy.
Następujące polecenie pobiera obowiązujące zasady wykonywania:
Get-ExecutionPolicy
Aby uzyskać wszystkie polityki wykonawcze, które wpływają na bieżącą sesję, i wyświetlić je w kolejności ich znaczenia:
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 tym przypadku obowiązujące zasady wykonywania są 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 uzyskuje politykę wykonywania dla zakresu CurrentUser:
Get-ExecutionPolicy -Scope CurrentUser
Zmienianie zasad wykonywania
Aby zmienić zasady wykonywania programu PowerShell na komputerze z systemem Windows, użyj polecenia cmdlet Set-ExecutionPolicy. 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 pliku konfiguracji i pozostanie obowiązująca do momentu ponownej zmiany.
Jeśli ustawisz zasady wykonywania dla zakresu Process, nie zostanie on zapisany w pliku konfiguracji. Zasady wykonywania są zachowywane do czasu zamknięcia bieżącego procesu i wszystkich procesów podrzędnych.
Notatka
W systemie Windows Vista i nowszych wersjach systemu Windows, aby uruchomić polecenia, które zmieniają zasady wykonywania zakresu LocalMachine dla komputera lokalnego, uruchom program PowerShell, wybierając 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: Wykonaj następujące kroki:
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.
Usuń politykę wykonywania
Aby usunąć politykę wykonywania dla określonego zakresu, ustaw politykę wykonywania na Undefined.
Aby na przykład usunąć zasady wykonywania skryptów dla wszystkich użytkowników komputera lokalnego:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Aby usunąć zasady wykonywania skryptów dla Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Jeśli żadna polityka wykonywania nie jest ustawiona w żadnym zakresie, obowiązująca polityka wykonywania to Restricted, co stanowi ustawienie domyślne dla klientów systemu Windows.
Ustawianie innych zasad dla jednej sesji
Możesz użyć parametru ExecutionPolicypwsh.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 ExecutionPolicypwsh.exe, aby ustawić zasady wykonywania.
Na przykład:
pwsh.exe -ExecutionPolicy AllSigned
Ustawione zasady wykonywania nie są przechowywane w pliku konfiguracji.
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 pliku konfiguracji 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
Aby zarządzać zasadami wykonywania skryptów na komputerach w przedsiębiorstwie, można użyć ustawienia zasad grupy Włącz wykonywanie skryptów. Ustawienie zasad grupy zastępuje zasady wykonywania ustawione w programie PowerShell we wszystkich zakresach.
Ustawienia zasad Włączanie wykonywania skryptu są następujące:
Jeśli wyłączysz opcję Włącz wykonywanie skryptów, skrypty nie będą uruchamiane. Jest to odpowiednik polityki wykonywania Restricted.
Jeśli włączysz Włącz wykonywanie skryptu, możesz wybrać zasady wykonywania. Ustawienia zasad grupy odpowiadają następującym ustawieniom zasad uruchamiania:
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 skryptów, nie ma to żadnego wpływu. Zasady wykonywania ustawione w programie PowerShell są skuteczne.
Pliki PowerShellCoreExecutionPolicy.adm i PowerShellCoreExecutionPolicy.admx dodaj zasady Włączanie wykonywania skryptu do węzłów Konfiguracja komputera i Konfiguracja użytkownika w Edytorze zasad grupy w następującej ścieżce:
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.
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, w tym programów 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żesz użyć parametru Stream polecenia cmdlet Get-Item, aby wykryć zablokowane pliki, ponieważ zostały pobrane z Internetu. Użyj polecenia cmdlet Unblock-File, aby odblokować skrypty, aby można było je uruchomić w programie PowerShell.
Aby uzyskać więcej informacji, zapoznaj się z about_Signing, Get-Itemi Unblock-File.
Notatka
Inne metody pobierania plików mogą nie oznaczać plików jako pochodzących ze strefy internetowej. Oto kilka przykładów:
curl.exeInvoke-RestMethodInvoke-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 Windows nie jest dostępna w systemie Windows Server Core i Windows Nano Server.
Ten błąd może się również pojawić 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.