PowerShell Start-Job 同步输出

7
我有一段 PowerShell 脚本,用于启动一个作业。
start-job -scriptblock { 
  while($true) {
    echo "Running"
    Start-Sleep 2
  }
}

然后它继续执行脚本的其余部分。

这个工作,类似于监视该进程的PID。

我想每n秒同步打印PID,而无需结束该任务。

例如,在执行脚本的其余部分时,我想在我的控制台中看到输出。

在PowerShell中是否有这样的可能性?

谢谢。

1个回答

13

是的,你可以使用事件:

$job = Start-Job -ScriptBlock { 
  while($true) {
    Register-EngineEvent -SourceIdentifier MyNewMessage -Forward
    Start-Sleep -Seconds 3
    $null = New-Event -SourceIdentifier MyNewMessage -MessageData "Pingback from job."
  }
}

$event = Register-EngineEvent -SourceIdentifier MyNewMessage -Action {
  Write-Host $event.MessageData;
}

for($i=0; $i -lt 10; $i++) {
  Start-Sleep -Seconds 1
  Write-Host "Pingback from main."
}

$job,$event| Stop-Job -PassThru| Remove-Job #stop the job and event listener

感谢此答案提供的帮助。其他有用的链接:


2
谢谢你,Neolisk。确实是个好答案。我不知道PowerShell中有关事件的内容。这是一个很好的开始了解它。再次感谢。 - nikkatsa
太棒了!事件真是太棒了。 - Droj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接