Поделиться через


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

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 .

PS> 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. Удаление политики выполнения для текущего пользователя

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

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

Процесс область влияет только на текущий сеанс 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

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

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

-ExecutionPolicy

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

Допустимые значения политики выполнения:

  • AllSigned. Требует, чтобы все скрипты и файлы конфигурации были подписаны доверенным издателем, включая скрипты, написанные на локальном компьютере.
  • Bypass. ничего не блокируется, и никакие предупреждения и запросы не появляются.
  • Default. Задает политику выполнения по умолчанию. Ограничено для клиентов 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. Задается групповая политика для текущего пользователя компьютера.
  • Процесс. Влияет только на текущий сеанс PowerShell.
  • CurrentUser. Влияет только на текущего пользователя.
  • LocalMachine. Область по умолчанию, затрагивающий всех пользователей компьютера.

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

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

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

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

Microsoft.PowerShell.ExecutionPolicy, System.String

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

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

None

Set-ExecutionPolicy не возвращает выходные данные.

Примечания

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

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

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