Синхронный вывод Powershell Start-job

У меня есть сценарий PowerShell, который запускает работу

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

а затем он продолжает выполнение остальной части сценария.

Эта работа является своего рода мониторингом PID этого процесса.

Я хотел бы синхронно печатать PID каждые n секунд, не завершая работу.

Например, пока выполняется остальная часть скрипта, я хотел бы видеть вывод в моей консоли.

Возможно ли что-то подобное в PowerShell?

Спасибо.


person nikkatsa    schedule 02.12.2013    source источник


Ответы (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

Благодарим этот ответ. Другие полезные ссылки:

person Neolisk    schedule 02.12.2013
comment
Спасибо Neolisk. Действительно отличный ответ. Я не знал о событиях в PowerShell. Это хорошее начало, чтобы узнать об этом. Еще раз большое спасибо. - person nikkatsa; 03.12.2013
comment
Фантастика! Мероприятия потрясающие. - person Droj; 10.06.2015