【发布时间】:2015-06-15 11:41:42
【问题描述】:
我正在尝试从 C# 代码运行 PowerShell 脚本,但遇到了一些(可能是环境问题)问题:
在我尝试运行它的机器上,发生以下情况:
- PowerShell 以管理员身份启动和加载
- PowerShell 窗口立即关闭(显然)没有错误
注意事项:
- 脚本有效。当我从 ISE 运行它时,它运行时没有错误。
- 如果我右键单击脚本并选择使用 PowerShell 运行,我会收到一个执行策略错误,即使我没有在脚本中更改它。
Set-ExecutionPolicy:Windows PowerShell 成功更新了您的执行策略,但该设置被 在更具体的范围内定义的政策。由于覆盖,您的 shell 将保留其当前有效执行 RemoteSigned 的策略。键入“Get-ExecutionPolicy -List”以查看您的执行策略设置。如需更多信息,请 请参阅“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
-
Get-ExecutionPolicy -List
Scope ExecutionPolicy ----- --------------- MachinePolicy Unrestricted UserPolicy Undefined Process Bypass CurrentUser Unrestricted LocalMachine Unrestricted -
我认为这是环保的,因为:
- 几天前运行良好
- 在其他电脑上运行良好
这是我用来调用脚本的代码:
if (File.Exists("Start.ps1"))
{
string strCmdText = Path.Combine(Directory.GetCurrentDirectory(), "Start.ps1");
var process = System.Diagnostics.Process.Start(@"C:\windows\system32\windowspowershell\v1.0\powershell.exe ", strCmdText);
process.WaitForExit();
}
脚本本身无关紧要,因为我已将其更改为简单的
Write-Host "Hello"
$d=Read-Host
我也有同样的问题。
【问题讨论】:
-
你试过这个开关
-NoProfile -ExecutionPolicy UnRestricted吗? -
@AramKocharyan 他设置了机器策略,不会这样做。
-
将 GP 更改为 Unrestricted 以避免混淆。
-
嗯。将脚本更改为
Copy-Item调用如何,以便您可以跟踪它是否确实执行了某些操作?可悲的是,虽然我可以在 Powershell 中模拟它,但无法测试 C# 代码。编辑:模拟,对于我的 PC,Powershell->Powershell 确实使用了测试脚本,也就是说,它等待Read-Host提供数据。 -
请发布关于如何设置执行策略的确切代码,它是 C# 还是 Powershell 代码,以及它是如何调用的。您可能会忽略该错误,尤其是当您将政策设置为更严格的政策时。
标签: c# powershell