PowerShell并行运行两个进程,并在终端中显示组合的stdout

时间:2017-10-30 18:57:17

标签: powershell

我希望得到一些帮助,将PowerShell脚本放在一起,启动两个进程(在我的情况下,两个服务器监视文件更改并报告,连续向stdout写入内容)并将它们各自的输出混合到一个终端窗口中?

我对写入文件不感兴趣。我想在同一个PowerShell终端窗口中监视两个交织在一起的输出流。我知道,在某些方面会有未完成的"未完成的"来自一个进程的块与其他进程交织在一起等等,但我不介意。

将这两个脚本视为输入:

left.ps1

echo 0
Start-Sleep 1
echo 1
Start-Sleep 2
echo 2
Start-Sleep 3
echo 3
Start-Sleep 4
echo 4
Start-Sleep 5
echo "done numbers"

right.ps1

echo A
Start-Sleep 1
echo B
Start-Sleep 2
echo C
Start-Sleep 3
echo D
Start-Sleep 4
echo E
Start-Sleep 5
echo "done letters"

所需的输出是:

0
A
1
B
2
C
3
D
4
E
done numbers
done letters

如果两个已启动的进程都死亡,并且在^C上杀死已启动的进程,那么进程就会很好,但这两个都不是必需的。

我正在使用Windows,因此只支持Windows的答案很好。如果可能,我不想使用tmuxscreen。 (我对Cygwin不感兴趣,而且我不想要两列,而是混合使用stdouts。) WSL解决方案也很有趣。

1 个答案:

答案 0 :(得分:3)

您可以将Start-Process cmdlet与-NoNewWindow开关一起使用,以启动连接到同一控制台窗口的新独立控制台应用程序:

Start-Process -NoNewWindow process1 arguments1
Start-Process -NoNewWindow process2 arguments2

如果您想以这种方式启动PowerShell脚本,那么您需要为它启动新的PowerShell流程:

Start-Process -NoNewWindow powershell '-File script1.ps1'
Start-Process -NoNewWindow powershell '-File script2.ps1'