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

Invoke-Command处理大规模计算机列表时抛出无效计算机名错误求助

解决Invoke-Command处理大量AD计算机时的参数错误问题

问题重现

执行以下PowerShell脚本对AD OU中的大量计算机批量操作:

$servers = Get-Adcomputer -Filter * -SearchBase 'OU=Servers,DC=Domain,DC=com'
Invoke-Command -asjob -throttlelimit 100 -computername $servers.Name -scriptblock $myscriptblock

当目标OU包含5000台以下计算机时脚本正常运行,但OU内计算机数量达到9000台时,立即抛出错误:
Invoke-Command : One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.

已尝试的无效操作:

  • 使用| Select-Object -ExpandProperty Name提取计算机名并传递给-ComputerName
  • 仅传递列表前10个计算机名时脚本可正常执行
  • 已知拆分计算机列表分批执行可行,但需调整下游流程,暂未采用

原因分析

这个问题本质有两个可能:

  1. Invoke-Command参数限制:-ComputerName对传入的字符串数组长度存在隐性上限(默认可能低于9000),超过上限后参数解析出现异常,导致误判为无效计算机名/URI。
  2. ADWS查询截断:AD Web服务(ADWS)默认的查询结果集大小限制为5000,当查询超过5000条数据时,结果可能被截断或返回不完整的条目,导致后续传递给Invoke-Command的计算机名列表存在异常值。

可行解决方案

1. 自动分批执行,统一管理作业

虽然拆分列表,但通过脚本自动分批并统一处理作业,既规避参数限制,又保留-AsJob的异步特性,无需大幅调整下游流程:

# 获取所有有效计算机名
$servers = Get-Adcomputer -Filter * -SearchBase 'OU=Servers,DC=Domain,DC=com' | 
    Select-Object -ExpandProperty Name

# 设置每批处理的计算机数量(建议设为4000,低于默认ADWS限制)
$batchSize = 4000

# 分批创建远程作业
for ($i = 0; $i -lt $servers.Count; $i += $batchSize) {
    $currentBatch = $servers[$i..([Math]::Min($i + $batchSize - 1, $servers.Count - 1))]
    Invoke-Command -AsJob -ThrottleLimit 100 -ComputerName $currentBatch -ScriptBlock $myscriptblock
}

# 后续统一处理所有作业(接收结果、清理作业等)
Get-Job | Wait-Job | Receive-Job
Get-Job | Remove-Job

2. 过滤AD查询结果中的异常值

AD中可能存在计算机名不符合规范的条目(比如空值、特殊字符),大量数据中这类异常会触发Invoke-Command的参数校验错误,先过滤再传递:

$servers = Get-Adcomputer -Filter * -SearchBase 'OU=Servers,DC=Domain,DC=com' | 
    # 过滤符合Windows计算机名规范的条目(仅允许字母、数字、连字符)
    Where-Object { $_.Name -match '^[a-zA-Z0-9-]+$' -and $_.Name -notmatch '^-|-$' } |
    Select-Object -ExpandProperty Name

Invoke-Command -AsJob -ThrottleLimit 100 -ComputerName $servers -ScriptBlock $myscriptblock

3. 调整ADWS的结果集大小限制(需AD管理员权限)

如果确认是ADWS查询截断导致的问题,可以修改ADWS配置提升结果集上限:

  1. 打开ADWS配置文件:C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe.config
  2. 找到配置项<add key="MaxResultSetSize" value="5000" />,将值修改为10000(或更大的符合需求的数值)
  3. 重启ADWS服务:Restart-Service ADWS

注意:此操作会增加AD服务器的负载,需评估后执行,且修改后需验证是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:45:21