如何在多台远程服务器上并行运行PowerShell脚本并获取执行状态
PowerShell远程并行执行脚本解决方案
方案1:使用Invoke-Command原生并行能力(优先推荐)
你原有代码串行执行的原因是在foreach循环里逐台调用Invoke-Command,实际上该cmdlet本身就支持多主机并行执行,-ComputerName参数可直接传入服务器列表数组,默认并发上限为32台,你可以通过-ThrottleLimit参数自行调整并发数。同时执行结果会自动携带对应主机标识,可直接导出保存。
示例代码:
# 读取目标服务器列表 $servers = Get-Content "C:\Dumps\Scripts\servers.txt" # 并行执行脚本,此处设置并发上限为50台,可根据实际网络/硬件情况调整 $execResults = Invoke-Command -ComputerName $servers -FilePath C:\Dumps\Scripts\CompleteSilent.ps1 -ThrottleLimit 50 # 控制台查看所有执行结果 $execResults | Format-Table PSComputerName, * -AutoSize # 导出执行结果到CSV文件 $execResults | Export-Csv "C:\Dumps\Scripts\执行结果汇总.csv" -NoTypeInformation -Encoding UTF8 # 导出执行失败的服务器清单与错误信息 $failedHosts = $error | Where-Object {$_.CategoryInfo.TargetName -in $servers} | Select-Object ` @{Name="目标服务器";Expression={$_.CategoryInfo.TargetName}},` @{Name="错误信息";Expression={$_.Exception.Message}} $failedHosts | Export-Csv "C:\Dumps\Scripts\执行失败服务器.csv" -NoTypeInformation -Encoding UTF8
方案2:使用后台任务实现精细化控制
如果你需要中途查看执行进度、单独终止某台主机的执行任务,可使用轻量线程任务Start-ThreadJob(PowerShell 5.1及以上版本支持,比传统后台任务性能更高)实现自定义并行逻辑:
示例代码:
# 读取目标服务器列表 $servers = Get-Content "C:\Dumps\Scripts\servers.txt" $jobList = @() # 批量创建后台执行任务 foreach ($server in $servers) { $jobList += Start-ThreadJob -Name "任务_$server" -ScriptBlock { param($targetServer, $scriptPath) Invoke-Command -ComputerName $targetServer -FilePath $scriptPath } -ArgumentList $server, "C:\Dumps\Scripts\CompleteSilent.ps1" } # 实时查看所有任务执行状态,可随时执行该命令查看进度 $jobList | Select-Object Name, State, PSBeginTime, PSEndTime | Format-Table -AutoSize # 等待所有任务执行完成 Wait-Job $jobList | Out-Null # 获取所有任务的执行输出 $allResults = $jobList | Receive-Job # 导出执行结果 $allResults | Export-Csv "C:\Dumps\Scripts\执行结果汇总.csv" -NoTypeInformation -Encoding UTF8 # 清理已完成的后台任务 Remove-Job $jobList
注意事项
- 确保所有远程服务器已开启PowerShell远程管理:WinRM服务正常运行、防火墙放通5985(HTTP)/5986(HTTPS)端口、当前执行账号具备所有目标服务器的管理员权限
- 若执行的脚本输出内容较多,建议在脚本内部直接将日志写入远程服务器本地磁盘,避免Invoke-Command传输大体积内容时出现超时或传输失败问题
- 调整
-ThrottleLimit并发上限时不要设置过高,避免本地主机或网络带宽被占满导致执行异常
内容的提问来源于stack exchange,提问作者wid-Sam
相关产品推荐
相关产品推荐

