我有一个Windows可执行文件,可以使用以下命令从powershell运行:
&$ command | 违约
该命令可能需要几分钟才能运行,并且会定期将消息输出到控制台以显示其状态。当我使用上述样式通过powershell运行此可执行文件时,我会在powershell窗口中看到可执行文件输出的消息。看起来还可以,但是我想开始使用Write-Progress来显示执行命令的状态。
有什么方法可以动态地将此可执行文件的输出(在运行时)提供给Write-Progress,以便它可以显示进度条,并将消息设置为可执行文件输出的最后一行吗?
可以通过简单地将可执行文件的输出ForEach-Object
传递到并将其传递给Write-Progress
:来完成将标准输出消息中继为进度状态更新的操作。
function Invoke-WithProgress
{
param([string]$Path)
$Actvity = "Executing '$Path'..."
# This one is optional
Write-Progress -Activity $Actvity -Status "Starting out!"
& $Path |%{
# Provide each new line of output as a status update
Write-Progress -Activity $Actvity -Status $_
}
# Complete the progress actvity
Write-Progress -Activity $Actvity -Completed
}
Invoke-WithProgress $command