PowerShell 并行运行两个进程并在终端中显示组合的标准输出

Tom*_*uer 7 powershell

我想获得一些帮助来组合一个 PowerShell 脚本,该脚本启动两个进程(在我的例子中是两台服务器,它们监视文件更改和报告,将内容连续写入标准输出)并将它们各自的输出混合到一个终端窗口中?

我对写入文件不感兴趣。我想在同一个 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"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

0
A
1
B
2
C
3
D
4
E
done numbers
done letters
Run Code Online (Sandbox Code Playgroud)

当两个启动的进程都死掉并且在 上终止启动的进程时^C,进程会死掉会很好,但这两者都不是必需的。

我正在使用 Windows,因此仅适用于 Windows 的答案就可以了。我不想使用tmuxscreen如果可能的话。(我对 Cygwin 不感兴趣,而且我不想要两列而是混合标准输出。)WSL 解决方案也很有趣。

use*_*407 12

您可以使用Start-Processcmdlet 和-NoNewWindowswitch 来启动附加到同一控制台窗口的新独立控制台应用程序:

Start-Process -NoNewWindow process1 arguments1
Start-Process -NoNewWindow process2 arguments2
Run Code Online (Sandbox Code Playgroud)

如果要以这种方式启动 PowerShell 脚本,则需要为其启动新的 PowerShell 进程:

Start-Process -NoNewWindow powershell '-File script1.ps1'
Start-Process -NoNewWindow powershell '-File script2.ps1'
Run Code Online (Sandbox Code Playgroud)