Ожидание в PowerShell завершения всех дочерних процессов - PullRequest
18 голосов
/ 14 февраля 2011

Я хочу выполнить несколько внешних сценариев в PowerShell одновременно, а затем дождаться завершения всех из них, прежде чем продолжить. В настоящее время я использую командлет 'start-process -NoNewWindow ...', который перебирает все дочерние процессы, но затем завершается.

Я нашел много способов дождаться завершения 1 процесса (это очевидно тривиально), но ни один из них, похоже, не работает в качестве решения моей проблемы.

Наличие эквивалента для версии UNIX в PowerShell определенно будет тем, что я ищу.

Ответы [ 2 ]

31 голосов
/ 14 февраля 2011

И не забывайте, наверное, о наиболее прямолинейном способе сделать это для множественных процессов - Wait-Process например ::100100

$procs = $(Start-Process Notepad.exe -PassThru; Start-Process Calc.exe -PassThru)
$procs | Wait-Process
7 голосов
/ 14 февраля 2011

Проверяли ли вы функцию фоновых заданий в PowerShell v2?

$job = Start-Job -Name "Proc1" -ScriptBlock { Sleep 10000 }
Wait-Job -Job $job

Кроме того, в Start-Process есть параметр с именем -wait. Если указано, Start-Process будет ожидать выхода дочернего элемента.

Start-Process -FilePath calc.exe -Wait
...