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

3
我正在使用PowerShell脚本在网络目录之间同步文件。Robocopy正在后台运行。
为了捕获输出并向用户提供统计信息,我当前正在执行类似以下的操作:
$out = (robocopy $src $dst $options)

一旦完成,会呈现一个自定义的Windows窗体,其中包含一个多行文本框,其中包含输出字符串。
但是,以这种方式执行会阻止脚本执行,直到文件复制完成。由于所有其他输入屏幕都以图形对话框的形式呈现给用户,因此我希望以图形方式向用户提供进度输出。
有没有一种方法可以实时捕获robocopy的stdout输出?
那么下一个问题就是:
如何将该输出管道传输到带有文本框的表单中?

1
嗨,我相信您可以从这个答案中获得一些帮助:https://dev59.com/RGYr5IYBdhLWcg3wLnZA#21209726 - sodawillow
1个回答

3
您可以在后台运行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接