DCDiag
适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016
DCDiag.exe
分析林或企业中域控制器 (DC) 的状态,并报告所有问题来帮助进行排除故障。 作为最终用户的报告程序,DCDiag 是一种命令行工具,用于封装如何识别系统中异常行为的详细信息。
默认情况下,登录到 DC 后 可随时使用 DCDiag。 另一种访问 DCDiag 的方法是在设备上安装远程服务器管理员管理工具 (RSAT)。 DCDiag 必须使用管理权限从提升的命令提示符 (CMD) 或 PowerShell 运行。
DCDiag 包含一个用于执行测试的框架和一系列用于验证系统不同功能区域的测试。 此框架根据用户的范围指令(例如企业、站点或单一服务器)选择要测试的 DC。 测试 DC 的整体连接性和响应能力包括验证:
- DC 可以位于 DNS 中
- DC 响应 Internet 控制消息协议 (ICMP) ping
- DC 通过绑定实例的方法允许轻型目录访问协议 (LDAP) 连接
- DC 允许使用 DsBindWithCred 函数绑定到 AD RPC 接口。
注意
阻止 ICMP 会阻止 DCDiag 按预期运行。 虽然建议在网络的 Internet 边缘阻止 ICMP,但内部阻止 ICMP 流量会导致因缺少发现选项而中断旧组策略、黑洞路由器检测或低效 MTU 大小等管理问题。 故障排除工具(如 ping.exe
或 tracert.exe
)也会受到影响。
DCDiag 语法
dcdiag [/s:<DomainController>] [/n:<NamingContext>] [/u:<Domain>\<UserName> /p:{* | <Password> | ""}] [{/a | /e}] [{/q | /v}] [/i] [/f:<LogFile>] [/c [/skip:<Test>]] [/test:<Test>] [/fix] [{/h | /?}] [/ReplSource:<SourceDomainController>]
DCDiag 使用以下参数:
参数 | 描述 |
---|---|
/s:<DomainController> |
指定要对其运行命令的服务器的名称。 如果未指定此参数,则针对本地域控制器运行测试。 对于只能在本地运行的 DcPromo 和 RegisterInDns 测试,则会忽略此参数。 |
/n:<NamingContext> |
使用 NamingContext 作为要测试的命名上下文。 可以通过 NetBIOS、域名系统 (DNS) 或可分辨名称的格式指定域。 |
/u:<Domain> \<UserName> /p:{<Password> | ""} |
使用 Domain\UserName。 DCDiag 使用已登录用户(或进程)的当前凭据。 如果需要备用凭据,请使用以下选项提供这些凭据,以便与 Password 绑定作为密码:使用引号 ("") 表示空密码或 null 密码。 使用通配符 (*) 提示输入密码。 |
/a | 测试此 AD DS 站点上的所有服务器。 |
/e | 测试企业中的所有服务器。 这会替代 /a 。 |
/q | 安静。 仅输出错误消息。 |
/v | “详细”: 输出扩展信息。 |
/fix | 仅影响 MachineAccount 测试。 此参数使测试修复域控制器的计算机帐户对象上的服务主体名称 (SPN)。 |
/f:<LogFile> |
将所有输出重定向到日志文件。 |
/c | 全面。 运行 DCPromo 和 RegisterInDNS 以外的所有测试,包括非默认测试。 可以选择将此参数与 /skip 参数一起使用以跳过指定测试。默认情况下不运行以下测试:
|
/h 或 /? | 在命令提示符下显示帮助。 |
/test:<Test> |
仅运行此测试。 无法使用 /skip 参数跳过连接测试。 |
/ReplSource:<SourceDomainController> |
测试运行命令的域控制器与源域控制器之间的连接。 (此参数用于 CheckSecurityError 测试。) SourceDomainController 是实际服务器或潜在服务器的 DNS 名称、NetBIOS 名称或可分辨名称,该服务器将成为复制的源域控制器,由实际或潜在的连接对象表示。 |
DCDiag 已知测试
下表显示默认运行(除非另有指定)的已知测试。
测试 | 说明 |
---|---|
广告 | 检查每个域控制器是否在其应该能够执行的角色中宣传自身。 此测试验证计算机用于定位域控制器的公共 DsGetDcName 函数是否能正确找到任何 DC。 如果 Netlogon 服务已停止或无法启动,此测试将失败。 如果密钥分发中心 (KDC) 服务停止,则广告测试会失败,因为从 DsGetDcName 返回的标志不包括 KDC。 如果在防火墙上阻止了 TCP 的 88 端口和 UDP,那么尽管 KDC 无法响应 Kerberos 的票证请求,但广告测试仍会通过。 |
CheckSDRefDom | 检查所有应用程序目录分区是否都有适当的安全描述符引用域。 此测试使用 LDAP 并验证位于 cn=partitions,cn=configuration,dc=<forest root do;qin> 的跨引用对象在其 msDS-SDReferenceDomain 属性中包含正确的域名。 |
CheckSecurityError | 测试默认不运行。 针对与 DC 安全组件相关的错误执行各种安全检查,例如安全策略问题或使用 LDAP、RPC、RPC over SMB 和 ICMP 的安全数据库。 检查:
如果添加了 /ReplSource 参数,合作伙伴还要检查:
|
连接 | 确认可以使用 LDAP 和 RPC 注册并访问 DSA 和 DNS。 |
CrossRefValidation | 检索位于 cn=partitions,cn=configuration,dc=<forest root domain> 的命名上下文列表,及其交叉引用,然后使用 LDAP 验证它们与 CheckSDRefDom 测试类似。 此测试查看 nCName、dnsRoot、nETBIOSName 和 systemFlags 属性以便:
|
CutoffServers | 测试 AD 副本,以确保所有 DC 在运行时都有合作伙伴之间的连接对象。 任何无法复制 DC 入站或出站的服务器都被视为使用 DsReplicaSyncAll 函数“截断”,该函数会触发 DC 上的副本。 如果存在使用调度保持干净状态的不良 WAN 链接,请谨慎使用 /e 参数。 如果无法联系服务器或无法连接到网络上的 LDAP,则即使指定了 /v 参数,也不会提供任何错误或测试结果。 此测试使用 RPC。 |
DcPromo | 如果基础结构满足将设备提升到 DC 的必要要求,则针对客户端 DNS 设置中指定的服务器进行测试。 此测试使用网络上的 DNS 并检查:
要求使用以下参数:
|
DFSREvent | 此测试通过检查过去 24 小时内的 DFSR 事件日志警告和错误条目来验证分布式文件系统复制 (DFSR) 服务的运行状况。 此测试使用 RPC 和 EventLog 远程处理协议。 |
DNS | 使用 DNS、RPC 和 WMI 协议测试企业范围的 DNS 运行状况检查。 默认情况下不运行,必须显式请求。 请参阅《DNS 语法》。 |
FrsEvent | 检查过去 24 小时内文件复制服务 (FRS) 事件日志中是否存在错误,因为 SysVol 共享副本的失败可能会导致策略问题。 此测试使用 RPC 和 EventLog 远程处理协议。 |
Intersite | 检查可能会阻止或暂时延搁站点间复制的故障,并恢复 KCC 所需的时间。 此测试使用 DRS 函数检查特定站点或所有站点内阻止站点间 AD 复制的条件:
/a 或 /e 参数必须用作未提供站点将允许测试运行,但会跳过实际测试。 此测试使用网络上的 RPC 来测试复制的各方面,并要求注册表连接检查 NTDS 替代项。 LDAP 还用于查找连接信息。 |
KccEvent | 此测试查询 DC 上的 KCC,查找过去 15 分钟内在目录服务事件日志中生成的错误和警告。 15 分钟阈值与 DC 上的 Repl 拓扑更新周期(秒)注册表值无关。 如果防火墙规则导致此测试失败,请参阅 (KB)2512643》,其中解释了如何让这些规则允许测试成功。 此测试使用 RPC 和 EventLog 远程处理协议。 |
KnowsOfRoleHolders | 此测试返回五个灵活单主机操作 (FSMO) 角色的 DC 知识,但不会检查所有 DC 的知识一致性。 使用 /e 参数提供用于比较的数据。 此测试目录复制服务 (DRS) 函数中返回 DSListRoles。 |
MachineAccount | 检查计算机帐户是否已正确注册,以及是否使用 SMB 上的 LDAP 和 RPC 播发了服务,包括检查:
此测试还有两个修复选项:
|
NCSecDesc | 检查源 DC 上所有命名上下文(例如架构、配置等)的权限,以验证 DC 之间的复制和连接功能。 这样能确保企业域控制器和管理员组具有正确的最低权限,这和在 CheckSecurityError 执行的测试相同。 此测试使用 LDAP。 |
NetLogons | 验证运行 DCDiag 的用户是否可以连接到 SYSVOL 和 NETLOGON 共享并读取任何安全错误。 此外还检查 DC 的管理员、经过身份验证的用户和任何人群组是否持有从网络访问本计算机特权。 |
ObjectsReplicated | 检查计算机帐户和目录系统代理 (DSA) 对象是否已复制。 默认情况下会验证两个对象,并检查它们是否存在于每个 DC 中,并且在所有其他 DC 上都是最新的:
可以将 /objectdn:dn 参数与 /n:nc 参数一起使用,以指定要检查的其他对象。 此测试通过 DRS 函数和 RPC 完成。 |
OutboundSecureChannels | 此测试默认不运行。 检查是否存在从域中的所有域控制器到 /testdomain 参数所指定域的安全通道。 /nositerestriction 参数可防止 DCDiag 将测试限制在站点中的域控制器。 |
RegisterInDNS | 测试目录服务器是否可以注册目录服务器定位符 DNS 记录。 这些记录必须存在于 DNS 中,以便其他计算机可以查找 <Active_Directory_Domain_DNS_Name> 域的目录服务器。 还会报告是否需要对现有 DNS 基础结构进行任何修改。 必须使用参数 /DnsDomain : <Active_Directory_Domain_DNS_Name>。 此测试检查:
|
重复项 | 此测试对指定 DC 上所有命名上下文的 AD 复制连接对象进行如下检查:
|
RidManager | 检查相对标识符 (RID) 主机是否可访问,以及:
角色持有者必须联机且可供 DC 访问,才能在域中创建安全主体(用户、计算机和组),以及进一步提升 DC。 此测试使用 LDAP 和 RPC。 |
服务 | 此测试验证各种依赖于 AD 的服务是否正在运行、可访问并设置为特定的启动类型。 除非另行指定,否则这些服务会自动启动并在共享进程中运行:
这些服务名称列在注册表路径 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 中。 此测试使用 RPC 和服务控制管理器远程协议。 |
SysVolCheck | 此测试读取 DC Netlogon SysVolReady 注册表项,以验证 SYSVOL 是否已准备就绪。 参数名称的值必须为 1 才能通过此测试,并且和 FRS 或 复制 DFSR 的 SYSVOL一起工作。 不会检查是否可访问 SYSVOL 和 NELOGON 共享,因为此项是由 CheckSecurityError 检查的。 此测试使用通过 SMB 的 RPC。 |
SystemLog | 通过读取和写入过去 60 分钟内的任何错误和警告来验证系统事件日志的运行状况。 此测试使用 RPC 和服务控制管理器远程协议。 |
拓扑 | 检查生成的 AD 复制拓扑是否已为所有 DSA 完全连接。 此测试默认不执行,必须显式运行。 检查:
此测试使用 RPC、LDAP 和 DsReplicaSyncAll 和 DS_REPSYNCALL_DO_NOT_SYNC标志,这意味着测试分析和验证复制拓扑,而不会对实际复制进行更改。 此测试不会验证复制合作伙伴的可用性。 合作伙伴脱机不会导致测试失败。 同样不会测试是否由于调度关闭复制被阻止。 若要查当前复制结果,请使用复制或 CutoffServers测试。 |
VerifyEnterpriseReferences | 检查每个域控制器上企业中所有对象的 FRS 和复制基础结构的指定系统引用是否完整。 这包括以下 DC 站点属性和对象:
仅当域功能级别为 Windows Server 2008 或更高时,才执行这两项 DFSR 测试。 这意味着,如果 DFSR 尚未迁移到 SYSVOL,则预期会出现失败。 此测试使用 LDAP,仅联系指定的 DC。 |
VerifyReferences | 检查 FRS 和复制基础结构的某些系统引用是否完整。 此测试验证单个 DC 的计算机引用属性,包括以下 DC 站点属性和对象:
此测试使用 LDAP,类似于 VerifyEnterpriseRefrences 测试,只不过它不会检查分区交叉引用或其他所有 DC 对象。 |
VerifyReplicas | 检查所有应用程序目录分区是否在所有副本服务器上完全实例化。 它验证指定的服务器是否托管由分区容器中的交叉引用属性指定的应用程序分区。 它像 CheckSDRefDom 一样运行,只是它不显示输出数据,但验证托管。 此测试使用 LDAP。 |
注意
对在网络上注册并与其他资源(如 DNS、LDAP 和 RPC)连接的域控制器进行的连接性检查不能跳过。
DNS 语法
dcdiag /test:DNS [/DnsBasic | /DnsForwarders | /DnsDelegation | /DnsDynamicUpdate | /DnsRecordRegistration | /DnsResolveExtName [/DnsInternetName:<InternetName>] | /DnsAll] [/f:<LogFile>] [/x:<XMLLog.xml>] [/xsl:<XSLFile.xsl> or <XSLTFile.xslt>] [/s:<DomainController>] [/e] [/v]
DNS 测试使用以下参数:
参数 | 描述 |
---|---|
/test:DNS | 执行指定的 DNS 测试。 如果未指定测试,则默认为 /DnsAll 。 |
/DnsBasic | 执行基本的 DNS 测试,包括网络连接、DNS 客户端配置、服务可用性和区域存在情况。 |
/DnsForwarders | 执行 /DnsBasic 测试并检查转发器的配置。 |
/DNSDelegation | 执行 /DnsBasic 测试并检查适当的委派。 |
/DnsDynamicUpdate | 执行 /DnsBasic 测试,并确定是否在 Active Directory 区域中启用动态更新。 |
/DnsRecordRegistration | 执行 /DnsBasic 测试,并检查地址 (A)、规范名称 (CNAME) 和已知服务 (SRV) 资源记录是否已注册。 此外,根据测试结果创建清单报告。 |
/DnsResolveExtName [/DnsInternetName:\<InternetName> ] |
执行 /DnsBasic 测试,并尝试解析 InternetName。 如果未指定 /DnsInternetName ,则尝试解析名称 <www.microsoft.com>。 如果指定了 /DnsInternetName ,则尝试解析用户提供的 Internet 名称。 |
/DnsAll | 执行除 /DnsResolveExtName 测试外的所有测试,并生成报告。 |
/f:<LogFile> |
将所有输出重定向到日志文件。 |
/s:<DomainController> |
针对域控制器运行测试。 如果未指定此参数,则针对本地域控制器运行测试。 |
/e | 针对 Active Directory 林中的所有域控制器运行 /test:DNS 指定的所有测试。 |
/v | “详细”: 除有关错误和警告的信息外,还显示有关成功测试结果的扩展信息。 不使用 /v 参数时,仅提供错误和警告信息。 在摘要表中报告错误或警告时使用 /v 开关。 |
/x:<XMLLog.xml> |
将所有输出重定向到 xmllog.xml。 此参数仅适用于 /test:DNS 选项。 |
/xsl:<XSLFile.xsl> 或 /xsl: <XSLTFile.xslt> |
添加引用指定工作表的处理指令。 此参数仅适用于 /test:DNS /x:<XMLLog.xml 选项。 |
注意
使用 /e
参数时,大型企业的 DNS 测试的运行时间可能很长。 由于 RPC 和其他协议的超时时间较长,脱机的域控制器和 DNS 服务器将增加运行时间。
示例
连接性测试
若要在本地域上运行一系列连接性测试,请运行以下命令:
dcdiag
成功的连接测试输出:
Directory Server Diagnosis
Performing initial setup:
Trying to find home server...
Home Server = MapleWaffle-WS22
* Identified AD Forest.
Done gathering initial info.
Doing initial required tests
Testing server: Default-First-Site-Name\MAPLEWAFFLE-WS2
Starting test: Connectivity
......................... MAPLEWAFFLE-WS2 passed test Connectivity
Doing primary tests
Testing server: Default-First-Site-Name\MAPLEWAFFLE-WS2
Starting test: Advertising
......................... MAPLEWAFFLE-WS2 passed test Advertising
Starting test: FrsEvent
......................... MAPLEWAFFLE-WS2 passed test FrsEvent
Starting test: DFSREvent
......................... MAPLEWAFFLE-WS2 passed test DFSREvent
Starting test: SysVolCheck
......................... MAPLEWAFFLE-WS2 passed test SysVolCheck
Starting test: KccEvent
......................... MAPLEWAFFLE-WS2 passed test KccEvent
Starting test: KnowsOfRoleHolders
......................... MAPLEWAFFLE-WS2 passed test KnowsOfRoleHolders
Starting test: MachineAccount
......................... MAPLEWAFFLE-WS2 passed test MachineAccount
Starting test: NCSecDesc
......................... MAPLEWAFFLE-WS2 passed test NCSecDesc
Starting test: NetLogons
......................... MAPLEWAFFLE-WS2 passed test NetLogons
Starting test: ObjectsReplicated
......................... MAPLEWAFFLE-WS2 passed test ObjectsReplicated
Starting test: Replications
......................... MAPLEWAFFLE-WS2 passed test Replications
Starting test: RidManager
......................... MAPLEWAFFLE-WS2 passed test RidManager
Starting test: Services
......................... MAPLEWAFFLE-WS2 passed test Services
Starting test: SystemLog
......................... MAPLEWAFFLE-WS2 passed test SystemLog
Starting test: VerifyReferences
......................... MAPLEWAFFLE-WS2 passed test VerifyReferences
Running partition tests on : ForestDnsZones
Starting test: CheckSDRefDom
......................... ForestDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... ForestDnsZones passed test CrossRefValidation
Running partition tests on : DomainDnsZones
Starting test: CheckSDRefDom
......................... DomainDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... DomainDnsZones passed test CrossRefValidation
Running partition tests on : Schema
Starting test: CheckSDRefDom
......................... Schema passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... Schema passed test CrossRefValidation
Running partition tests on : Configuration
Starting test: CheckSDRefDom
......................... Configuration passed test
CheckSDRefDom
Starting test: CrossRefValidation
......................... Configuration passed test
CrossRefValidation
Running partition tests on : corp
Starting test: CheckSDRefDom
......................... corp passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... corp passed test CrossRefValidation
Running enterprise tests on : corp.contoso.com
Starting test: LocatorCheck
......................... corp.contoso.com passed test
LocatorCheck
Starting test: Intersite
......................... corp.contoso.com passed test
Intersite
若要在特定域控制器上运行一系列连接性测试,请运行以下命令:
dcdiag /s:<DomainControllerName>
如果未遇到任何问题,这应该生成与本地测试类似的结果。
输出到日志文件
DCDiag 能够通过运行以下命令将输出结果保存到文本文件:
dcdiag /s:<DomainControllerName> /f:<FileName.txt>
如果未指定 <FilePath>
,则默认将结果保存到 C:\Users\<UserName>\<FileName.txt>
。
若要保存到特定位置,请运行:
dcdiag /s:<DomainControllerName> /f:<DriveLetter>\<FilePath>\<FileName.txt>