powershell - 如何在 PowerShell 中捕获外部命令进度?
问题描述
我正在使用 PowerShell 脚本在网络目录之间同步文件。Robocopy 在后台运行。
为了捕获输出并向用户提供统计信息,目前我正在执行以下操作:
$out = (robocopy $src $dst $options)
完成后,将显示一个自定义窗口表单,其中包含一个包含输出字符串的多行文本框。
但是,这样做会暂停脚本执行,直到文件复制完成。由于所有其他输入屏幕都以图形对话框的形式呈现给用户,因此我想以图形方式为用户提供进度输出。
有没有办法在飞行中捕获stdout
来自?robocopy
那么下一个问题将是:
如何将该输出传输到带有文本框的表单中?
解决方案
您可以在后台运行 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
推荐阅读
- javascript - 如何使用 c# 在 Selenium 中检查开关切换的状态
- javascript - 如何在同一 HTML 页面的每个新打开的选项卡或窗口中启动 JavaScript 函数?
- powershell - Powershell“特殊”开关参数
- python - 在具有重复值的 Python“列表”中查找“n”个最大元素
- c# - 在运行时决定自定义属性的值
- ios - iOS 应用程序崩溃与 UICheckBox,drawLayer:inContext
- reactjs - 反应中的钩子没有正确更新我的状态
- facebook - Facebook Graph API 是否可以从提要中检索广告?
- flutter - 按 Tab 转到下一个 TextField 会在该 TextField 上添加 /t
- java - 从另一个构造函数调用构造函数 init,其参数中包含共享对象