Ответ 1
Сообщение об ошибке указывает, что параметр, который вы пытаетесь определить через Set-ExecutionPolicy
, переопределяется параметром в другой области. Используйте Get-ExecutionPolicy -List
, чтобы узнать, какая область имеет эту настройку.
PS C:\> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
PS C:\> Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:\> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope. Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:\> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Restricted
CurrentUser Unrestricted
LocalMachine RemoteSigned
PS C:\> .\test.ps1
.\test.ps1 : File C:\test.ps1 cannot be loaded because running scripts is
disabled on this system. ...
PS C:\> Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:\> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope. Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:\> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Unrestricted
CurrentUser Restricted
LocalMachine RemoteSigned
PS C:\> .\test.ps1
Hello World!
Как вы можете видеть, обе настройки были определены, несмотря на ошибку, но параметр в более конкретной области (Process
) по-прежнему имеет приоритет, предотвращая или разрешая выполнение script.
Поскольку область по умолчанию LocalMachine
, ошибка может быть вызвана настройкой в области CurrentUser
или Process
. Однако более распространенная причина заключается в том, что выполнение script было выполнено с помощью групповой политики (локальной или доменной).
Локальная групповая политика может быть изменена локальным администратором через gpedit.msc
(редактор локальной групповой политики), как описано в этом ответе.
Политика группы домена не может быть заменена локальными настройками/политиками и должна быть изменена администратором домена через gpmc.msc
(Управление групповыми политиками) на контроллере домена.
Для политики как локального, так и для домена эта настройка может быть определена как настройка компьютера:
Computer Configuration
`-Administrative Templates
`-Windows Components
`-Windows PowerShell -> Turn on Script Execution
или как пользовательская настройка:
User Configuration
`-Administrative Templates
`-Windows Components
`-Windows PowerShell -> Turn on Script Execution
Первые применяются к компьютерным объектам, тогда как последние применяются к объектам пользователя. Для локальной политики нет существенной разницы между пользовательскими и компьютерными политиками, поскольку политики пользователей автоматически применяются ко всем пользователям на компьютере.
В политике может быть одно из трех состояний (или пять состояний, если вы подсчитаете 3 параметра, доступные для состояния, включенного отдельно):
- Не настроено: политика не контролирует выполнение PowerShell script.
- Включено: разрешить выполнение PowerShell script.
- Разрешить только подписанные скрипты: разрешить выполнение только подписанных скриптов (так же, как
Set-ExecutionPolicy AllSigned
). - Разрешить локальные скрипты и удаленные подписанные скрипты: разрешить выполнение всех локальных скриптов (подписанных или нет) и подписанных скриптов из удаленных мест (так же, как
Set-ExecutionPolicy RemoteSigned
). - Разрешить все сценарии: разрешить выполнение локальных и удаленных скриптов независимо от того, подписаны они или нет (такие же, как
Set-ExecutionPolicy Unrestricted
).
- Разрешить только подписанные скрипты: разрешить выполнение только подписанных скриптов (так же, как
- Отключено: запретить выполнение PowerShell script (то же, что и
Set-ExecutionPolicy Restricted
).
Изменения, сделанные с помощью Set-ExecutionPolicy
, становятся эффективными только тогда, когда для локальных политик и политик домена установлено значение Не настроено (политика выполнения Undefined
в областях MachinePolicy
и UserPolicy
).