Set-ExecutionPolicy Ошибка, когда не вызывается
Когда я запускаю любой скрипт из файла.ps1 на моем сервере, я получаю сообщение об ошибке Set-ExcutionPolicy
быть успешным, но быть отвергнутым более высокой областью. Однако ни один код, который я запускаю, не имеет ничего общего с политиками выполнения или их изменением. Любая идея, почему я получаю эту ошибку?
Это на сервере Windows 2012 R2, где политика выполнения для всех уровней установлена на удаленную подпись. Я работаю на PowerShell V4.0
Если я открываю PowerShell или ISE и набираю команду, она завершается, не показывая ошибку, это происходит, только когда я пытаюсь запустить скрипт из файла.ps1.
Это ошибка:
Set-ExecutionPolicy: Windows PowerShell обновил вашу политику выполнения успешно, но параметр переопределяется политикой, определенной на более конкретная сфера Из-за переопределения ваша оболочка сохранит свой текущий эффективная политика выполнения RemoteSigned. Тип "Get-ExecutionPolicy -List" чтобы просмотреть настройки политики выполнения. Для получения дополнительной информации см. Msgstr "Get-Help Set-ExecutionPolicy". В строке:1 символ:46 + if((Get-ExecutionPolicy) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException + FullyQualifiedErrorId: ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
1 ответ
Пункт контекстного меню "Запуск с PowerShell" для файлов.ps1 вызывает следующую командную строку:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Он хранится в разделе реестра HKCU\Microsoft.PowerShellScript.1\Shell\0\Command
, Поскольку у вас есть политика выполнения, определенная с помощью групповой политики, установка конфликтующей политики выполнения в области "Процесс" всякий раз, когда вы запускаете сценарий PowerShell через его контекстное меню, вызывает ошибку, которую вы наблюдали.
Измените командную строку в реестре на что-то вроде этого:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File "%L"
и ошибка исчезнет.