Set-ExecutionPolicy
Задает политики выполнения PowerShell для компьютеров Windows.
Синтаксис
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Описание
Командлет Set-ExecutionPolicy
изменяет политики выполнения PowerShell для компьютеров Windows. Подробнее см. в разделе about_Execution_Policies.
Политика выполнения является частью стратегии безопасности 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 является более строгим, но не является эффективной политикой, так как она конфликтует с групповая политика. Политика с ограниченным доступом записывается в куст реестра 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 .
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 для указания неопределенной политики.
Параметр 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, то Restricted становится действующей политикой для всех пользователей.
Допустимые значения политики выполнения:
- AllSigned. Требует, чтобы все скрипты и файлы конфигурации были подписаны доверенным издателем, включая скрипты, написанные на локальном компьютере.
- Обход. ничего не блокируется, и никакие предупреждения и запросы не появляются.
- Default. Задает политику выполнения по умолчанию. Ограничено для клиентов Windows или RemoteSigned для серверов Windows.
- RemoteSigned. Требует, чтобы все скрипты и файлы конфигурации, скачанные из Интернета, были подписаны доверенным издателем. Политика выполнения по умолчанию для компьютеров Windows Server.
- Ограниченный. Не загружает файлы конфигурации или не запускает скрипты. Политика выполнения по умолчанию клиентских компьютеров 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: | None |
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 отображает сообщение, объясняющее конфликт.