我正在尝试使用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调用后结束调试会话,脚本会继续运行,并且锁定其完成的任何内容现在都已消失,并且它将继续运行完成。
任何想法都赞赏。
谢谢!
答案 0 :(得分:0)
要检查的两件事,你的论点的确切输出是什么?鉴于从管理员的CMD提示运行相同的脚本,看看它是否具有相同的结果。您还可以以毫秒为单位传递等待退出的超时。试试这个:
RunPSScript(startupPath + "\\stats.ps1").WaitForExit();