Add-ADGroupMember添加成员限制咨询:大数量用户添加报错
关于Add-ADGroupMember批量添加成员的限制及问题解决
核心限制说明
- 单次请求成员数量上限:Active Directory Web服务(ADWS)默认限制单次请求的对象数量为10000个,这就是你添加10000个用户正常、20000个时报错的直接原因。ADWS设置这个阈值是为了防止超大请求拖垮服务。
- 请求数据包大小限制:即使拆分成员数量,单个请求的数据包大小也不能超过ADWS默认的16MB上限。如果成员对象附带的属性较多,可能不到10000个就触发限制。
错误原因分析
你一次性传入20000个成员,直接超出了ADWS的单次对象数限制,服务会直接拒绝该请求,抛出的"无法联系服务器"属于误导性提示,实际是请求超限被拦截,而非真的无法连接服务器。
修复方案:分批次处理
把成员列表拆分成每批次不超过10000个(建议留500个余量,避免触发阈值),循环执行添加操作:
$ADUsers = Import-Csv C:\test.csv $UsernameList = $ADUsers.username $BatchSize = 9500 # 批次大小设为9500,留缓冲空间 $ADGroup = Get-ADGroup "testing" # 提前获取组对象,减少重复查询 # 分批次循环添加 for ($i = 0; $i -lt $UsernameList.Count; $i += $BatchSize) { # 截取当前批次的用户列表,避免越界 $CurrentBatch = $UsernameList[$i..([Math]::Min($i + $BatchSize - 1, $UsernameList.Count - 1))] Add-ADGroupMember -Identity $ADGroup -Members $CurrentBatch -Confirm:$false Write-Host "已完成批次 $([Math]::Floor($i/$BatchSize) + 1),成功添加 $($CurrentBatch.Count) 个用户" }
额外优化建议
- 过滤无效用户:添加前先验证用户是否存在于AD中,避免无效对象导致批次失败:
# 筛选出AD中存在的有效用户名 $ValidUsernames = $UsernameList | ForEach-Object { if (Get-ADUser -Filter "SamAccountName -eq '$_'" -ErrorAction SilentlyContinue) { $_ } }
- 添加重试机制:针对临时网络或服务波动,增加重试逻辑提升稳定性:
$RetryCount = 3 $Batches = for ($i = 0; $i -lt $ValidUsernames.Count; $i += $BatchSize) { $ValidUsernames[$i..([Math]::Min($i + $BatchSize - 1, $ValidUsernames.Count - 1))] } foreach ($batch in $Batches) { $Success = $false $Attempt = 0 while (-not $Success -and $Attempt -lt $RetryCount) { try { Add-ADGroupMember -Identity $ADGroup -Members $batch -Confirm:$false -ErrorAction Stop $Success = $true } catch { $Attempt++ Write-Warning "批次添加失败,第 $Attempt 次重试:$($_.Exception.Message)" Start-Sleep -Seconds 5 # 重试前等待5秒 } } }
内容的提问来源于stack exchange,提问作者nishat
相关产品推荐
相关产品推荐

