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

如何在PowerShell中捕获外部命令进度?,powershell,robocopy,Powershell,Robocopy,我正在使用PowerShell脚本在网络目录之间同步文件。Robocopy正在后台运行 为了捕获输出并向用户提供统计信息,目前我正在执行以下操作: $out = (robocopy $src $dst $options) 完成后,自定义windows窗体将显示一个包含输出字符串的多行文本框 但是,这样做会停止脚本执行,直到完成文件复制。由于所有其他输入屏幕都以图形对话的形式呈现给用户,因此我希望以图形方式向用户提供进度输出 是否有一种方法可以动态地从robocopy捕获stdout 那么下一个

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

为了捕获输出并向用户提供统计信息,目前我正在执行以下操作:

$out = (robocopy $src $dst $options)
完成后,自定义windows窗体将显示一个包含输出字符串的多行文本框

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

是否有一种方法可以动态地从
robocopy
捕获
stdout

那么下一个问题是:


如何使用文本框将输出导入表单?

您可以在后台运行robocopy作业并不断检查进度

Start 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

嗨,我相信你可以利用这个答案: