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

批量获取AD用户组身份并导出CSV的PowerShell脚本优化求助

批量查询AD用户组成员并导出CSV的解决方案

完整脚本

# 读取用户名列表文件(每行一个用户名)
$userList = Get-Content -Path "C:\path\to\your\users.txt"
# 初始化结果存储数组
$results = @()

foreach ($user in $userList) {
    $cleanUser = $user.Trim()
    # 跳过空行
    if ([string]::IsNullOrEmpty($cleanUser)) { continue }

    try {
        # 先验证用户存在性,避免后续命令返回模糊错误
        $adUser = Get-ADUser -Identity $cleanUser -ErrorAction Stop
        # 获取用户所属所有组的完整名称,展开属性确保不截断
        $groupNames = Get-ADPrincipalGroupMembership $adUser | Select-Object -ExpandProperty Name
        # 用分号拼接组名,CSV中完整显示所有组
        $groupsJoined = $groupNames -join ';'

        $results += [PSCustomObject]@{
            Username = $cleanUser
            Groups   = $groupsJoined
            Status   = "查询成功"
        }
    }
    catch {
        # 用户不存在时写入自定义提示
        $results += [PSCustomObject]@{
            Username = $cleanUser
            Groups   = $null
            Status   = "$cleanUser is not in the domain!"
        }
    }
}

# 导出到CSV,UTF8编码兼容Excel
$results | Export-Csv -Path "C:\path\to\output\AD_Group_Membership.csv" -NoTypeInformation -Encoding UTF8

问题解决说明

  • 解决Get-ADPrincipalGroupMembership未指定错误:先通过Get-ADUser验证用户身份,用-ErrorAction Stop强制触发异常,避免后续命令返回模糊错误信息。
  • CSV保留完整组列表:脚本直接提取组的Name属性原始值,无截断逻辑;通过-join ';'将所有组名拼接为单个字符串写入CSV,打开时若用Excel,可将Groups列设置为文本格式避免自动换行/截断,也可根据需求修改为每个组单独一行的结构。
  • 记录未找到的用户:通过try/catch捕获用户不存在的异常,在Status字段写入指定提示,保留用户名便于排查。
  • 解决组名显示不全:避免使用Format-*系列命令(这类命令会为了输出美观截断内容),直接获取原始属性值,确保组名完整输出。

核心疑问答复

  1. 导出CSV时会保留完整组列表:只要脚本中未对组名字符串做截断处理,导出的CSV会完整存储所有组名;若组数量多,拼接后的字符串可能较长,但CSV格式本身支持长文本,仅需在打开工具中设置正确的单元格格式即可完整显示。
  2. 已实现自定义未找到用户提示:脚本的catch块中已将未找到用户的Status字段设置为"$cleanUser is not in the domain!",符合需求。

内容的提问来源于stack exchange,提问作者S.Mahmood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:10:27