我正在尝试用我的应用程序中的c#编写一个powershell脚本。问题是,如果我用c#运行脚本,脚本就不能完成这项工作,但是如果我手工运行它就可以完成工作。
脚本:DISM /online /Enable-Feature /Featurename:NetFx3 /All
该脚本在Windows服务器上启用Framwork 3.5。 Source
我的代码:
NuGet: System.Management.Automation
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("DISM /online /Enable-Feature /Featurename:NetFx3 /All ");
// begin invoke execution on the pipeline
IAsyncResult result = PowerShellInstance.BeginInvoke();
// do something else until execution has completed.
// this could be sleep/wait, or perhaps some other work
while (result.IsCompleted == false)
{
Console.WriteLine("Waiting for pipeline to finish...");
Thread.Sleep(1000);
// might want to place a timeout here...
}
Console.WriteLine("Finished!");
}
我使用了来自Here
的示例注意:我的应用以管理员身份运行。
答案 0 :(得分:0)
尝试在您的powershell脚本中添加管理员权限,有时可以帮助
PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -windowstyle hidden -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -noexit -File "$ScriptPath"' -Verb RunAs}"
您可以将您的powershell命令保存在ps1文件中,并将路径作为参数($ ScriptPath)。通过运行指定的代码,在C#上测试此powershell命令。希望这可以帮助。如果没有,那么我建议使用来自C#System.Diagnostics名称空间的进程。