У меня есть скрипт, который создает некоторые процессы с помощью команды Start-Process. Могут быть запущены сотни процессов. Сценарий работает просто отлично, но я надеюсь, что кто-нибудь может предоставить мне более элегантный способ проверить, все ли запущенные процессы завершены? Тот, который не требует никакого ввода, поскольку я ищу создание автоматизированного решения.
Ниже приведен пример кода.
$procList = @()
$cmd = "C:\Windows\SysWOW64\PING.EXE"
$cmdArgs = " nos3nse.com"
$proc1 = Start-Process $cmd -ArgumentList $cmdArgs -PassThru
$proc2 = Start-Process $cmd -ArgumentList $cmdArgs -PassThru
$proc3 = Start-Process $cmd -ArgumentList $cmdArgs -PassThru
$procObject = New-Object psobject -Property @{
id = $proc1.Id
name = $proc1.Name
startTime = $proc1.StartTime
dtlLogFile = $dtlLogFileTemp
}
$procList += $procObject
$procObject = New-Object psobject -Property @{
id = $proc2.Id
name = $proc2.Name
startTime = $proc2.StartTime
dtlLogFile = $dtlLogFileTemp
}
$procList += $procObject
$procObject = New-Object psobject -Property @{
id = $proc3.Id
name = $proc3.Name
startTime = $proc3.StartTime
dtlLogFile = $dtlLogFileTemp
}
$procList += $procObject
# Is there a better way to find out if these jobs have all completed?
$ppFlag = $true
while ($ppFlag) {
foreach ($proc in $procList) {
$chkJob = Get-Process -id $proc.id -ErrorAction SilentlyContinue
if ($chkJob.HasExited -eq $false)
{
Write-Host ("looping")
Write-Host ("Sleeping 2 seconds") -ForegroundColor Yellow
Start-Sleep -Seconds 2
break #break foreach loop
}
} #foreach
if ($chkJob.HasExited -ne $false) { $ppFlag = $false }
} #while