【问题标题】:Powershell Start-job synchronous outputPowershell Start-job 同步输出
【发布时间】:2013-12-02 18:52:24
【问题描述】:

我有一个启动作业的 powershell 脚本

start-job -scriptblock { 
  while($true) {
    echo "Running"
    Start-Sleep 2
  }
}

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

这项工作是一种监控该进程的 PID 的工作。

我想每隔 n 秒同步打印一次 PID,而不必结束作业。

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

在 powershell 中可以实现类似的功能吗?

谢谢。

【问题讨论】:

    标签: powershell scripting start-job


    【解决方案1】:

    是的,您可以使用事件:

    $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
    

    归功于this answer。其他有用的链接:

    【讨论】:

    • 谢谢 Neolisk。确实很好的答案。我不知道powershell中的事件。这是了解它的良好开端。再次非常感谢。
    • 太棒了!活动很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2021-11-22
    • 1970-01-01
    • 2018-01-02
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多