powershell 后台作业能让互不依赖的任务并行运行,适合查询、下载或多台设备检查。作业运行在独立会话中,不会自动继承当前变量;同时启动过多任务也可能耗尽 cpu、内存或网络带宽,因此应限制数量并逐一收集结果。
用 Start-Job 启动独立任务
例如执行 $jobs = 1..3 | ForEach-Object { Start-Job -Name "Task$_" -ScriptBlock { param($n) Start-Sleep $n; "完成 $n" } -ArgumentList $_ }。需要传入的数据应通过 -ArgumentList 或 $using: 明确提供,不要假定后台会话能看到当前变量。

查看状态并等待全部完成
运行 $jobs | Get-Job 查看 Running、Completed 或 Failed,再执行 $jobs | Wait-Job。等待只改变前台阻塞状态,不会自动取得输出;出现 Failed 时先查看错误,不要直接把同一批任务无限重试。

收集输出并删除作业对象
执行 $results = $jobs | Receive-Job -Wait -AutoRemoveJob 收集输出并清理作业,随后检查 $results。如果还要重复读取结果,不要使用 AutoRemoveJob,可在确认保存后再运行 $jobs | Remove-Job。作业对象本身不等于命令结果,必须显式 Receive-Job。












