如何在 PowerShell 中捕获外部命令进度?

How to capture external command progress in PowerShell?

我正在使用 PowerShell 脚本在网络目录之间同步文件。 Robocopy 在后台 运行。

为了捕获输出并向用户提供统计信息,目前我正在做类似的事情:

$out = (robocopy $src $dst $options)

完成后,将显示一个自定义 windows 表单,其中包含一个包含输出字符串的多行文本框。

但是,这样做会停止脚本执行,直到文件复制完成。由于所有其他输入屏幕都以图形对话框的形式呈现给用户,我想以图形方式为用户提供进度输出。

有没有办法从 robocopy 即时 捕获 stdout

那么下一个问题就是:

如何将该输出通过管道传输到带有文本框的表单中?

您可以 运行 在后台执行 robocopy 作业并继续检查进度。

Start-Job 将在后台启动进程
Receive-Job 将为您提供到目前为止已打印的所有数据。

$job = Start-Job -scriptBlock { robocopy $using:src $using:dst $using:options }

$out = ""
while( ($job | Get-Job).HasMoreData -or ($job | Get-Job).State -eq "Running") { 
    $out += (Receive-job $job)
    Write-output $out 
    Start-Sleep 1
}

Remove-Job $job