当我从服务器上的.ps1文件运行任何脚本时,我会收到一个关于Set-ExcutionPolicy
成功但被更高范围覆盖的错误。然而,我运行的代码都与执行策略或更改它们无关。知道我为什么会犯这个错误吗?
这是在Windows 2012 R2服务器上,其中所有级别的执行策略都设置为远程签名。我正在PowerShell V4.0 上运行
如果我打开PowerShell或ISE并键入命令,它将完成而不显示错误,则只有当我尝试从.ps1文件运行脚本时才会出现错误。
这就是错误:
设置ExecutionPolicy:Windows PowerShell更新了您的执行策略成功,但该设置被在具体范围。由于覆盖,您的外壳将保留其当前RemoteSigned的有效执行策略。键入"GetExecutionPolicy-List"以查看您的执行策略设置。有关更多信息,请参阅"获取帮助设置ExecutionPolicy"。第1行字符:46+if((Get-ExecutionPolicy(-ne"AllSigned"({设置ExecutionPolicy-作用域进程。。。+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:PermissionDenied:(:([Set ExecutionPolicy],SecurityException+FullyQualifiedErrorId:ExecutionPolicyOverride,Microsoft。PowerShell。命令。SetExecutionPolicyCommand
.ps1文件的"Run with PowerShell">上下文菜单项调用以下命令行:
"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
它存储在注册表项HKCUMicrosoft.PowerShellScript.1Shell Command
中。由于您通过组策略定义了执行策略,因此每当您通过PowerShell脚本的上下文菜单运行PowerShell脚本时,在进程范围中设置冲突的执行策略会导致您观察到的错误。
将注册表中的命令行更改为以下内容:
"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -File "%L"
并且误差将消失。