Set-ExecutionPolicy

Задает политики выполнения PowerShell для компьютеров Windows.

Синтаксис

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

Командлет Set-ExecutionPolicy изменяет политики выполнения PowerShell для компьютеров Windows. Дополнительную информацию см. в разделе about_Execution_Policies.

Начиная с PowerShell 6.0 для компьютеров, отличных от Windows, политика выполнения по умолчанию не Unrestricted может быть изменена. Командлет Set-ExecutionPolicy доступен, но PowerShell отображает консольное сообщение, которое оно не поддерживает.

Политика выполнения является частью стратегии безопасности PowerShell. Политики выполнения определяют, можно ли загружать файлы конфигурации, такие как профиль PowerShell, или запускать скрипты. И, должны ли скрипты быть цифровыми подписями перед их запуском.

Область Set-ExecutionPolicyLocalMachineпо умолчанию командлета влияет на всех, кто использует компьютер. Чтобы изменить политику выполнения, LocalMachineзапустите PowerShell с помощью запуска от имени Администратор istrator.

Чтобы отобразить политики выполнения для каждой область, используйте Get-ExecutionPolicy -List. Чтобы просмотреть эффективную политику выполнения для сеанса Get-ExecutionPolicy PowerShell без параметров.

Примеры

Пример 1. Настройка политики выполнения

В этом примере показано, как задать политику выполнения для локального компьютера.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Командлет Set-ExecutionPolicy использует параметр ExecutionPolicy для указания RemoteSigned политики. Параметр Scope задает значение LocalMachineобласть по умолчанию. Чтобы просмотреть параметры политики выполнения, используйте Get-ExecutionPolicy командлет с параметром List .

Пример 2. Настройка политики выполнения, конфликты с групповой политикой

Эта команда пытается задать LocalMachine для политики выполнения область значение Restricted. LocalMachine является более строгим, но не является эффективной политикой, так как она конфликтует с групповой политикой. Политика Restricted записывается в куст 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

Командлет Set-ExecutionPolicy использует параметр ExecutionPolicy для указания Restricted политики. Параметр Scope задает значение LocalMachineобласть по умолчанию. Командлет Get-ChildItem использует параметр Path с диском HKLM:для указания расположения реестра.

Пример 3. Применение политики выполнения с удаленного компьютера к локальному компьютеру

Эта команда получает объект политики выполнения с удаленного компьютера и задает политику на локальном компьютере. Get-ExecutionPolicyотправляет объект Microsoft.PowerShell.ExecutionPolicy вниз конвейера. Set-ExecutionPolicy принимает входные данные конвейера и не требует параметра ExecutionPolicy .

Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Командлет Invoke-Command выполняется на локальном компьютере и отправляет ScriptBlock на удаленный компьютер. Параметр ComputerName указывает удаленный компьютер Server01. Параметр ScriptBlock выполняется Get-ExecutionPolicy на удаленном компьютере. Объект Get-ExecutionPolicy отправляется вниз по конвейеру Set-ExecutionPolicy. Set-ExecutionPolicyПрименяет политику выполнения к область LocalMachineлокального компьютера по умолчанию.

Пример 4. Настройка область для политики выполнения

В этом примере показано, как задать политику выполнения для указанного область. CurrentUser Область CurrentUser влияет только на пользователя, который задает этот область.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicyиспользует параметр ExecutionPolicy для указания AllSigned политики. Параметр Scope задает CurrentUserпараметр . Чтобы просмотреть параметры политики выполнения, используйте Get-ExecutionPolicy командлет с параметром List .

Эффективная политика выполнения для пользователя становится AllSigned.

Пример 5. Удаление политики выполнения для текущего пользователя

В этом примере показано, как использовать Undefined политику выполнения для удаления политики выполнения для указанной область.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicyиспользует параметр ExecutionPolicy для указания Undefined политики. Параметр Scope задает CurrentUserпараметр . Чтобы просмотреть параметры политики выполнения, используйте Get-ExecutionPolicy командлет с параметром List .

Пример 6. Настройка политики выполнения для текущего сеанса PowerShell

Область Process влияет только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменной $env:PSExecutionPolicyPreference среды и удаляется при закрытии сеанса.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       AllSigned
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Использует Set-ExecutionPolicy параметр ExecutionPolicy для указания AllSigned политики. Параметр Scope задает значение Process. Чтобы просмотреть параметры политики выполнения, используйте Get-ExecutionPolicy командлет с параметром List .

