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

如何通过LDAP导出AD指定组用户及完整汇报层级信息至CSV

AD指定用户组导出用户详情+全链路汇报链到CSV实现方案

实现思路

单条LDAP查询无法直接递归获取完整上下级链路,因为AD的manager属性仅存储用户的直接上级可分辨名称(DN),需要结合递归查询逻辑实现全链路追踪,用PowerShell调用AD模块是域环境下最简便的实现方式,无需额外第三方工具。

前置条件

  • 在已加入域的机器上操作,提前安装RSAT AD PowerShell模块(普通域用户默认拥有AD属性读权限,无需域管权限)
  • 提前确认要查询的目标AD用户组的完整名称

操作步骤

  1. 以普通域用户身份打开PowerShell,执行下方脚本,将脚本内你的目标用户组名、导出文件保存路径替换为实际环境值
  2. 脚本会自动递归展开目标组内的嵌套组成员,对每个用户循环向上追踪上级,直到碰到无manager属性的顶层账号自动停止,同时会自动规避汇报链循环的脏数据避免死循环
  3. 执行完成后直接在指定路径生成CSV文件,可直接用Excel打开编辑
# 导入AD模块
Import-Module ActiveDirectory

# --------------------- 配置项 start ---------------------
$targetGroupName = "你的目标用户组名"
$exportCsvPath = "C:\temp\AD用户带汇报链导出.csv"
# --------------------- 配置项 end ---------------------

# 递归查询目标组所有用户成员(自动匹配嵌套组内用户)
$groupDN = (Get-ADGroup -Filter "Name -eq '$targetGroupName'").DistinguishedName
$users = Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=$groupDN))" -Properties displayName,mail,employeeID,department,title,manager

$result = @()
foreach ($user in $users) {
    $managerChain = @()
    $currentDN = $user.DistinguishedName
    $processedDN = @() # 记录已处理的DN,避免循环汇报导致死循环
    while ($true) {
        $currentUser = Get-ADUser -Identity $currentDN -Properties displayName,manager -ErrorAction SilentlyContinue
        if (-not $currentUser -or $processedDN -contains $currentDN) { break }
        $processedDN += $currentDN
        if (-not $currentUser.manager) { break }
        $managerInfo = Get-ADUser -Identity $currentUser.manager -Properties displayName -ErrorAction SilentlyContinue
        if ($managerInfo) {
            $managerChain += $managerInfo.displayName
            $currentDN = $managerInfo.DistinguishedName
        } else {
            break
        }
    }
    # 组装导出字段,可按需增减
    $result += [PSCustomObject]@{
        登录账号 = $user.SamAccountName
        显示姓名 = $user.displayName
        邮箱 = $user.mail
        工号 = $user.employeeID
        部门 = $user.department
        职位 = $user.title
        全链路汇报线 = ($managerChain -join " > ")
    }
}

# 导出CSV,指定UTF8编码避免中文乱码
$result | Export-Csv -Path $exportCsvPath -NoTypeInformation -Encoding UTF8

核心LDAP查询语法说明

如果需要在其他LDAP客户端(比如ldp、第三方系统对接)使用,核心查询规则如下:

  • 递归查询指定组所有用户的LDAP过滤语句:
    (&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=<目标组的完整DN>))
    其中OID1.2.840.113556.1.4.1941是AD专属的递归匹配规则,会自动识别嵌套组内的成员,无需手动逐层拆分组
  • 单条LDAP查询仅可获取用户的直接上级DN,要获取完整链路必须循环对每个上级的DN发起查询,直到manager属性为空为止
  • 常用拉取的用户属性对应关系:
    • sAMAccountName:域登录账号
    • displayName:显示姓名
    • mail:企业邮箱
    • employeeID:工号
    • department:所属部门
    • manager:直接上级DN

效果参考

AD用户带汇报链导出示例
导出的CSV中全链路汇报线会按从直接上级到最高级的顺序用>分隔,和示例展示效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:01:29