2013-12-02 3 views
5

У меня есть сценарий PowerShell, который запускает заданиеPowershell Запуск задания синхронного вывода

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

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

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

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

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

Возможно ли подобное в powershell?

Спасибо.

ответ

11

Да, вы можете использовать событие:

$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. Другие полезные ссылки:

+2

Спасибо Neolisk. Отличный ответ. Я не знал о событиях в PowerShell. Это хорошее начало узнать об этом. Еще раз спасибо. – nikkatsa

+0

Фантастический! События потрясающие. – Droj

Смежные вопросы