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

如何在多台远程服务器上并行运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:00:03