最实用方式是用PowerShell原生命令Get-ADReplicationPartnerMetadata批量采集DC复制元数据,结合try/catch容错、CSV带时间戳导出,并过滤LastReplicationResult≠0且非ERROR的真异常,辅以repadmin交叉验证与滑动窗口告警。
最实用、最直接的方式是结合 powershell 原生命令与结构化输出,聚焦真实异常而非堆砌数据。核心不在于“看到复制”,而在于“快速定位谁没同步、为什么失败、是否已持续”。
用 Get-ADReplicationPartnerMetadata 批量抓取元数据
这是 PowerShell 原生最可靠的复制状态采集方式,能一次性获取每台 DC 与其所有复制伙伴的最后尝试时间、结果码和成功时间:
- 自动发现全网域控制器:Get-ADDomainController -Filter *,无需手动维护列表
- 对每台 DC 调用 Get-ADReplicationPartnerMetadata -Target $dc -Scope Domain,捕获 LastReplicationResult(0=成功,非0=错误)和 LastReplicationSuccess(时间戳)
- 脚本中必须加 try/catch,避免单台 DC 不可达导致整体中断;对异常项标记为 ERROR,保持结果可筛选
- 导出 CSV 时带时间戳,便于归档比对趋势,例如:Export-Csv "DC_Replication_Report_$(Get-Date -Format 'yyyyMMdd_HHmm').csv"
只显示真正需要关注的异常项
日常监控不是看全部,而是盯住“失败但未恢复”的问题:
- 过滤条件应为:Where-Object { $_.LastReplicationResult -ne 0 -and $_.LastReplicationResult -ne 'ERROR' },排除临时网络抖动或不可达干扰
- 若某 DC 的 LastReplicationSuccess 超过 15 分钟,即使当前 Result 是 0,也需警惕——Kerberos 时间偏差容忍上限就是 15 分钟,延迟可能已影响登录
- 注意“假成功”:LastReplicationResult = 0 但 LastReplicationAttempt 和 LastReplicationSuccess 时间相差极大(如隔数小时),说明上次只是碰巧连上了,实际同步早已停滞
联动 repadmin 做轻量交叉验证
PowerShell 提供结构化能力,repadmin 提供底层细节,两者互补不替代:
- 用 repadmin /replsummary 快速扫全林健康度,重点关注 Failures 列和 Delta(延迟分钟数)
- 对 PowerShell 报出异常的 DC,立刻补查:repadmin /showrepl DC01,看具体哪条复制路径失败、错误码是多少(如 8461=RPC 服务器不可用,5=拒绝访问)
- 把 repadmin 输出转成 CSV:repadmin /showrepl * /csv > replstatus.csv,再用 Excel 按 Last Success Time 排序,一眼锁定最滞后的 DC
设置低干扰、高响应的预警逻辑
告警不是越快越好,而是要减少噪音、指向可操作:
- 不设固定阈值(如“失败数 > 2 就告警”),改用滑动窗口:每 5 分钟采集一次,取过去 30 分钟内各 DC 的失败次数中位数,当前值超中位数 × 3 且连续两次触发,才发告警
- 告警正文里嵌入诊断命令,例如:repadmin /showconn DC01 查连接源,dcdiag /test:replications 看全局复制测试结果
- 把 Get-ADReplicationFailure 作为补充——它专查最近 1 小时内明确失败的事件,适合做分钟级短周期巡检











