Продолжить выполнение, когда все запущенные процессы "console exe" завершены - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь продолжить выполнение моего основного скрипта, как только все «другие .exe excexution» выполнены

Пример:

$Nb = 3
for($i=1;$i -le $Nb;$i++){
Start-Process -FilePath "$DirectoryContainingEXE\Test$i\test$i.exe"
}
#Start-Sleep -Seconds 60
Write-Host "We are done"

Мне нужно сообщение «Мыготово "напечатано один раз: консоли test1.exe, test2.exe и test3.exe исчезают (я не могу использовать Start-Sleep, потому что игнорирую, сколько это займет)

Примечание: я использую PS2EXE

Помогите пожалуйста!

1 Ответ

1 голос
/ 30 октября 2019

Используйте параметр -PassThru при запуске процесса с Start-Process, чтобы получить идентификатор процесса. После этого вы можете проверить каждый идентификатор процесса, если он все еще работает.

#Start processes
[System.Collections.ArrayList]$Processes = @()
for ($i = 0; $i -lt 5; $i ++)
{
    $Processes += Start-Process -FilePath powershell.exe -ArgumentList "-Command Start-Sleep -Seconds 5; exit" -PassThru

}

#Wait for processes
[System.Int16]$FinishedProcesses = 0
while ($FinishedProcesses -ne $Processes.Count)
{
    $FinishedProcesses = 0
    foreach ($Process in $Processes)
    {
        if (-not (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue))
        {
            $FinishedProcesses ++
        }
    }
}

Write-Output -InputObject 'We are done'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...