You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何等待所有并行作业完成后再执行后续操作

PowerShell等待并行后台作业完成的实现方案

PowerShell原生提供了和其他编程语言join()功能完全对应的命令:Wait-Job,该命令会阻塞当前执行流,直到指定的后台作业全部运行结束后,才会继续执行后续逻辑。

修正后可直接运行的代码

先修复你原代码里的几处笔误(脚本块定义漏写赋值符、cmdlet名拼写错误、变量名漏写$符号),再加入等待作业的逻辑:

# 定义停止单个服务的脚本块,用于作业并行执行
$stopService = {
  param($service)
  Stop-Service -Name $service.name -Force
}

# 查询所有匹配命名规则的目标服务
$services = Get-Service | Where-Object {$_.name -like "*XYX_*"}

# 遍历为每个服务启动独立后台作业并行执行停止操作
foreach($service in $services) {
  Start-Job -ScriptBlock $stopService -ArgumentList $service
}

# 阻塞等待所有已启动的停服务作业执行完成,等价于其他语言的join()操作
Get-Job | Wait-Job

# 所有作业全部执行完成后,才会运行后续逻辑
$doSomethingElse

优化建议

  • 如果你的PowerShell会话里之前已经启动过其他无关后台作业,不建议直接用Get-Job获取全量作业等待,可以把本次启动的作业对象单独存到变量里定向等待,避免不必要的阻塞:
# 启动作业时同步收集作业对象
$stopServiceJobs = foreach($service in $services) {
  Start-Job -ScriptBlock $stopService -ArgumentList $service
}
# 仅等待本次启动的停服务作业完成
$stopServiceJobs | Wait-Job
  • 作业执行完成后如果不需要留存作业的输出、执行状态记录,可以在等待命令后追加| Remove-Job清理作业对象,释放会话占用的资源。

内容的提问来源于stack exchange,提问作者Chris F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.11 16:16:23