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

排查:检查TXT文件用户是否属于两个超5000成员的AD组

解决AD大组(成员超5000)的用户归属检查问题

原脚本存在两个核心问题导致失效:

  • 每次循环重复查询AD组,效率极低且浪费AD服务资源
  • Get-ADGroupMember受AD默认页面大小限制,无法获取超过5000条的成员数据

以下是两种可行的优化方案:

方案一:一次性获取所有组成员(适配大组)

通过直接读取AD组的member属性获取所有成员DN,再提取samaccountname并存储到哈希表(实现高速查询),最后对比用户列表:

# 读取用户列表
$userList = Get-Content -Path "C:\users\Administrator\Downloads\users.txt"
# 目标组名称
$targetGroup = "Fun-O365-EXO"

# 获取目标组的所有成员DN,绕过5000条限制
$group = Get-ADGroup -Identity $targetGroup -Properties member
# 提取所有成员的samaccountname并存入哈希表(键为samaccountname,值为$true)
$groupMembers = @{}
foreach ($memberDN in $group.member) {
    $samAccountName = (Get-ADObject -Identity $memberDN -Properties samaccountname).samaccountname
    $groupMembers[$samAccountName] = $true
}

# 遍历用户列表,筛选不在组内的用户
$result = foreach ($user in $userList) {
    if (-not $groupMembers.ContainsKey($user)) {
        [PSCustomObject]@{
            Name  = $user
            Group = $targetGroup
        }
    }
}

Write-Host "以下用户不属于$targetGroup:"
$result

方案二:反向查询用户的组归属(更高效)

不需要加载所有组成员,直接查询每个用户的memberOf属性,判断是否包含目标组:

# 读取用户列表
$userList = Get-Content -Path "C:\users\Administrator\Downloads\users.txt"
# 获取目标组的DN(避免每次查询组名称)
$targetGroupDN = (Get-ADGroup -Identity "Fun-O365-EXO").DistinguishedName

# 遍历用户列表,检查归属
$result = foreach ($user in $userList) {
    try {
        $adUser = Get-ADUser -Identity $user -Properties memberOf
        if ($adUser.memberOf -notcontains $targetGroupDN) {
            [PSCustomObject]@{
                Name  = $user
                Group = "Fun-O365-EXO"
            }
        }
    } catch {
        # 处理不存在的用户
        [PSCustomObject]@{
            Name  = $user
            Group = "Fun-O365-EXO"
            Note  = "用户不存在于AD中"
        }
    }
}

Write-Host "以下用户不属于Fun-O365-EXO:"
$result

额外优化建议

  • 若需要检查两个大组,只需复制对应逻辑,或合并哈希表/组DN列表进行批量检查
  • 哈希表查询的速度远快于数组匹配,用户列表越长,优势越明显
  • 反向查询方案适合用户数量远小于组成员数量的场景,能大幅降低AD服务负载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:32:26