powershell可直接查询ad复制元数据统计冲突对象,需domain/enterprise admin权限、adws启用,并建议在pdc emulator上执行;通过ldapfilter筛选cn=conflicted/cn=lostandfound路径对象,结合group-object分命名上下文统计,支持导出csv与邮件告警。
powershell 可以直接查询 active directory 复制元数据,提取冲突对象并统计数量,无需依赖第三方工具或 gui。
确认域控制器和权限要求
脚本需在具有 Domain Admin 或 Enterprise Admin 权限的账户下运行,且目标域控制器必须启用 Active Directory Web Services(ADWS)(Windows Server 2008 R2 及以后默认启用)。建议在 PDC Emulator 角色所在 DC 上执行,确保元数据最新。
- 使用
Get-ADDomainController -Discover -Service PrimaryDC快速定位 PDC - 确认 AD PowerShell 模块已加载:
Import-Module ActiveDirectory - 若跨林操作,需提前建立信任并指定
-Server参数指向目标林 DC
提取复制冲突对象(USN 冲突 + 名称冲突)
AD 中常见冲突类型包括 USN 回滚导致的对象创建冲突 和 同名对象在不同站点同时创建引发的命名冲突。可通过 repadmin /showobjmeta 输出解析,但更高效的方式是利用 Get-ADObject 的 -LDAPFilter 直接筛选冲突标记属性:
-
conflict:对象 DN 中含CN=Conflicted或CN=LostAndFound路径 -
isRecycled属性为TRUE且whenChanged异常接近(秒级差异)可能暗示批量冲突清理 - 更可靠的是查
msDS-ReplicationConflictMetaData属性(需 LDAP 查询,PowerShell 默认不返回,需-Properties *或显式指定)
执行统计脚本示例
以下脚本统计当前域中明确标记为冲突的对象数量,并按命名上下文分组:
$conflicts = Get-ADObject -LDAPFilter "(|(cn=*CN=Conflicted*)(cn=*CN=LostAndFound*))" -SearchBase (Get-ADDomain).DistinguishedName -SearchScope Subtree -Properties CanonicalName,whenChanged,objectClass -ErrorAction SilentlyContinue
$summary = $conflicts | Group-Object {($_.CanonicalName -split '/')[0]} | Select-Object Name,Count
Write-Host "域内冲突对象总计:" $conflicts.Count -ForegroundColor Red
$summary | Format-Table -AutoSize
如需包含 USN 冲突元数据,可搭配 repadmin /showrepl * /csv 输出解析,或使用 [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() 调用 .NET API 获取底层复制状态。
导出与定期监控建议
将结果保存为 CSV 便于趋势分析,并加入任务计划实现每日巡检:
- 添加时间戳和 DC 来源信息:
$conflicts | Select-Object Name,DistinguishedName,whenChanged,@{n='SourceDC';e={$env:COMPUTERNAME}} - 导出时用
Export-Csv -Path "C:\Reports\AD-Conflict-$(Get-Date -f 'yyyy-MM-dd').csv" -NoTypeInformation - 设置邮件告警:当
$conflicts.Count -gt 0时调用Send-MailMessage发送摘要











