Udostępnij za pośrednictwem


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.

Począwszy od programu PowerShell 6.0 dla komputerów 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.

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 programu LocalMachine, uruchom program PowerShell przy użyciu polecenia Uruchom jako administrator.

Aby wyświetlić zasady wykonywania dla każdego zakresu, 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 RemoteSigned zasad. 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ć LocalMachine zasady wykonywania zakresu na Restricted. LocalMachinejest bardziej restrykcyjna, ale nie jest skuteczną polityką, ponieważ powoduje konflikt z zasady grupy. Zasady Restricted są zapisywane w gałęzi HKEY_LOCAL_MACHINErejestru .

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 do określenia Restricted zasad. Parametr Zakres określa domyślną wartość zakresu: LocalMachine. Polecenie Get-ChildItem cmdlet używa parametru Path z dyskiem 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 .

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-ExecutionPolicystosuje 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 ma wpływ tylko na 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ć AllSigned zasady. 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ą 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 , aby określić Undefined zasady. 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 Process 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-ExecutionPolicyExecutionPolicy służy do określania AllSigned zasad. Parametr Zakres określa wartość Process. 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 RemoteSigned pokazano, jak zasady wykonywania 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-ExecutionPolicyExecutionPolicy służy do określania RemoteSigned zasad. Zasady są ustawiane dla zakresu domyślnego. LocalMachine

Polecenie Get-ExecutionPolicy cmdlet pokazuje, że RemoteSigned są obowiązujące zasady wykonywania dla bieżącej sesji programu PowerShell.

RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by , 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 uległy zmianie, 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 są ustawione na Undefinedwartość , Restricted staje się skutecznymi zasadami 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. Restricted dla klientów z systemem Windows lub RemoteSigned 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. 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 to Undefined, obowiązują zasady wykonywania to Restricted.
  • Unrestricted. Począwszy od programu PowerShell 6.0, jest to domyślne zasady wykonywania dla komputerów spoza systemu Windows i nie można ich zmienić. Ł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:False
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- Ustawiane przez zasady grupy dla wszystkich użytkowników komputera
  • UserPolicy- Ustawiane 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 - Wpływa tylko na bieżącego użytkownika

Zakres Process 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 zakresu CurrentUser są zapisywane w gałęzi HKEY_LOCAL_USERrejestru .

Zasady wykonywania zakresu LocalMachine są zapisywane w gałęzi HKEY_LOCAL_MACHINErejestru .

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

ExecutionPolicy

Do tego polecenia cmdlet można przekazać obiekt zasad wykonywania.

String

Możesz przekazać 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 zakresów i UserPolicy , ponieważ są one ustawiane przez zasady grupy.

Set-ExecutionPolicynie 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 zostanie zapisana, ale nie jest skuteczna. Program PowerShell wyświetla komunikat, który wyjaśnia konflikt.