如何使用PowerShell导出AD中proxyAddresses重复的用户为CSV文件
AD重复ProxyAddresses用户排查脚本调整方案
原有全量导出脚本未做重复值判断逻辑,要实现仅筛选存在代理地址冲突的用户,核心逻辑是先统计全量环境中出现多次的SMTP地址,再反向匹配持有这些地址的用户即可。
注意:AD的proxyAddresses属性中,前缀
SMTP:(大写)代表用户主邮件地址,smtp:(小写)代表别名地址,地址本身比对不区分大小写,脚本中会统一做标准化处理避免漏判。
运行脚本前请确保机器已安装RSAT AD管理工具,使用具备AD用户读取权限的账号执行。
调整后完整脚本
Import-Module ActiveDirectory -ErrorAction Stop # 拉取全量AD用户的所有SMTP类型代理地址,做标准化映射 $allProxyRecords = Get-ADUser -Filter * -Properties proxyAddresses | ForEach-Object { $userRef = $_ $userRef.ProxyAddresses | Where-Object { $_ -match '^smtp:' } | ForEach-Object { [PSCustomObject]@{ UserName = $userRef.Name UserDN = $userRef.DistinguishedName StandardizedAddr = $_.ToLower() OriginalAddr = $_ } } } # 统计出现次数≥2的重复代理地址 $duplicateAddrList = $allProxyRecords | Group-Object StandardizedAddr | Where-Object Count -ge 2 | Select-Object -ExpandProperty Name # 筛选持有重复地址的用户,组装报告字段 $conflictReport = $allProxyRecords | Where-Object StandardizedAddr -in $duplicateAddrList | Group-Object UserName | ForEach-Object { [PSCustomObject]@{ UserName = $_.Name UserLocation = $_.Group[0].UserDN OwnedProxyAddresses = $_.Group.OriginalAddr -join ";" ConflictedAddress = $_.Group.StandardizedAddr -join ";" } } # 导出UTF8编码的CSV报告,避免中文乱码 $conflictReport | Export-Csv -Path C:\AD_ProxyAddr_Conflict_Report.csv -NoTypeInformation -Encoding UTF8
导出字段说明
- UserName:存在冲突的AD用户显示名
- UserLocation:用户的AD可分辨名称,可直接定位用户所在组织单元
- OwnedProxyAddresses:该用户名下涉及冲突的原始代理地址,保留原前缀大小写可直接区分主地址/别名
- ConflictedAddress:标准化后的重复地址值,可直接对照确认冲突项
如果需要缩小排查范围,可在Get-ADUser的Filter参数中增加筛选条件,比如传入-Filter {Enabled -eq $true}即可仅统计启用状态的用户,过滤掉禁用账号、系统内置账号的无效数据。
内容的提问来源于stack exchange,提问作者Senior Systems Engineer
相关产品推荐
相关产品推荐

