Set-ExecutionPolicy
Ustawia zasady wykonywania programu PowerShell dla komputerów z systemem Windows.
Składnia
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Opis
Polecenie Set-ExecutionPolicy
cmdlet zmienia zasady wykonywania programu PowerShell dla komputerów z systemem Windows. Aby uzyskać więcej informacji, zobacz about_Execution_Policies.
Zasady wykonywania są częścią strategii zabezpieczeń programu PowerShell. Zasady wykonywania określają, czy można załadować pliki konfiguracji, takie jak profil programu PowerShell, czy uruchamiać skrypty. I czy skrypty muszą być podpisane cyfrowo przed ich uruchomieniem.
Domyślny Set-ExecutionPolicy
zakres polecenia cmdlet to LocalMachine, który ma wpływ na wszystkich użytkowników komputera. Aby zmienić zasady wykonywania dla narzędzia LocalMachine, uruchom program PowerShell przy użyciu polecenia Uruchom jako administrator.
Aby wyświetlić zasady wykonywania dla każdego zakresu w kolejności pierwszeństwa, użyj polecenia Get-ExecutionPolicy -List
. Aby wyświetlić obowiązujące zasady wykonywania sesji programu PowerShell bez Get-ExecutionPolicy
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 Set-ExecutionPolicy
cmdlet używa parametru ExecutionPolicy do określenia zasad RemoteSigned . Parametr Zakres określa domyślną wartość zakresu LocalMachine. Aby wyświetlić ustawienia zasad wykonywania, użyj Get-ExecutionPolicy
polecenia cmdlet z parametrem Lista .
Przykład 2. Ustawianie zasad wykonywania, które są sprzeczne z zasady grupy
To polecenie próbuje ustawić zasady wykonywania zakresu LocalMachine na Ograniczone. Narzędzie LocalMachine jest bardziej restrykcyjne, ale nie jest skutecznymi zasadami, ponieważ powoduje konflikt z zasady grupy. Zasady z ograniczeniami są zapisywane w HKEY_LOCAL_MACHINE hive rejestru.
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 Set-ExecutionPolicy
cmdlet używa parametru ExecutionPolicy , aby określić zasady z ograniczeniami . Parametr Zakres określa domyślną wartość zakresu LocalMachine.
Polecenie Get-ChildItem
cmdlet używa parametru Path z dostawcą HKLM do 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 w dół potoku. Set-ExecutionPolicy
akceptuje dane wejściowe potoku i nie wymaga parametru ExecutionPolicy .
PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
Polecenie Invoke-Command
cmdlet jest wykonywane na komputerze lokalnym i wysyła skryptBlock 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 obiektu 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 , aby określić zasady AllSigned .
Parametr Zakres określa Wartość CurrentUser. Aby wyświetlić ustawienia zasad wykonywania, użyj Get-ExecutionPolicy
polecenia cmdlet z parametrem Lista .
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ą zasad wykonywania niezdefiniowanych 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 , aby określić zasady Niezdefiniowane .
Parametr Zakres określa Wartość CurrentUser. Aby wyświetlić ustawienia zasad wykonywania, użyj Get-ExecutionPolicy
polecenia cmdlet z parametrem Lista .
Przykład 6. Ustawianie zasad wykonywania dla bieżącej sesji programu PowerShell
Zakres procesów ma wpływ tylko na bieżącą sesję programu PowerShell. Zasady wykonywania są zapisywane w zmiennej środowiskowej $env:PSExecutionPolicyPreference
i usuwane po zamknięciu sesji.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Parametr Set-ExecutionPolicy
ExecutionPolicy jest używany do określania zasad AllSigned . Parametr Zakres określa wartość Proces. Aby wyświetlić ustawienia zasad wykonywania, użyj Get-ExecutionPolicy
polecenia cmdlet z parametrem Lista .
Przykład 7. Odblokowywanie skryptu w celu uruchomienia go bez zmiany 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 bezpieczne przed użyciem Unblock-File
polecenia cmdlet. Polecenie Unblock-File
cmdlet odblokuje skrypty, aby mogły działać, 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:
Parametr Set-ExecutionPolicy
ExecutionPolicy służy do określania zasad RemoteSigned . Zasady są ustawione dla zakresu domyślnego LocalMachine.
Polecenie Get-ExecutionPolicy
cmdlet 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 usługę RemoteSigned , ponieważ skrypt nie jest podpisany cyfrowo.
W tym przykładzie kod skryptu został sprawdzony i zweryfikowany jako bezpieczny do uruchomienia. Polecenie Unblock-File
cmdlet używa parametru Path do odblokowania skryptu.
Aby sprawdzić, czy Unblock-File
zasady wykonywania nie zostały zmienione, 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 Unblock-File
polecenie cmdlet.
Parametry
-Confirm
Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExecutionPolicy
Określa zasady wykonywania. Jeśli nie ma zasad grupy, a zasady wykonywania każdego zakresu mają wartość Niezdefiniowane, ograniczenie 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.
- Obejście. Nic nie jest zablokowane i nie ma żadnych ostrzeżeń ani monitów.
- Wartość domyślna. Ustawia domyślne zasady wykonywania. Ograniczone dla klientów systemu Windows lub RemoteSigned dla 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.
- Ograniczone. Nie ładuje plików konfiguracji ani nie uruchamia skryptów. Domyślne zasady wykonywania komputery klienckie z systemem Windows.
- Niezdefiniowane. Dla zakresu nie ustawiono żadnych zasad wykonywania. Usuwa przypisane zasady wykonywania z zakresu, który nie jest ustawiany przez zasady grupy. Jeśli zasady wykonywania we wszystkich zakresach są niezdefiniowane, obowiązujące zasady wykonywania są ograniczone.
- Nieograniczone. Ładuje wszystkie pliki konfiguracji i uruchamia wszystkie skrypty. Jeśli uruchamiasz niepodpisany skrypt pobrany z Internetu, przed uruchomieniem zostanie wyświetlony monit o uprawnienie.
Type: | ExecutionPolicy |
Accepted values: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Pomija wszystkie monity o potwierdzenie. Należy zachować ostrożność przy użyciu tego parametru, aby uniknąć nieoczekiwanych wyników.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Określa zakres, na który mają wpływ zasady wykonywania. Domyślnym zakresem jest LocalMachine.
Obowiązujące zasady wykonywania są określane według kolejności pierwszeństwa w następujący sposób:
- MachinePolicy. Ustaw przez zasady grupy dla wszystkich użytkowników komputera.
- UserPolicy. Ustaw przez zasady grupy dla bieżącego użytkownika komputera.
- Proces. Wpływa tylko na bieżącą sesję programu PowerShell.
- CurrentUser. Wpływa tylko na bieżącego użytkownika.
- LocalMachine. Domyślny zakres, który ma wpływ na wszystkich użytkowników komputera.
Zakres procesów ma wpływ tylko na bieżącą sesję 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 dla zakresu CurrentUser są zapisywane w gałęzi rejestru HKEY_LOCAL_USER.
Zasady wykonywania zakresu LocalMachine są zapisywane w gałęzi rejestru HKEY_LOCAL_MACHINE.
Type: | ExecutionPolicyScope |
Accepted values: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
Pokazuje, co się stanie po uruchomieniu polecenia cmdlet. Polecenie cmdlet nie zostało uruchomione.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Dane wejściowe
Microsoft.PowerShell.ExecutionPolicy, System.String
Możesz potokować obiekt zasad wykonywania lub ciąg zawierający nazwę zasad wykonywania do Set-ExecutionPolicy
.
Dane wyjściowe
None
Set-ExecutionPolicy
nie zwraca żadnych danych wyjściowych.
Uwagi
Set-ExecutionPolicy
nie zmienia zakresów MachinePolicy i UserPolicy , ponieważ są one ustawiane przez zasady grupy.
Set-ExecutionPolicy
nie zastępuje zasady grupy, nawet jeśli preferencja użytkownika jest bardziej restrykcyjna niż zasady.
Jeśli zasady grupy włącz wykonywanie skryptu jest włączona dla komputera lub użytkownika, preferencja użytkownika jest zapisywana, ale nie jest skuteczna. Program PowerShell wyświetla komunikat, który wyjaśnia konflikt.