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
. Чтобы просмотреть эффективную политику выполнения для сеанса 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для указания расположения реестра.
Пример 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 |
Aliases: | cf |
Position: | Named |
Default value: | 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 |
Допустимые значения: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Force
Подавляет все запросы на подтверждение. Используйте осторожность с этим параметром, чтобы избежать непредвиденных результатов.
Тип: | SwitchParameter |
Position: | Named |
Default value: | 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 |
Допустимые значения: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Тип: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Объект политики выполнения можно передать в этот командлет.
Вы можете передать строку, содержащую имя политики выполнения в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.
Примечания
Set-ExecutionPolicy
не изменяет MachinePolicy
области и UserPolicy
области, так как они задаются групповыми политиками.
Set-ExecutionPolicy
не переопределяет групповую политику, даже если предпочтение пользователя является более строгим, чем политика.
Если для компьютера или пользователя включена включение групповой политики включения выполнения скриптов, то предпочтения пользователя сохраняются, но это не является эффективным. В PowerShell отображается сообщение, объясняющее конфликт.
Связанные ссылки
PowerShell