Пример 7. Разблокировка скрипта для его запуска без изменения политики выполнения

В этом примере показано, как RemoteSigned политика выполнения запрещает выполнение неподписанных скриптов.

Рекомендуется считывать код скрипта и проверять его безопасность перед использованием командлета Unblock-File . Командлет Unblock-File разблокирует скрипты, чтобы они могли выполняться, но не изменяют политику выполнения.

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 параметр ExecutionPolicy для указания RemoteSigned политики. Политика устанавливается для область LocalMachineпо умолчанию.

Командлет Get-ExecutionPolicy показывает, что RemoteSigned это эффективная политика выполнения для текущего сеанса PowerShell.

Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by RemoteSigned, так как скрипт не подписывается цифровой подписью.

В этом примере код скрипта был проверен и проверен как безопасный для запуска. Командлет Unblock-File использует параметр Path для разблокировки скрипта.

Чтобы убедиться, что Unblock-File политика выполнения не изменилась, Get-ExecutionPolicy отображается эффективная политика выполнения. RemoteSigned

Скрипт Start-ActivityTracker.ps1 выполняется из текущего каталога. Скрипт начинает выполняться, так как он был разблокирован командлетом Unblock-File .

Параметры

-Confirm

Запрос подтверждения перед выполнением командлета.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

Указывает политику выполнения. Если групповые политики отсутствуют, и для каждой политики выполнения область задано Undefinedзначение, то Restricted становится эффективной политикой для всех пользователей.

Допустимые значения политики выполнения приведены следующим образом:

  • AllSigned. Требуется, чтобы все скрипты и файлы конфигурации подписаны доверенным издателем, включая скрипты, написанные на локальном компьютере.
  • Bypass. ничего не блокируется, и никакие предупреждения и запросы не появляются.
  • Default. Задает политику выполнения по умолчанию. Restricted для клиентов Windows или RemoteSigned для серверов Windows.
  • RemoteSigned. Требуется, чтобы все скрипты и файлы конфигурации, скачанные из Интернета, подписаны доверенным издателем. Политика выполнения по умолчанию для компьютеров Windows Server.
  • Restricted. Не загружает файлы конфигурации или не выполняет скрипты. Политика выполнения по умолчанию для клиентских компьютеров Windows.
  • Undefined. Для область политика выполнения не задана. Удаляет назначенную политику выполнения из область, которая не задана групповой политикой. Если политика выполнения во всех область имеет значениеUndefined, то эффективная политика выполнения .Restricted
  • Unrestricted. Начиная с PowerShell 6.0, это политика выполнения по умолчанию для компьютеров, отличных от Windows, и ее нельзя изменить. загружает все файлы конфигурации и выполняет все скрипты. Если вы запускаете скрипт без знака, скачанный из Интернета, вам будет предложено предоставить разрешение перед запуском.
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

Подавляет все запросы на подтверждение. Используйте осторожность с этим параметром, чтобы избежать непредвиденных результатов.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

Указывает область, затронутые политикой выполнения. Значение по умолчанию область LocalMachine.

Эффективная политика выполнения определяется порядком приоритета следующим образом:

  • MachinePolicy — Настройка групповой политики для всех пользователей компьютера
  • UserPolicy — задана групповой политикой для текущего пользователя компьютера.
  • Process — влияет только на текущий сеанс PowerShell
  • LocalMachine— область по умолчанию, влияющие на всех пользователей компьютера
  • CurrentUser — влияет только на текущего пользователя

Область Process влияет только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменной $env:PSExecutionPolicyPreferenceсреды, а не в реестре. При закрытии сеанса PowerShell переменная и значение удаляются.

Политики выполнения для CurrentUser область записываются в hive HKEY_LOCAL_USERреестра.

Политики выполнения для LocalMachine область записываются в hive 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

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

ExecutionPolicy

Объект политики выполнения можно передать в этот командлет.

String

Вы можете передать строку, содержащую имя политики выполнения в этот командлет.

Выходные данные

None

Этот командлет не возвращает выходные данные.

Примечания

Set-ExecutionPolicyне изменяет MachinePolicy и UserPolicy область, так как они задаются групповыми политиками.

Set-ExecutionPolicy не переопределяет групповую политику, даже если предпочтение пользователя является более строгим, чем политика.

Если для компьютера или пользователя включена включение групповой политики включения выполнения скриптов, то предпочтения пользователя сохраняются, но это не является эффективным. В PowerShell отображается сообщение, объясняющее конфликт.