我的powershell脚本需要等待进程完成。此进程会生成一个子进程。
所以如果我使用
Start-Process myexe.exe -Wait
运行正常
然而,我需要我的脚本来处理这个过程没有完成的情况。例如:1小时后。
所以我的尝试是:
$process = Start-Process myexe.exe -PassThru
try {
"Waiting"
$process | Wait-Process -Timeout 3600 -ErrorAction Stop
"Done waiting"
}
catch {
"Stopping process"
Stop-Process $process -Force
}
问题是Wait-Process
立即完成,因为进程$process
是空闲的(完成?),但它的子进程不是。
那么我如何使Wait-Process
等待子进程,如Start-Process
中的-Wait
标志?
如果您使用存储在$Process
中的进程名执行get-process
,这将捕获该进程的所有实例,并允许您将所有子进程传递给Wait-Process
,请参阅下面更新的脚本
$process = Start-Process myexe.exe -PassThru
try {
"Waiting"
Get-Process $Process.ProcessName | Wait-Process -Timeout 3600 -ErrorAction Stop
"Done waiting"
}
catch {
"Stopping process"
Get-Process $Process.ProcessName | Stop-Process -Force
}
编辑:更新了Stop-Process以使用get-process来捕获所有子进程。