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

将AD组A成员复制到组B时遇请求大小限制报错求助

解决AD组超过10000成员时的复制问题

问题分析

  • Get-ADGroupMember 默认有10000条结果的限制,当组成员超过这个数量时会触发「请求大小限制超出」错误。
  • 原脚本每次循环都重复查询Group B的成员,性能极差;且用Name判断成员是否存在容易出错(AD允许同名用户/组),同时判断逻辑写反(存在时反而执行添加操作)。

解决方案

核心思路

  1. 突破10000条限制:用Get-ADGroup读取组的member属性,AD模块会自动处理分页,支持获取超量成员。
  2. 优化性能:提前一次性获取Group B的所有递归成员,避免循环内重复查询。
  3. 精准批量添加:用唯一标识(distinguishedName)判断成员是否存在,筛选出需添加的成员后批量操作,减少AD交互次数。

修正后的脚本

# 获取Group A的所有成员DN(突破10000条限制)
$groupAMembers = (Get-ADGroup -Identity "Group A" -Properties member).member

# 获取Group B的所有递归成员DN
$groupBMembers = Get-ADGroupMember -Identity "Group B" -Recursive | Select-Object -ExpandProperty distinguishedName

# 筛选出Group A中不在Group B的成员
$membersToAdd = $groupAMembers | Where-Object { $_ -notin $groupBMembers }

# 批量添加成员(仅当有需要添加的成员时执行)
if ($membersToAdd.Count -gt 0) {
    Add-ADGroupMember -Identity "Group B" -Members $membersToAdd
    Write-Host "成功添加 $($membersToAdd.Count) 个成员到Group B"
} else {
    Write-Host "Group B已包含Group A的所有成员,无需操作"
}

补充说明

如果Group A包含嵌套组,需要将嵌套组内的成员也复制到Group B(而非复制组本身),可以使用递归函数展开所有成员:

# 递归获取组的所有成员(包括嵌套组内的用户/组)
function Get-ADGroupAllMembers {
    param([string]$GroupIdentity)
    $group = Get-ADGroup -Identity $GroupIdentity -Properties member
    foreach ($memberDN in $group.member) {
        $member = Get-ADObject -Identity $memberDN
        if ($member.ObjectClass -eq 'group') {
            Get-ADGroupAllMembers -GroupIdentity $memberDN
        } else {
            $memberDN
        }
    }
}

# 获取Group A的所有递归成员
$groupAMembers = Get-ADGroupAllMembers -GroupIdentity "Group A"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:13