从c#运行powershell脚本

时间:2018-04-08 12:03:39

标签: c# powershell

我正在尝试用我的应用程序中的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

的示例

注意:我的应用以管理员身份运行。

1 个答案:

答案 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名称空间的进程。