首页 > 解决方案 > Powershell - 使用 Write-Progress 显示可执行文件的控制台输出?

问题描述

我有一个 Windows 可执行文件,我使用以下命令从 powershell 运行:

&$命令 | 超出默认值

该命令可能需要几分钟才能运行,并且会定期向控制台输出消息以显示其状态。当我使用上述样式通过 powershell 运行此可执行文件时,我会看到可执行文件输出的消息显示在 powershell 窗口中。看起来不错,但我想开始使用 Write-Progress 来显示执行命令的状态。

有没有办法动态地将这个可执行文件的输出(当它运行时)提供给 Write-Progress,以便它可以显示一个进度条,并将消息设置为可执行文件的最后一行输出?

标签: powershellconsoleexecutable

解决方案


将标准输出消息作为进度状态更新中继可以通过简单地将输出从可执行文件传递到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

推荐阅读