如何在 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
我正在使用 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