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

如何将AD组成员查询结果的DistinguishedName转换为Name/DisplayName

多域AD组成员查询:将DistinguishedName转换为Name/DisplayName

问题背景

需查询特定域内AD组的成员,成员(含用户、子组)可能来自不同域。当前脚本仅返回成员的DistinguishedName格式数据,需转换为Name或DisplayName属性。

当前脚本及输出

获取成员DN的脚本:

$grp = GROUPNAME1
    
$DNOUT = get-adgroup -identity $grp -properties member -server "DOMAIN.GROUP" | sort name | select-object -expandproperty member

$DNOUT

执行输出:

CN=AC1,OU=F1,DC=d1,DC=domain,DC=group
CN=GR30,OU=G4,DC=d3,DC=domain,DC=group
CN=AC23,OU=F2,DC=dXF,DC=domain,DC=group
CN=AC16,OU=F7,DC=d1,DC=domain,DC=group

尝试的方法及错误

尝试通过管道获取AD对象属性,但每个成员均触发**"Get-ADObject : 服务器返回了一个引用"**错误,脚本如下:

try {
    Get-ADgroup -Identity $grp -Properties member -Server "mydomain.com" | 
        select -object -Expand Member | 
        Get-ADObject -Properties * | 
        Sort-Object Name | 
        select Name
} catch {
    $_.Exception.Referral
}

解决方案

跨域查询时Get-ADObject默认不自动跟随引用,需通过以下两种方式处理:

方法1:使用全局编录查询

全局编录(默认端口3268)可查询整个AD林内的对象,无需逐个解析域,效率更高:

$grp = "GROUPNAME1"
# 指定全局编录服务器(格式:域名:3268)
$globalCatalog = "DOMAIN.GROUP:3268"

# 获取组成员DN列表
$memberDNs = Get-ADGroup -Identity $grp -Properties member -Server "DOMAIN.GROUP" | 
             Select-Object -ExpandProperty member

# 遍历查询每个成员的Name属性
foreach ($dn in $memberDNs) {
    try {
        Get-ADObject -Identity $dn -Properties Name, ObjectClass -Server $globalCatalog | 
        Select-Object Name, ObjectClass
    } catch {
        Write-Warning "无法查询对象 $dn : $_"
    }
}

方法2:从DN解析域并指定对应服务器

若不想用全局编录,可从DN中提取域组件,拼接成对应域的服务器地址:

$grp = "GROUPNAME1"
$memberDNs = Get-ADGroup -Identity $grp -Properties member -Server "DOMAIN.GROUP" | 
             Select-Object -ExpandProperty member

foreach ($dn in $memberDNs) {
    # 从DN中提取DC段,拼接成域服务器地址
    $domainComponents = ($dn -split ",DC=" | Where-Object { $_ -match '\w+' }) -join "."
    $domainServer = $domainComponents

    try {
        Get-ADObject -Identity $dn -Properties Name, DisplayName -Server $domainServer | 
        Select-Object Name, DisplayName, ObjectClass
    } catch {
        Write-Warning "无法查询对象 $dn : $_"
    }
}

关键提示

  • 避免使用-Properties *,仅指定需要的属性(如Name、DisplayName)可大幅提升查询速度。
  • 加入错误捕获可跳过无效对象,防止脚本中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:48:27