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"

и ошибка исчезнет.

Другие вопросы по тегам