Set-ExecutionPolicy
Ustawia zasady wykonywania programu PowerShell dla komputerów z systemem Windows.
Składnia
All
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Opis
Polecenie cmdlet Set-ExecutionPolicy zmienia zasady wykonywania programu PowerShell dla komputerów z systemem Windows. Aby uzyskać więcej informacji, przejdź do about_Execution_Policies.
Począwszy od programu PowerShell 6.0 dla komputerów z systemem 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.
Zasady wykonywania są częścią strategii zabezpieczeń programu PowerShell. Zasady wykonywania określają, czy można ładować pliki konfiguracji, takie jak profil programu PowerShell, czy uruchamiać skrypty. I czy skrypty muszą być podpisane cyfrowo przed ich uruchomieniem.
Domyślny zakres polecenia cmdlet Set-ExecutionPolicy to LocalMachine, co wpływa na wszystkich użytkowników komputera. Aby zmienić zasady wykonywania dla LocalMachine, uruchom program PowerShell przy użyciu Uruchom jako administrator.
Aby wyświetlić zasady wykonywania dla każdego zakresu, użyj Get-ExecutionPolicy -List. Aby wyświetlić obowiązujące zasady wykonywania dla sesji programu PowerShell, użyj Get-ExecutionPolicy bez parametrów.
Przykłady
Przykład 1. Ustawianie zasad wykonywania
W tym przykładzie pokazano, jak ustawić zasady wykonywania dla komputera lokalnego.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Polecenie cmdlet Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad RemoteSigned. Parametr zakresu określa domyślną wartość zakresu, LocalMachine. Aby wyświetlić ustawienia zasad wykonywania, użyj polecenia cmdlet Get-ExecutionPolicy z parametrem List.
Przykład 2. Ustawianie zasad wykonywania, które są sprzeczne z zasadami grupy
To polecenie próbuje ustawić zasady wykonywania zakresu LocalMachine w celu Restricted.
LocalMachine jest bardziej restrykcyjna, ale nie jest skutecznymi zasadami, ponieważ powoduje konflikt z zasadami grupy. Zasady Restricted są zapisywane w gałęzi rejestru HKEY_LOCAL_MACHINE.
PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine
Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted
PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Name Property
---- --------
Microsoft.PowerShell Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionPolicy : Restricted
ScriptedDiagnostics ExecutionPolicy : Unrestricted
Polecenie cmdlet Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad Restricted. Parametr zakresu określa domyślną wartość zakresu, LocalMachine. Polecenie cmdlet Get-ChildItem używa parametru ścieżki z dyskiem HKLM: w celu określenia lokalizacji rejestru.
Przykład 3. Stosowanie zasad wykonywania z komputera zdalnego do komputera lokalnego
To polecenie pobiera obiekt zasad wykonywania z komputera zdalnego i ustawia zasady na komputerze lokalnym.
Get-ExecutionPolicy wysyła obiekt Microsoft.PowerShell.ExecutionPolicy potoku.
Set-ExecutionPolicy akceptuje dane wejściowe potoku i nie wymaga parametru ExecutionPolicy.
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
Polecenie cmdlet Invoke-Command jest wykonywane na komputerze lokalnym i wysyła ScriptBlock do komputera zdalnego. Parametr ComputerName określa komputer zdalny Server01. Parametr ScriptBlock jest uruchamiany Get-ExecutionPolicy na komputerze zdalnym. Obiekt Get-ExecutionPolicy jest wysyłany w dół potoku do Set-ExecutionPolicy.
Set-ExecutionPolicy stosuje zasady wykonywania do domyślnego zakresu komputera lokalnego, LocalMachine.
Przykład 4. Ustawianie zakresu zasad wykonywania
W tym przykładzie pokazano, jak ustawić zasady wykonywania dla określonego zakresu, CurrentUser. Zakres CurrentUser dotyczy tylko użytkownika, który ustawia ten zakres.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad AllSigned.
Parametr zakresu określa CurrentUser. Aby wyświetlić ustawienia zasad wykonywania, użyj polecenia cmdlet Get-ExecutionPolicy z parametrem List.
Obowiązujące zasady wykonywania dla użytkownika stają się AllSigned.
Przykład 5. Usuwanie zasad wykonywania dla bieżącego użytkownika
W tym przykładzie pokazano, jak za pomocą Undefined zasad wykonywania usunąć zasady wykonywania dla określonego zakresu.
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad Undefined. Parametr zakresu określa CurrentUser. Aby wyświetlić ustawienia zasad wykonywania, użyj polecenia cmdlet Get-ExecutionPolicy z parametrem List.
Przykład 6. Ustawianie zasad wykonywania dla bieżącej sesji programu PowerShell
Zakres Process dotyczy tylko bieżącej sesji programu PowerShell. Zasady wykonywania są zapisywane w zmiennej środowiskowej $Env:PSExecutionPolicyPreference i są usuwane po zamknięciu sesji.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad AllSigned. Parametr zakresu określa wartość Process. Aby wyświetlić ustawienia zasad wykonywania, użyj polecenia cmdlet Get-ExecutionPolicy z parametrem List.
Przykład 7. Odblokowywanie skryptu w celu uruchomienia go bez zmieniania zasad wykonywania
W tym przykładzie pokazano, jak zasady wykonywania RemoteSigned uniemożliwiają uruchamianie niepodpisanych skryptów.
Najlepszym rozwiązaniem jest odczytanie kodu skryptu i sprawdzenie, czy jest to bezpieczne przed przy użyciu polecenia cmdlet Unblock-File. Polecenie cmdlet Unblock-File odblokuje skrypty, aby można je było uruchamiać, ale nie zmienia zasad wykonywania.
PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS> Unblock-File -Path .\Start-ActivityTracker.ps1
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
Task 1:
Set-ExecutionPolicy używa parametru ExecutionPolicy w celu określenia zasad RemoteSigned. Polityka jest ustawiona dla zakresu domyślnego, LocalMachine.
Polecenie cmdlet Get-ExecutionPolicy pokazuje, że RemoteSigned to obowiązujące zasady wykonywania dla bieżącej sesji programu PowerShell.
Skrypt Start-ActivityTracker.ps1 jest wykonywany z bieżącego katalogu. Skrypt jest blokowany przez RemoteSigned, ponieważ skrypt nie jest podpisany cyfrowo.
W tym przykładzie kod skryptu został przejrzyszony i zweryfikowany jako bezpieczny do uruchomienia. Polecenie cmdlet Unblock-File używa parametru Path, aby odblokować skrypt.
Aby sprawdzić, czy Unblock-File nie zmienił zasad wykonywania, Get-ExecutionPolicy wyświetla obowiązujące zasady wykonywania, RemoteSigned.
Skrypt Start-ActivityTracker.ps1 jest wykonywany z bieżącego katalogu. Skrypt zaczyna działać, ponieważ został odblokowany przez polecenie cmdlet Unblock-File.
Parametry
-Confirm
Prosi o potwierdzenie przed uruchomieniem cmdletu.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | por |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-ExecutionPolicy
Określa zasady wykonywania. Jeśli nie ma zasad grupy i zasady wykonywania każdego zakresu są ustawione na Undefined, Restricted staje się obowiązującą zasadą dla wszystkich użytkowników.
Dopuszczalne wartości zasad wykonywania są następujące:
-
AllSigned. Wymaga, aby wszystkie skrypty i pliki konfiguracji były podpisane przez zaufanego wydawcę, w tym skrypty napisane na komputerze lokalnym. -
Bypass. Nic nie jest zablokowane i nie ma żadnych ostrzeżeń ani monitów. -
Default. Ustawia domyślne zasady wykonywania.Restricteddla klientów systemu Windows lubRemoteSigneddla serwerów z systemem Windows. -
RemoteSigned. Wymaga, aby wszystkie skrypty i pliki konfiguracji pobrane z Internetu były podpisane przez zaufanego wydawcę. Domyślne zasady wykonywania dla komputerów z systemem Windows Server. -
Restricted. Nie ładuje plików konfiguracji ani nie uruchamia skryptów. Domyślne zasady wykonywania dla komputerów klienckich z systemem Windows. -
Undefined. Nie ustawiono żadnych zasad wykonywania dla zakresu. Usuwa przypisane zasady wykonywania z zakresu, który nie jest ustawiony przez zasady grupy. Jeśli zasady wykonywania we wszystkich zakresach sąUndefined, obowiązujące zasady wykonywania sąRestricted. -
Unrestricted. Począwszy od programu PowerShell 6.0, jest to domyślne zasady wykonywania dla komputerów z systemem innych niż Windows i nie można ich zmienić. Ładuje wszystkie pliki konfiguracji i uruchamia wszystkie skrypty. Jeśli uruchomisz niepodpisany skrypt pobrany z Internetu, przed jego uruchomieniem zostanie wyświetlony monit o uprawnienie.
Właściwości parametru
| Typ: | ExecutionPolicy |
| Domyślna wartość: | None |
| Dopuszczalne wartości: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | 0 |
| Obowiązkowy: | True |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Force
Pomija wszystkie monity o potwierdzenie. Należy zachować ostrożność z tym parametrem, aby uniknąć nieoczekiwanych wyników.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Scope
Określa zakres, na który mają wpływ zasady wykonywania. Domyślny zakres to LocalMachine.
Obowiązujące zasady wykonywania są określane według kolejności pierwszeństwa w następujący sposób:
-
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 -
LocalMachine— domyślny zakres, który ma wpływ na wszystkich użytkowników komputera -
CurrentUser— dotyczy tylko bieżącego użytkownika
Zakres Process dotyczy 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.
Zasady wykonywania zakresu CurrentUser są zapisywane w gałęzi rejestru HKEY_LOCAL_USER.
Zasady wykonywania zakresu LocalMachine są zapisywane w gałęzi rejestru HKEY_LOCAL_MACHINE.
Właściwości parametru
| Typ: | ExecutionPolicyScope |
| Domyślna wartość: | LocalMachine |
| Dopuszczalne wartości: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | 1 |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | True |
| Wartość z pozostałych argumentów: | False |
-WhatIf
Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Cmdlet nie jest uruchomiony.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | Wi |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
CommonParameters
To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
Dane wejściowe
ExecutionPolicy
Do tego polecenia cmdlet można przekazać obiekt zasad wykonywania.
String
Możesz potokować ciąg zawierający nazwę zasad wykonywania do tego polecenia cmdlet.
Dane wyjściowe
None
To polecenie cmdlet nie zwraca żadnych danych wyjściowych.
Uwagi
Set-ExecutionPolicy nie zmienia MachinePolicy i UserPolicy zakresów, ponieważ są one ustawiane przez zasady grupy.
Set-ExecutionPolicy nie zastępuje zasad grupy, nawet jeśli preferencja użytkownika jest bardziej restrykcyjna niż zasady.
Jeśli zasady grupy włącz wykonywanie skryptu jest włączone dla komputera lub użytkownika, preferencja użytkownika jest zapisywana, ale nie jest skuteczna. Program PowerShell wyświetla komunikat wyjaśniający konflikt.