来自C#的Powershell进程';t完成

本文关键字:完成 进程 Powershell 来自 | 更新日期: 2023-09-27 18:20:22

我正试图用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调用后结束调试会话,脚本就会继续运行,而锁定它完成的东西现在都不见了,它会继续运行到完成。

任何想法都值得赞赏。

谢谢!

来自C#的Powershell进程';t完成

要检查的两件事是,您的参数的确切输出是什么?假设以管理员身份从CMD提示符下运行相同的脚本,并查看是否有相同的结果。您还可以将超时值传递给等待退出(以毫秒为单位)。试试这个:

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