Windows AD PowerShell(五):复制健康与 Repadmin
这是 Windows AD PowerShell 学习记录的第五节,主要整理 Active Directory 复制健康、repadmin 常用命令、复制方向、错误代码和安全同步方法。
本节通过 LDAP 对实验环境的复制拓扑进行了只读核对:QYNET-CORE01 与 QYNET-CORE02 位于同一站点,存在双向连接,并共同承载五个命名上下文。文中的时间、延迟和部分控制台输出用于展示健康输出格式;强制复制命令没有在 VM 上执行。
五、复制健康
5.1 先理解复制方向与命名上下文
当前实验环境中,两台 DC 都承载以下五个命名上下文(Naming Context,NC):
| 命名上下文 | 作用 |
|---|---|
DC=qy,DC=net | 域分区,保存用户、组、计算机和 OU 等对象 |
CN=Configuration,DC=qy,DC=net | 配置分区,保存站点、服务和复制拓扑 |
CN=Schema,CN=Configuration,DC=qy,DC=net | 架构分区,定义对象类和属性 |
DC=DomainDnsZones,DC=qy,DC=net | 域范围的 AD 集成 DNS 分区 |
DC=ForestDnsZones,DC=qy,DC=net | 林范围的 AD 集成 DNS 分区 |
AD 复制主要采用拉取模型:目标 DC 主动从源 DC 获取变化。因此下面命令的顺序是:
repadmin /replicate <目标 DC> <源 DC> <命名上下文>例如,让 QYNET-CORE01 从 QYNET-CORE02 拉取域分区:
repadmin /replicate QYNET-CORE01 QYNET-CORE02 "DC=qy,DC=net"⚠️ 不要把源和目标写反:第一个 DC 是接收变化的目标,第二个 DC 才是提供变化的源。
查询 AD 中保存的复制连接对象:
Get-ADReplicationConnection -Filter * | Select-Object Name,ReplicateFromDirectoryServer, ReplicateToDirectoryServer,AutoGenerated
Name ReplicateFromDirectoryServer ReplicateToDirectoryServer AutoGenerated---- ---------------------------- -------------------------- -------------aead53d7-7693-4059-ad79-28d24f96f6ef QYNET-CORE02 QYNET-CORE01 True5e711951-8cc1-4509-baf0-1dc8dd882474 QYNET-CORE01 QYNET-CORE02 TrueAutoGenerated=True 表示连接通常由 KCC(Knowledge Consistency Checker)自动维护。除非正在处理经过验证的特殊拓扑问题,否则不应随意删除或手工替换 KCC 连接。
5.2 查看复制摘要
repadmin /replsummary
Replication Summary Start Time: 2026-09-21 14:30:00
Beginning data collection for replication summary, this may take awhile: .....
Source DSA largest delta fails/total %% error QYNET-CORE01 04m:12s 0 / 5 0 QYNET-CORE02 03m:48s 0 / 5 0
Destination DSA largest delta fails/total %% error QYNET-CORE01 03m:48s 0 / 5 0 QYNET-CORE02 04m:12s 0 / 5 0关键列的含义:
| 列 | 含义 |
|---|---|
Source DSA | 作为复制源时的 DC |
Destination DSA | 作为复制目标时的 DC |
largest delta | 距离最近一次成功复制最久的时间 |
fails/total | 失败次数与总尝试次数 |
%% | 失败比例 |
error | 最后阻塞复制的错误 |
健康环境最直观的特征是 fails/total 中失败数为 0。largest delta 则要结合站点链路复制计划判断:同站点通常较短,跨站点可能按计划间隔更长,不能只凭“几分钟”或“几十分钟”直接判定故障。
只显示存在错误的 DC:
repadmin /replsummary /errorsonly
Replication Summary Start Time: 2026-09-21 14:31:00
Beginning data collection for replication summary, this may take awhile: .....
# 当前示例没有失败项,因此不会列出 Source DSA 或 Destination DSA/errorsonly 适合快速巡检,但“没有输出”只表示摘要中没有发现失败,不代表 DNS、SYSVOL、时间或事件日志一定正常。
按失败百分比排序:
repadmin /replsummary /sort:percent其他实用排序方式:
# 最久未成功复制的排在前面repadmin /replsummary /sort:delta
# 按失败次数排序repadmin /replsummary /sort:failures
# 同时显示源和目标摘要repadmin /replsummary * /bysrc /bydest /sort:delta5.3 查询某台 DC 的入站复制详情
/showrepl 查看指定目标 DC 从哪些源 DC 接收复制,以及每个命名上下文最后一次复制结果。
repadmin /showrepl QYNET-CORE01
QYNET-CORE\QYNET-CORE01DSA Options: IS_GCSite Options: (none)DSA object GUID: 86d68c88-4d39-4066-9bdb-5c3a59c3df03
==== INBOUND NEIGHBORS ======================================
DC=qy,DC=net QYNET-CORE\QYNET-CORE02 via RPC DSA object GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 Last attempt @ 2026-09-21 14:29:18 was successful.
CN=Configuration,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 via RPC DSA object GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 Last attempt @ 2026-09-21 14:29:18 was successful.
CN=Schema,CN=Configuration,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 via RPC DSA object GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 Last attempt @ 2026-09-21 14:29:18 was successful.
DC=DomainDnsZones,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 via RPC Last attempt @ 2026-09-21 14:29:18 was successful.
DC=ForestDnsZones,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 via RPC Last attempt @ 2026-09-21 14:29:18 was successful.这里的标题是 INBOUND NEIGHBORS,所以查询 QYNET-CORE01 时看到的是“谁向 CORE01 提供变化”。当前源伙伴为 QYNET-CORE02。
反向检查另一台 DC:
repadmin /showrepl QYNET-CORE02💡
DSA object GUID标识 DC 的 NTDS Settings 对象;Invocation ID标识该 DC 当前目录数据库实例。DC 从备份恢复等操作可能改变 Invocation ID,但 NTDS Settings 对象 GUID 通常保持不变。
5.4 详细模式与只看失败项
repadmin /showrepl QYNET-CORE01 /verbose/verbose 会额外显示地址、Invocation ID、USN、高水位线、复制标志和上次成功时间,适合进一步判断复制停在什么位置,但输出会明显变长。
只查看全林失败项:
repadmin /showrepl * /errorsonly
# 健康环境没有失败伙伴时,不会列出错误条目同时显示连接对象和出站伙伴:
repadmin /showrepl QYNET-CORE01 /all常用阅读顺序:
- 先看失败的是哪个命名上下文。
- 再看目标 DC 和源 DC 分别是谁。
- 查看
Last success距今多久。 - 查看连续失败次数。
- 记录十进制和十六进制错误码。
- 根据错误码检查 DNS、RPC、Kerberos、时间或数据库状态。
5.5 导出 CSV 并筛选失败记录
直接导出:
repadmin /showrepl * /csv > repl.csv
# 成功时默认无输出Get-Item .\repl.csv | Select-Object Name,Length,LastWriteTime
Name Length LastWriteTime---- ------ -------------repl.csv 3648 2026/9/21 14:40:22在 Windows PowerShell 5.1 中,重定向符的默认编码可能不适合某些分析工具。希望明确使用 UTF-8 时可以写成:
repadmin /showrepl * /csv | Set-Content -Path .\repl.csv -Encoding UTF8导入 PowerShell 后先查看实际列名:
$repl = Import-Csv .\repl.csv$repl[0].PSObject.Properties.Name
showrepl_COLUMNSDestination DSADestination DSA SiteSource DSASource DSA SiteNaming ContextNumber of FailuresLast Failure StatusLast Failure TimeLast Success Time筛选失败记录:
$repl | Where-Object { [int]$_.'Number of Failures' -gt 0 } | Select-Object 'Destination DSA', 'Source DSA', 'Naming Context', 'Number of Failures', 'Last Failure Status', 'Last Failure Time'不同 Windows 语言和版本的 CSV 列名可能不同,因此不要在没查看表头时直接照抄字段名。
5.6 安全触发单个分区复制
让 QYNET-CORE01 从 QYNET-CORE02 拉取域分区:
repadmin /replicate QYNET-CORE01 QYNET-CORE02 "DC=qy,DC=net"
Sync from QYNET-CORE02 to QYNET-CORE01 completed successfully.反方向同步:
repadmin /replicate QYNET-CORE02 QYNET-CORE01 "DC=qy,DC=net"
Sync from QYNET-CORE01 to QYNET-CORE02 completed successfully.再次强调参数顺序:
| 位置 | 本例 | 含义 |
|---|---|---|
| 第一个 DC | QYNET-CORE02 | 目标,接收变化 |
| 第二个 DC | QYNET-CORE01 | 源,提供变化 |
| 第三个参数 | DC=qy,DC=net | 要复制的命名上下文 |
如果源并不是目标在该命名上下文上的复制伙伴,可能返回错误 8452。遇到错误时先检查 repadmin /showrepl 和连接拓扑,不要立刻添加 /force。
⚠️
/force会覆盖已禁用连接等保护,并允许对某些异常伙伴发起复制;怀疑 USN rollback、数据库损坏或复制分歧时尤其不能盲目使用。
5.7 同步全部命名上下文
同步当前 DC 承载的所有命名上下文:
repadmin /syncall QYNET-CORE01 /AdP跨站点同步:
repadmin /syncall QYNET-CORE01 /AdeP参数必须区分大小写,尤其是 /A 与 /a:
| 参数 | 含义 |
|---|---|
/A | 同步指定 DC 承载的所有命名上下文(All) |
/a | 任意服务器不可用时中止操作(Abort) |
/d | 在回调消息中用 DN 标识服务器 |
/e | 扩展到企业内所有站点,执行跨站点同步 |
/P | Push 模式,把变化从指定 DC 向外推送 |
/q | 安静模式,减少回调消息 |
/Q | 极安静模式,仅显示严重错误 |
⚠️ 不要把小写
/a当成“All”。同步所有命名上下文的是大写/A;小写/a表示遇到不可用服务器就中止。
健康输出的关键部分类似:
CALLBACK MESSAGE: The following replication is in progress: From: CN=NTDS Settings,CN=QYNET-CORE01,... To : CN=NTDS Settings,CN=QYNET-CORE02,...
CALLBACK MESSAGE: The following replication completed successfully: From: CN=NTDS Settings,CN=QYNET-CORE01,... To : CN=NTDS Settings,CN=QYNET-CORE02,...
SyncAll terminated with no errors./e 会让复制跨站点传播。单站点环境影响有限,但多站点环境可能在短时间内占用大量 WAN 带宽。只想处理本站点时,去掉 /e。
/P 会将方向改为从当前 DC 向外推送。日常修复通常应先明确哪台 DC 拥有需要传播的变化,再决定是否需要 Push,而不是把 /AdeP 当作固定口诀无脑执行。
5.8 PowerShell 的复制查询命令
查看复制伙伴元数据:
Get-ADReplicationPartnerMetadata -Target * -Scope Forest | Select-Object Server, Partner, Partition, LastReplicationAttempt, LastReplicationSuccess, LastReplicationResult | Sort-Object Server,Partition
Server : QYNET-CORE01.qy.netPartner : QYNET-CORE02.qy.netPartition : DC=qy,DC=netLastReplicationAttempt : 2026/9/21 14:29:18LastReplicationSuccess : 2026/9/21 14:29:18LastReplicationResult : 0LastReplicationResult=0 表示最后一次复制成功。
只查看失败:
Get-ADReplicationFailure -Target * -Scope Forest | Select-Object Server, FirstFailureTime, FailureCount, LastError
# 当前没有失败对象时,无输出查看 Up-to-Dateness Vector:
Get-ADReplicationUpToDatenessVectorTable -Target QYNET-CORE01 | Sort-Object Partner | Select-Object Partner,UsnFilter,LastReplicationSuccessUTD Vector 记录目标 DC 已经从各源 DC 看到的最高更新序列,用于避免重复应用更新。它适合深入分析复制进度,但日常巡检仍应先看 replsummary、showrepl 和错误日志。
只同步一个对象,而不是整个分区:
$user = Get-ADUser -Identity qianyue -Server QYNET-CORE01
Sync-ADObject -Object $user.DistinguishedName -Source QYNET-CORE01 -Destination QYNET-CORE02
# 成功时默认无输出Get-ADUser -Identity qianyue -Server QYNET-CORE02 | Select-Object Name,DistinguishedName
Name DistinguishedName---- -----------------浅月 CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=netSync-ADObject 适合明确知道单个对象需要立即传播的场景,不能替代复制健康修复。
5.9 常见复制错误码
| 错误 | 常见含义 | 优先检查 |
|---|---|---|
1722 / 0x6ba | RPC Server Unavailable | DNS、135 端口、动态 RPC、防火墙、服务 |
1256 / 0x4e8 | 远程系统不可用 | 通常是前一个连接错误带出的次级错误 |
8452 / 0x2104 | 命名上下文正在删除或源不是有效伙伴 | 拓扑、分区状态、命令方向 |
8453 / 0x2105 | Replication Access Was Denied | 安全通道、权限、DC 账户 |
8524 / 0x214c | DNS lookup failure | AD DNS、SRV、A/AAAA、CNAME 记录 |
-2146893022 / 0x80090322 | The target principal name is incorrect | SPN、机器账户密码、Kerberos、安全通道 |
8606 / 0x219e | 对象属性不足,常与 lingering object 有关 | 事件 1988、对象一致性、墓碑 |
8614 / 0x21a6 | 超过 tombstone lifetime 未复制 | 长期离线 DC、严格复制一致性 |
不要只根据错误码直接执行修复命令。正确顺序通常是:
- 确认源、目标、命名上下文和复制方向。
- 检查两边时间与 DNS。
- 测试 RPC Endpoint Mapper 与必要动态 RPC 端口。
- 查看
repadmin /showrepl的首次错误,而不是只看 1256。 - 检查 Directory Service、DNS Server、System 和 DFS Replication 日志。
- 修复根因后,再用单分区
/replicate验证。 - 最后才考虑
/syncall,不要用全量同步掩盖故障。
查询近期目录服务错误:
Get-WinEvent -FilterHashtable @{ LogName = "Directory Service" Level = 2 StartTime = (Get-Date).AddHours(-24)} | Select-Object TimeCreated,Id,LevelDisplayName,Message | Format-List查看常见复制事件:
$eventIds = 1311,1566,1865,1925,1988,2042,2087,2088
Get-WinEvent -FilterHashtable @{ LogName = "Directory Service" Id = $eventIds} -MaxEvents 30 | Select-Object TimeCreated,Id,Message5.10 排障案例
案例一:CORE01 创建用户后,CORE02 查询不到
先分别指定 DC 查询:
Get-ADUser -Identity qianyue -Server QYNET-CORE01
DistinguishedName : CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=netEnabled : TrueName : 浅月SamAccountName : qianyue
Get-ADUser -Identity qianyue -Server QYNET-CORE02
Get-ADUser : Cannot find an object with identity: 'qianyue'查看目标 DC 的入站复制。因为对象需要到达 CORE02,所以目标是 CORE02:
repadmin /showrepl QYNET-CORE02 /errorsonly修复 DNS、RPC 或安全通道等根因后,让 CORE02 从 CORE01 拉取域分区:
repadmin /replicate QYNET-CORE02 QYNET-CORE01 "DC=qy,DC=net"
Sync from QYNET-CORE01 to QYNET-CORE02 completed successfully.最后重新指定 CORE02 验证:
Get-ADUser -Identity qianyue -Server QYNET-CORE02 | Select-Object Name,SamAccountName,DistinguishedName
Name SamAccountName DistinguishedName---- -------------- -----------------浅月 qianyue CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net案例二:复制摘要正常,但怀疑仍有积压
查看等待执行的入站复制队列:
repadmin /queue QYNET-CORE01
Queue contains 0 items.查看目标 DC 对伙伴更新的认知:
repadmin /showutdvec QYNET-CORE01 "DC=qy,DC=net" /latency比较两台 DC 的对象属性和复制元数据:
repadmin /showobjmeta QYNET-CORE01 "CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net"
repadmin /showobjmeta QYNET-CORE02 "CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net"/showobjmeta 可以看到每个属性的版本号、原始写入 DC、时间戳和 USN,适合判断“对象存在,但某个属性为什么不一致”。
案例三:DNS 故障修复后验证复制
# 检查 DC 定位记录Resolve-DnsName -Type SRV "_ldap._tcp.dc._msdcs.qy.net"
# 检查两台 DC 的主机名Resolve-DnsName QYNET-CORE01.qy.netResolve-DnsName QYNET-CORE02.qy.net
# 检查 RPC 和 LDAPTest-NetConnection QYNET-CORE02.qy.net -Port 135Test-NetConnection QYNET-CORE02.qy.net -Port 389
# 先验证一个分区repadmin /replicate QYNET-CORE01 QYNET-CORE02 "DC=qy,DC=net"
# 再重新查看摘要repadmin /replsummary这种“修复根因 → 单分区验证 → 全局复查”的顺序,比一上来运行 /syncall /AdeP 更容易判断问题是否真的解决。
5.11 安全使用强制同步
以下情况下可以考虑手动同步:
- 修复 DNS、RPC、时间或防火墙后验证结果。
- 变更窗口中需要立即传播一个明确的对象。
- 新增 DC 后验证某个命名上下文。
- 计划维护前确认两台 DC 已同步。
以下情况下不应直接强推:
- 怀疑 USN rollback。
- 发现 lingering object 或事件 1988、2042。
- 某台 DC 离线超过 tombstone lifetime。
- 目录数据库损坏。
- 尚未确定正确源 DC。
- 多站点 WAN 链路处于拥塞状态。
执行前最少应收集:
repadmin /replsummaryrepadmin /showrepl * /errorsonlydcdiag /e /test:Connectivity /test:Replicationsw32tm /monitor /domain:qy.net执行后验证:
repadmin /replsummaryrepadmin /showrepl QYNET-CORE01repadmin /showrepl QYNET-CORE02Get-ADReplicationFailure -Target * -Scope Forest5.12 本节巡检顺序
repadmin /replsummary:判断全局是否存在失败和最大延迟。repadmin /replsummary /errorsonly:快速聚焦失败 DC。repadmin /showrepl <目标 DC>:定位失败的源、目标和命名上下文。- 记录第一条真正错误和错误码,不要只追次级错误 1256。
- 检查 DNS、时间、RPC、Kerberos、安全通道和事件日志。
- 修复根因后,用
/replicate验证单个分区。 - 只有明确理解影响后,才使用
/syncall。 - 再次运行摘要、详情和 PowerShell 复制失败查询。
- 将结果导出 CSV,保留故障前后证据。
复制排障最重要的三个概念是:目标从源拉取、每个命名上下文独立复制、强制同步不能替代根因修复。
参考资料
- Repadmin /replsummary
- Repadmin /showrepl
- Repadmin /replicate
- Repadmin /syncall
- Active Directory replication error 8452
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













