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

请求指导:编写PowerShell脚本提取198个AD组用户并按组分组生成报告

解决Active Directory组成员按组展示并导出CSV的问题

一、按要求格式在控制台输出组及成员

以下脚本会遍历指定OU下的所有组,完全匹配你给出的示例格式输出成员,同时过滤掉组内的非用户对象(如嵌套组、计算机):

# 目标OU的LDAP路径
$targetOU = "OU=1,OU=2,OU=Groups,OU=3,DC=One,DC=Two"

# 获取OU下所有AD组
$adGroups = Get-ADGroup -SearchBase $targetOU -Filter *

# 遍历每个组输出成员
foreach ($group in $adGroups) {
    # 输出组名
    Write-Host $group.Name
    # 获取组内的用户成员(过滤非用户对象)
    $groupUsers = Get-ADGroupMember -Identity $group | Where-Object {$_.objectClass -eq "user"} | Get-ADUser
    # 缩进输出每个用户名(用SamAccountName,可替换为$_.Name显示全名)
    foreach ($user in $groupUsers) {
        Write-Host "  $($user.SamAccountName)"
    }
    # 组之间空行分隔
    Write-Host ""
}

二、导出组-用户关联数据到CSV文件

CSV适合结构化数据存储,推荐导出每行对应一个用户-组关联关系的格式,方便后续用Excel、PowerBI等工具分析:

# 初始化存储数据的数组
$groupMemberRecords = @()

foreach ($group in $adGroups) {
    $groupUsers = Get-ADGroupMember -Identity $group | Where-Object {$_.objectClass -eq "user"} | Get-ADUser
    foreach ($user in $groupUsers) {
        # 构建结构化对象
        $record = [PSCustomObject]@{
            GroupName          = $group.Name
            UserSamAccountName = $user.SamAccountName
            UserFullName       = $user.Name  # 可选字段,按需保留
            UserEmail          = $user.EmailAddress  # 可选字段,按需添加
        }
        $groupMemberRecords += $record
    }
}

# 导出到CSV文件(路径可自定义)
$groupMemberRecords | Export-Csv -Path "AD_Group_Members.csv" -NoTypeInformation -Encoding UTF8

关键修正说明

  1. 原脚本问题修复:你之前的脚本中$Group是经过Select-Object Name的对象,直接赋值给GroupName会输出对象信息而非纯组名,需改用$group.Name获取字符串格式的组名。
  2. 过滤非用户成员:添加Where-Object {$_.objectClass -eq "user"}避免将嵌套组、计算机等非用户对象纳入结果。
  3. 性能优化:直接获取AD组对象而非仅组名,减少后续查询的重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:33