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

AD组Member.Count结果与实际用户数不符问题求助

问题原因分析

1. 嵌套组未递归展开

你第一个命令用Get-ADGroup的Member属性统计的是直接添加到组的成员,不会自动展开嵌套在组内的其他组中的用户;而导出CSV的命令用了Get-ADGroupMember -Recursive,会递归遍历所有嵌套组,把其中的用户也纳入统计,这是数量差异的核心原因。

另外,Member属性还会包含组、计算机等非用户对象,直接取Count会把这些也算进去,而你手动核查的是用户账户数量,这也会导致偏差。

2. AD属性的返回限制

当AD组的成员数量超过服务器默认的属性返回上限(通常为1500条,取决于AD配置),Get-ADGroup不会一次性返回所有Member值,而是采用分段(Range)返回的方式。此时直接读取$_.Member.Count只能拿到当前分段的成员数,而非总数。


准确获取用户计数的方法

根据你的需求,分为两种场景给出解决方案:

场景1:统计组的直接用户成员(不含嵌套组)

$groups = Get-Content 'C:\Users\File.txt'
Foreach($group in $groups) {
    # 获取直接成员并过滤出用户对象
    $directUserCount = (Get-ADGroupMember -Identity $group | Where-Object { $_.objectClass -eq 'user' }).Count
    # 输出结构化结果
    [PSCustomObject]@{
        'Group Name' = $group
        'Direct User Count' = $directUserCount
    }
}

场景2:统计所有嵌套用户(与CSV导出结果一致)

方法1:用Get-ADGroupMember递归统计

$groups = Get-Content 'C:\Users\File.txt'
Foreach($group in $groups) {
    # 递归获取所有成员并过滤用户
    $totalUserCount = (Get-ADGroupMember -Identity $group -Recursive | Where-Object { $_.objectClass -eq 'user' }).Count
    [PSCustomObject]@{
        'Group Name' = $group
        'Total User Count (Including Nested)' = $totalUserCount
    }
}

方法2:用LDAP过滤器高效查询(适合大组)

针对成员极多的组,用LDAP的LDAP_MATCH_RULE_IN_CHAIN规则查询效率更高,避免递归遍历的性能问题:

$groups = Get-Content 'C:\Users\File.txt'
Foreach($group in $groups) {
    # 获取组的DistinguishedName
    $groupDN = (Get-ADGroup -Identity $group).DistinguishedName
    # 递归查询所有属于该组的用户
    $totalUsers = Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$groupDN)"
    [PSCustomObject]@{
        'Group Name' = $group
        'Total User Count (Including Nested)' = $totalUsers.Count
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:36