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-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.
RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
', так как скрипт не подписан цифровой подписью.
В этом примере код скрипта был проверен и проверен как безопасный для выполнения. Командлет 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
область записываются в куст 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 |
Входные данные
Вы можете передать объект политики выполнения в этот командлет.
В этот командлет можно передать строку, содержащую имя политики выполнения.
Выходные данные
None
Этот командлет не возвращает выходные данные.
Примечания
Set-ExecutionPolicy
не изменяет MachinePolicy
области и UserPolicy
, так как они задаются групповыми политиками.
Set-ExecutionPolicy
не переопределяет групповая политика, даже если предпочтения пользователя являются более строгими, чем политика.
Если для компьютера или пользователя включена групповая политика Включить выполнение скриптов, параметры пользователя сохраняются, но это не вступает в силу. PowerShell отображает сообщение, объясняющее конфликт.