0

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

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

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

这是错误:

Set-ExecutionPolicy:Windows PowerShell 更新了你的执行策略
成功,但该设置被在更多定义的策略覆盖
具体范围。由于覆盖,您的外壳将保留其当前
RemoteSigned 的有效执行策略。键入“Get-ExecutionPolicy -List”
查看您的执行策略设置。有关更多信息,请参阅
“获取帮助设置执行策略”。
在行:1 字符:46
+ if((Get-ExecutionPolicy) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
4

1 回答 1

0

.ps1 文件的“使用 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\0\Command中。由于您通过组策略定义了执行策略,因此每当您通过其上下文菜单运行 PowerShell 脚本时,在进程范围内设置冲突的执行策略会导致您观察到的错误。

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

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

并且错误将消失。

于 2018-12-14T10:26:45.437 回答