Поиск по сайту:

Set-ExecutionPolicy (Microsoft.PowerShell.Security)


Set-ExecutionPolicy

Модуль:
Microsoft.PowerShell.Security

Устанавливает политики выполнения 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-ExecutionPolicy по умолчанию является LocalMachine, что влияет на всех, кто использует компьютер. Чтобы изменить политику выполнения для LocalMachine, запустите PowerShell с помощью Запуск от имени администратора.

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

Примеры

Пример 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 выполняется из текущего каталога. Сценарий заблокирован RemoteSigned`, поскольку сценарий не имеет цифровой подписи.

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

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

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

Параметры

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип :

SwitchParameter

Псевдонимы:

cf

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-ExecutionPolicy

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

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

  • AllSigned. Требуется, чтобы все сценарии и файлы конфигурации были подписаны доверенным издателем, включая сценарии, написанные на локальном компьютере.
  • Обход. Ничего не заблокировано, нет никаких предупреждений или подсказок.
  • По умолчанию. Устанавливает политику выполнения по умолчанию. Restricted для клиентов Windows или RemoteSigned для серверов Windows.
  • RemoteSigned. Требуется, чтобы все сценарии и файлы конфигурации, загружаемые из Интернета, были подписаны доверенным издателем. Политика выполнения по умолчанию для серверных компьютеров Windows.
  • Ограничено. Не загружает файлы конфигурации и не запускает сценарии. Политика выполнения по умолчанию для клиентских компьютеров Windows.
  • Не определено. Для области не установлена политика выполнения. Удаляет назначенную политику выполнения из области, которая не задана групповой политикой. Если политика выполнения во всех областях — Неопределенная, действующая политика выполнения — Ограниченная.
  • Без ограничений. Начиная с PowerShell 6.0, это политика выполнения по умолчанию для компьютеров, отличных от Windows, и ее нельзя изменить. Загружает все файлы конфигурации и запускает все сценарии. Если вы запустите неподписанный сценарий, загруженный из Интернета, перед его запуском вам будет предложено получить разрешение.
Тип :

ExecutionPolicy

Принятые значения:

AllSigned, Обход, По умолчанию, RemoteSigned, Ограниченный, Неопределенный, Неограниченный

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Force

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

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Scope

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

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

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

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

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

Политики выполнения для области LocalMachine записываются в куст реестра HKEY_LOCAL_MACHINE.

Тип :

Область выполнения политики

Принятые значения:

ТекущийUser, LocalMachine, MachinePolicy, Процесс, UserPolicy

Позиция:

1

Значение по умолчанию:

LocalMachine

Необходимый:

False

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-WhatIf

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

Тип :

SwitchParameter

Псевдонимы:

wi

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Политика выполнения

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

Строка

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

Выходы

Нет

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

Примечания

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

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

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