Warm tip: This article is reproduced from serverfault.com, please click

powershell-使用Write-Progress显示可执行文件的控制台输出?

(powershell - Using Write-Progress to show console output from an executable?)

发布于 2020-12-14 05:49:16

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

&$ command | 违约

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

有什么方法可以动态地将此可执行文件的输出(在运行时)提供给Write-Progress,以便它可以显示进度条,并将消息设置为可执行文件输出的最后一行吗?

Questioner
DaveUK
Viewed
11
Mathias R. Jessen 2020-12-14 19:06:48

可以通过简单地将可执行文件的输出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