请求指导:编写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
关键修正说明
- 原脚本问题修复:你之前的脚本中
$Group是经过Select-Object Name的对象,直接赋值给GroupName会输出对象信息而非纯组名,需改用$group.Name获取字符串格式的组名。 - 过滤非用户成员:添加
Where-Object {$_.objectClass -eq "user"}避免将嵌套组、计算机等非用户对象纳入结果。 - 性能优化:直接获取AD组对象而非仅组名,减少后续查询的重复操作。
内容的提问来源于stack exchange,提问作者WebTek
相关产品推荐
相关产品推荐

