未调用时设置执行策略错误

Set-ExecutionPolicy Error when not being called

当我 运行 来自我服务器上的 .ps1 文件的任何脚本时,我收到一个关于 Set-ExcutionPolicy 成功但被更高范围覆盖的错误。 但是,我 运行ning 中的代码 none 与执行策略或更改它们有任何关系。知道为什么我会收到此错误吗?

这是在 Windows 2012 R2 服务器上,所有级别的执行策略都设置为远程签名。我 运行正在使用 PowerShell V4.0

如果我打开 PowerShell 或 ISE 并输入它完成的命令而不显示错误,它只会在我尝试 运行 来自 .ps1 文件的脚本时发生。

这是错误:

Set-ExecutionPolicy : Windows PowerShell 更新了您的执行策略
成功,但该设置被定义在更多位置的策略覆盖
具体范围。由于覆盖,您的 shell 将保留其当前
RemoteSigned 的有效执行策略。输入 "Get-ExecutionPolicy -List"
查看您的执行策略设置。欲了解更多信息,请参阅
"Get-Help Set-ExecutionPolicy"。
在 line:1 char:46
+ if((Get-ExecutionPolicy) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + 类别信息:PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

.ps1 文件的 "Run with PowerShell" 上下文菜单条目调用以下命令行:

"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[=12=]\Command 中。由于您通过组策略定义了执行策略,因此只要您通过其上下文菜单 运行 PowerShell 脚本,在 Process 范围内设置冲突的执行策略会导致您观察到的错误。

将注册表中的命令行更改为如下内容:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File "%L"

错误将消失。