从通配符匹配AD组导出成员属性并添加所属组信息
解决AD组成员导出时附带所属组信息的问题
我来帮你调整PowerShell代码,让每条成员记录都带上对应的所属AD组信息~
核心思路
原代码的问题是在获取用户属性时,没有把当前遍历的组名关联进去。我们可以通过自定义计算属性的方式,把组名添加到每条用户记录中,同时还能优化代码效率,只获取你需要的用户属性。
优化后的完整代码
# 第一步:获取所有名称以"Group"开头的AD组 $targetGroups = Get-ADGroup -Filter {Name -like "Group*"} | Select-Object Name # 初始化一个数组用来存储最终结果(可选,方便后续导出) $exportResults = @() # 遍历每个目标组 foreach ($group in $targetGroups) { # 获取组的递归成员,过滤只保留用户对象(排除组、计算机等) $groupMembers = Get-ADGroupMember -Identity $group.Name -Recursive | Where-Object {$_.objectClass -eq "user"} # 遍历每个成员用户 foreach ($member in $groupMembers) { # 获取用户的关键属性(按需指定,避免获取所有属性拖慢速度) $userDetails = Get-ADUser -Identity $member.SamAccountName -Properties EmailAddress, LastLogonDate # 构造包含组信息的自定义对象 $record = [PSCustomObject]@{ 所属AD组 = $group.Name 用户名 = $userDetails.Name 账号名 = $userDetails.SamAccountName 邮箱地址 = $userDetails.EmailAddress 账号状态 = if ($userDetails.Enabled) {"已启用"} else {"已禁用"} 最后登录时间 = $userDetails.LastLogonDate } # 将记录加入结果数组 $exportResults += $record } } # 导出结果到CSV文件(可选,按需启用) $exportResults | Export-Csv -Path "AD组成员列表.csv" -Encoding UTF8 -NoTypeInformation
关键细节说明
- 过滤成员类型:用
Where-Object {$_.objectClass -eq "user"}确保只处理用户成员,避免把组或计算机也包含进来(如果不需要过滤可以删除这一行)。 - 自定义属性:通过
[PSCustomObject]构造记录,把当前组名$group.Name作为固定字段加入,让每条记录都能关联到所属组。 - 属性按需获取:
Get-ADUser的-Properties参数只指定需要的属性(比如邮箱、最后登录时间),比-Properties *更高效。 - 导出CSV:最后一行代码可以把结果导出为CSV文件,方便后续查看或处理。
如果需要调整输出的属性,直接修改[PSCustomObject]里的字段和Get-ADUser的-Properties参数即可~
内容的提问来源于stack exchange,提问作者SoulCake
相关产品推荐
相关产品推荐

