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

VBA LDAP查询无法返回用户所有所属组的问题求助

解决AD用户所属组查询不全的问题

我之前也踩过类似的坑——明明用户确实在Domain Users组里,但查询结果就是不显示,大概率是因为Domain Users是这个用户的主组(Primary Group),而常规的MemberOf查询不会返回主组信息,主组是存在用户对象的primaryGroupID属性里的,不是MemberOf集合的一部分。

咱们一步步来解决:

1. 先确认问题根源

如果你用的是类似这样的PowerShell命令:

Get-ADUser Kyle -Properties MemberOf | Select-Object -ExpandProperty MemberOf

这个命令只会返回用户直接加入的组,而主组(比如默认的Domain Users)不会出现在MemberOf里,必须单独查询。

2. 基础解决方案:包含主组的查询

用这段脚本可以同时获取直接组和主组:

# 获取用户对象,同时拉取MemberOf和primaryGroupID属性
$targetUser = Get-ADUser Kyle -Properties MemberOf, primaryGroupID

# 获取所有直接所属的组
$directGroups = $targetUser.MemberOf | Get-ADGroup

# 通过primaryGroupID匹配主组
$primaryGroup = Get-ADGroup -Filter "primaryGroupID -eq $($targetUser.primaryGroupID)"

# 合并并输出所有组名
($directGroups + $primaryGroup) | Select-Object Name

运行这个就能看到Domain Users和RDOC Group了。

3. 进阶:如果还有嵌套组需要查询

如果用户还通过嵌套组间接加入了其他组(比如RDOC Group属于某个父组,用户间接继承),上面的脚本还是会漏。这时候可以用递归函数来获取所有直接+间接+主组:

# 递归获取组的所有嵌套父组
function Get-NestedADGroups {
    param(
        [Microsoft.ActiveDirectory.Management.ADGroup]$Group
    )
    $nestedGroups = $Group.MemberOf | Get-ADGroup -Properties MemberOf
    foreach ($nestedGroup in $nestedGroups) {
        $nestedGroup
        Get-NestedADGroups -Group $nestedGroup
    }
}

# 获取用户的所有所属组(直接+间接+主组)
function Get-AllUserGroups {
    param(
        [string]$Username
    )
    $user = Get-ADUser $Username -Properties MemberOf, primaryGroupID
    
    # 获取主组
    $primaryGroup = Get-ADGroup -Filter "primaryGroupID -eq $($user.primaryGroupID)"
    $allGroups = @($primaryGroup)
    
    # 获取直接组及其嵌套父组
    foreach ($groupDN in $user.MemberOf) {
        $directGroup = Get-ADGroup $groupDN -Properties MemberOf
        $allGroups += $directGroup
        $allGroups += Get-NestedADGroups -Group $directGroup
    }
    
    # 去重后返回组名
    $allGroups | Select-Object -Unique Name
}

# 调用函数查询Kyle的所有组
Get-AllUserGroups -Username Kyle

额外排查点

  • 可以先验证Domain Users的primaryGroupID:Get-ADGroup "Domain Users" | Select-Object primaryGroupID,然后对比Kyle用户的primaryGroupID是否一致,确认它确实是主组。
  • 如果用的是其他工具(比如第三方AD查询工具),检查工具设置里是否有“包含主组”或“显示所有组”的选项,可能默认没开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:53