从指定用户组批量导出 AD域账户信息
1、文档概述
本文档面向系统管理员与运维人员,旨在指导如何从 Active Directory 域控制器中批量导出指定用户组的账户信息。文档核心内容包括一款自动化脚本的使用说明,该脚本可帮助管理员快速收集目标用户组下的域账号详细信息,从而显著提升日常运维工作效率。
2、适用范围
- Active Directory域服务器
- 域控运维管理人员
- 收集指定组的用户信息
- 快速、高效、准确
3、需求描述
权限审计,需要统计域账号拥有哪些用户组的权限。
例如,用户组分别有“购物网”、“财经网”、“远程软件”,需要统计哪些域账号有以上三个用户组的权限。
4、导出信息前准备工作
4.1域控服务器
| 系统名称 | IP地址 | 部署链接 |
| DC01(主域控) | 192.168.11.201 | 企业AD域控服务器搭建链接 |
| DC02(辅域控) | 192.168.11.202 |
4.2用户组信息
表格用户组是本次需要收集的域用户账号的权限组信息。
| 组名 | 注释 |
| 购物网 | 允许上淘宝、京东等网站权限 |
| 财经网 | 允许上中国财经等网站权限 |
| 远程软件 | 允许使用向日葵等远程控制软件 |
4.3域用户账号信息
表格用户信息是本次需要收集的域账号属性信息。
| 字段名 | 例图 |
| 姓 | ![]() |
| 名 | |
| 显示名称 | |
| 描述 | |
| 办公室 | |
| 电话号码 | |
| 电子邮件 |
4.4信息收集脚本
红色字段是需要根据实际生产进行修改:
l用户组根据实际生产需求,需要导出哪个用户组的域账号信息,就填写哪个用户组的组名
l导出文件路径,可以根据实际需求进行修改
| # 导入Active Directory模块
Import-Module ActiveDirectory
# 定义要查询的组 $Groups = @("购物网", "财经网","远程软件")
# 定义输出文件路径 $OutputPath = "C:\Export\GroupUsers_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
# 确保输出目录存在 $OutputDir = Split-Path $OutputPath -Parent if (!(Test-Path $OutputDir)) { New-Item -ItemType Directory -Path $OutputDir -Force }
# 收集所有用户信息 $AllUsers = @() $GroupStats = @()
foreach ($Group in $Groups) { Write-Host "正在处理组: $Group" -ForegroundColor Green
$GroupUserCount = 0
try { # 获取组内的所有用户 $GroupMembers = Get-ADGroupMember -Identity $Group -Recursive | Where-Object { $_.objectClass -eq 'user' }
Write-Host " 组 $Group 中找到 $($GroupMembers.Count) 个用户" -ForegroundColor Yellow
foreach ($Member in $GroupMembers) { try { # 获取用户的详细信息 $User = Get-ADUser -Identity $Member.SamAccountName -Properties *
# 获取用户所属的所有组 $UserGroups = (Get-ADUser -Identity $User.SamAccountName -Properties MemberOf).MemberOf | ForEach-Object { (Get-ADGroup $_).Name } | Where-Object { $Groups -contains $_ }
$GroupMembership = $UserGroups -join ";"
# 获取OU路径 $OUPath = ($User.DistinguishedName -replace ',CN=.*?,(.*)', '$1' -replace 'CN=.*?,', '') -replace ',', '/'
# 创建用户信息对象 $UserInfo = [PSCustomObject]@{ Name = $User.Name FirstName = $User.GivenName LastName = $User.Surname SamAccountName = $User.SamAccountName DisplayName = $User.DisplayName Description = $User.Description Office = $User.Office PhoneNumber = $User.telephoneNumber Email = $User.EmailAddress OUPath = $OUPath MemberOfGroups = $GroupMembership }
$AllUsers += $UserInfo $GroupUserCount++ Write-Host " 已处理用户: $($User.SamAccountName)" -ForegroundColor Gray } catch { Write-Warning "无法获取用户 $($Member.SamAccountName) 的详细信息: $($_.Exception.Message)" } }
# 记录组统计信息 $GroupStats += [PSCustomObject]@{ GroupName = $Group UserCount = $GroupUserCount }
Write-Host " 组 $Group 处理完成,共导出 $GroupUserCount 个账号" -ForegroundColor Green } catch { Write-Warning "无法处理组 $Group : $($_.Exception.Message)" # 记录错误组的统计信息 $GroupStats += [PSCustomObject]@{ GroupName = $Group UserCount = 0 Status = "Error: $($_.Exception.Message)" } }
Write-Host "" }
# 去重(用户可能同时在两个组中) $UniqueUserCount = ($AllUsers | Sort-Object SamAccountName -Unique).Count $AllUsers = $AllUsers | Sort-Object SamAccountName -Unique
# 导出到CSV文件 $AllUsers | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8
# 显示统计信息 Write-Host "=" * 60 -ForegroundColor Cyan Write-Host "导出统计信息:" -ForegroundColor Cyan Write-Host "=" * 60 -ForegroundColor Cyan
foreach ($Stat in $GroupStats) { if ($Stat.Status) { Write-Host "组: $($Stat.GroupName) - 导出账号: $($Stat.UserCount) [错误: $($Stat.Status)]" -ForegroundColor Red } else { Write-Host "组: $($Stat.GroupName) - 导出账号: $($Stat.UserCount)" -ForegroundColor White } }
Write-Host "-" * 60 -ForegroundColor Cyan Write-Host "去重后总用户数: $UniqueUserCount" -ForegroundColor Yellow Write-Host "导出完成!文件保存在: $OutputPath" -ForegroundColor Green
# 显示前5行作为预览 Write-Host "`n前5行数据预览:" -ForegroundColor Magenta $AllUsers | Select-Object -First 5 | Format-Table -AutoSize
# 显示重复用户信息(如果有) $DuplicateUsers = $AllUsers | Group-Object SamAccountName | Where-Object { $_.Count -gt 1 } if ($DuplicateUsers.Count -gt 0) { Write-Host "`n注意: 发现以下用户在多个组中存在(已自动去重):" -ForegroundColor Yellow $DuplicateUsers | ForEach-Object { $UserGroups = ($_.Group.MemberOfGroups | Select-Object -Unique) -join ", " Write-Host " $($_.Name) - 所属组: $UserGroups" -ForegroundColor Yellow } } |
5、导出信息过程
将批量导出指定用户组的域账户信息的PowerShell脚本,放置域控服务器C盘的根目录下,如图所示:

以管理员身份运行PowerShell,如图所示:

切换到C盘根目录,如图所示:
>cd C:\

执行脚本,如图所示:

脚本执行完毕,显示执行完的结果,如图所示:

6、查看结果
打开导出的域账号信息表:

至此,收集指定用户组的域账号信息操作全部完成,最终结果如下图所示:

