C#的Powershell流程还没有完成

时间:2015-11-03 21:43:20

标签: c# powershell process

我正在尝试使用Powershell作为进程从C#运行PS脚本,如下所示:

 ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName =   configFile.AppSettings.Settings["PSDir"].Value.ToString() + @"\powershell.exe";
        startInfo.Arguments = @"& '" + scriptPath + "'\"";
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = true;

        Process process = new Process();
        process.StartInfo = startInfo;            
        process.Start();

        return process;

我称之为这样的方法:

        Process proc = RunPSScript(startupPath + "\\stats.ps1");
        proc.WaitForExit();

程序陷入困境:

proc.WaitForExit();

我可以告诉脚本的初始部分完成但除此之外什么都没有。这不是脚本,因为我在代码之外运行它并且它运行得非常好。

当我删除WaitForExit()时,进程调用立即存在并且程序继续运行,但这并不好,因为我需要让脚本在程序的其余部分继续运行之前生成数据。

奇怪的是,如果我在启动PS调用后结束调试会话,脚本会继续运行,并且锁定其完成的任何内容现在都已消失,并且它将继续运行完成。

任何想法都赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

要检查的两件事,你的论点的确切输出是什么?鉴于从管理员的CMD提示运行相同的脚本,看看它是否具有相同的结果。您还可以以毫秒为单位传递等待退出的超时。试试这个:

RunPSScript(startupPath + "\\stats.ps1").WaitForExit();