完成所有正在运行的进程“控制台exe”后,继续执行

时间:2019-10-30 00:05:27

标签: powershell

一旦所有“其他.exe排除”都完成,我将尝试继续执行我的主脚本

示例:

$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 个答案:

答案 0 :(得分:1)

使用-PassThru启动进程时,请使用参数Start-Process,以便获取进程ID。 之后,您可以检查每个进程ID(如果仍在运行)。

#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'