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


Set-ExecutionPolicy

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

Синтаксис

All

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 с запуска от имени администратора.

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

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

Эффективная политика выполнения для пользователя становится 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. Параметр области указывает CurrentUser. Чтобы просмотреть параметры политики выполнения, используйте командлет Get-ExecutionPolicy с параметром списка .

Пример 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. Параметр области указывает значение Process. Чтобы просмотреть параметры политики выполнения, используйте командлет Get-ExecutionPolicy с параметром списка .

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

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

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

Параметры

-Confirm

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:cf

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ExecutionPolicy

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

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

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

Свойства параметра

Тип:ExecutionPolicy
Default value:None
Допустимые значения:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Force

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Scope

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

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

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

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

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

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

Свойства параметра

Тип:ExecutionPolicyScope
Default value:LocalMachine
Допустимые значения:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-WhatIf

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:wi

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

ExecutionPolicy

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

String

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

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

None

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

Примечания

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

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

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