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

如何修改PowerShell脚本获取AD组成员的DisplayName而非用户名

解决AD组成员DisplayName提取问题

嘿,我来帮你搞定这个需求!你的现有脚本只是通过正则从AD组的members属性里提取了CN(也就是用户名),但要拿到成员的DisplayName,得实际去查询每个成员对应的AD对象才行——毕竟members里存的只是成员的完整DN(区分名),并没有直接存储DisplayName信息。

我给你调整了脚本,不仅能正确获取成员的DisplayName,还优化了一些细节避免报错:

# 先定义日期变量,确保生成的CSV文件名不会重复覆盖
$currentdate = Get-Date -Format "yyyyMMdd"

# 读取CSV里的AD组列表,逐个处理每组信息
Get-Content "C:\temp\glist.csv" | ForEach-Object {
    # 获取目标AD组的核心属性:名称、描述、成员列表
    $targetGroup = Get-ADGroup -Identity $_ -Properties Name, Description, Members
    
    # 遍历组内每个成员的DN,查询对应的DisplayName
    $memberNames = $targetGroup.Members | ForEach-Object {
        try {
            # 用Get-ADObject兼容所有AD对象类型(用户、组、计算机等)
            (Get-ADObject -Identity $_ -Properties DisplayName).DisplayName
        }
        catch {
            # 遇到无效成员DN时,返回提示信息,避免脚本中断
            "[无法获取该成员信息: $_]"
        }
    }

    # 组装要导出的对象
    [PSCustomObject]@{
        Name        = $targetGroup.Name
        Description = $targetGroup.Description
        Members     = $memberNames -join "; "
    }
} | Export-Csv "C:\temp\group_info_$currentdate.csv" -NoTypeInformation -Encoding UTF8

关键修改点说明:

  • 新增日期变量定义:你的原脚本里用了$currentdate但没初始化,我加了Get-Date生成格式化日期,避免每次运行覆盖旧文件。
  • 替换成员提取逻辑:不再用正则截取CN,而是通过Get-ADObject查询每个成员DN对应的AD对象,直接获取DisplayName属性,结果更准确。
  • 兼容多类型成员:用Get-ADObject而非Get-ADUser,因为AD组的成员可能包含其他组、计算机等对象,这样所有类型的成员都能获取到DisplayName。
  • 增加错误处理:加入try/catch块,就算遇到无效的成员DN(比如已被删除的对象),脚本也不会中断,而是返回提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:16:35