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

如何用PowerShell获取AD组testgroup1及其嵌套组的所有成员

获取AD组及其嵌套组的全部成员

要解决你遇到的Get-ADGroupMember只能返回直接成员的问题,这里有两种实用的方法可以获取testgroup1及其所有嵌套组的全部成员:

方法一:使用LDAP递归匹配规则(推荐,性能更优)

Active Directory内置了一个特殊的LDAP匹配规则1.2.840.113556.1.4.1941(又称LDAP_MATCH_RULE_IN_CHAIN),它能让AD服务器直接递归查询目标组下的所有嵌套成员,效率比本地递归高很多,适合大型AD环境。

查询所有嵌套用户成员

# 替换为你的组的完整LDAP路径,若组名在域内唯一,也可直接用组名
Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=CN=testgroup1,OU=Groups,DC=yourdomain,DC=com)"

查询所有类型的嵌套成员(用户、组、计算机)

如果需要获取所有类型的成员,改用Get-ADObject:

Get-ADObject -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=CN=testgroup1,OU=Groups,DC=yourdomain,DC=com)" -Properties Name, ObjectClass | Select-Object Name, ObjectClass

方法二:自定义PowerShell递归函数(灵活可控)

如果你需要自定义处理逻辑(比如过滤特定成员类型、添加额外输出字段),可以写一个递归函数来遍历组结构:

function Get-NestedADGroupMembers {
    param(
        [Parameter(Mandatory=$true)]
        [string]$GroupName
    )

    # 获取当前组的所有成员
    $targetGroup = Get-ADGroup -Identity $GroupName -Properties Members
    foreach ($memberDN in $targetGroup.Members) {
        $member = Get-ADObject -Identity $memberDN -Properties Name, ObjectClass
        
        # 处理用户成员
        if ($member.ObjectClass -eq 'user') {
            Get-ADUser -Identity $memberDN -Properties DisplayName, EmailAddress | Select-Object Name, DisplayName, EmailAddress
        }
        # 遇到嵌套组则递归查询
        elseif ($member.ObjectClass -eq 'group') {
            Get-NestedADGroupMembers -GroupName $member.Name
        }
        # 可选:添加计算机成员的处理逻辑
        # elseif ($member.ObjectClass -eq 'computer') {
        #     Get-ADComputer -Identity $memberDN -Properties Name, DNSHostName | Select-Object Name, DNSHostName
        # }
    }
}

# 调用函数获取testgroup1的所有嵌套成员
Get-NestedADGroupMembers -GroupName "testgroup1"

你可以根据实际需求修改函数内部的逻辑,比如调整输出的属性、添加过滤条件等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:58