DCDiag:如何使用 Powershell 检查域控制器健康状态

DCDiag: 如何使用Powershell检查域控制器健康状态。 DCDiag 是一个强大的命令行工具,用于诊断Microsoft Windows Active Directory环境中的 域控制器 的问题。我们使用它来检查域控制器的 健康 状况,识别错误或不一致之处,并解决复制问题。DCDiag 还可帮助管理员检测和解决与 DNS 配置、SYSVOL 复制以及其他Active Directory正常运行所需的关键服务的问题。

我们研究了 DCDiag,这是一个强大的Microsoft Windows工具。我们使用它来测试DNS服务,评估域控制器的健康状况,甚至自动纠正错误。虽然相对简单,但该工具足以维护我们所有域控制器的健康。我们要开始阅读文章《DCDiag: 如何使用Powershell检查域控制器健康状态》吗?也阅读 如何将域控制器添加到现有域

我们首先从文章DCDiag开始:如何使用Powershell检查域控制器健康状况

DCDiag:如何使用Powershell检查域控制器健康状况

安装DCDiag工具

如果我们运行的是Windows Server,我们应该安装了DCDiag。微软将DCDiag内置于现代Windows Server版本中,从2012R2及以后的版本开始。

DCDiag工具的目的

DCDiag 的目的在于诊断和解决 Windows Server 环境中域控制器的问题。它是一个命令行工具,可以对域控制器进行广泛的健康检查,包括对 DNS、复制、LDAP 的测试,以及对单个或多个 DC 在 AD 森林或企业内同时进行的安全分析。让我们来看看 DCDiag 对域控制器进行的一些不同测试:

  1. 连接性测试 – DCDiag 检查域控制器是否连接到网络,并且能够与其他域控制器通信。
  2. DNS测试 – 检查域控制器是否正确解析和注册DNS
  3. 复制测试– 测试域控制器是否准确地与其他域控制器复制。
  4. 信任测试 – DCDiag检查域控制器是否信任其他域以及其他域是否信任该域控制器。
  5. LDAP测试– 检查LDAP查询在域控制器上是否正常工作。
  6. Kerberos测试 – DCDiag检查Kerberos认证在域控制器上是否正确工作。
  7. SYSVOL 测试 – DCDiag 检查域控制器上的 SYSVOL 复制是否正常工作。
  8. 全局编录测试 – DCDiag 检查 DC 是否作为 全局编录 服务器运行,并且全局编录查询是否正常工作。

DCDiag 工具概览

好了,关于文章DCDiag:如何使用Powershell检查域控制器健康状况,这是一个简单的命令行工具。我们可以在CMD提示符PowerShell窗口中运行DCDiag。请记住使用管理员权限。

DCDiag的基本语法如下:

dcdiag.exe /s:[:] [/u:\ /p:*||””]

其中:

  • /s – 域控制器
  • /u:\ – 用户名
  • \p:* – 密码

这个基本的命令行返回测试结果,显示域控制器的主要(连接性)测试和任何指定的测试。要学习如何使用DCDiag命令以及所有它的开关,让我们从帮助命令开始:

dcdiag /?

DCDiag开关参数

要使用以下任何开关,请将其附加在DCDiag命令之后。常用命令开关的摘要:

  1. /s <服务器名称> – 指定要测试的服务器的名称。如果没有指定服务器名称,DCDiag将测试本地计算机
  2. /v – 提供详细的输出和有关执行的测试的额外信息。
  3. /test:<测试名称> – 指定要运行的测试的名称。我们可以通过指定多个/test开关来运行多个测试。
  4. /e – 对指定的域控制器执行全面的测试集。
  5. /fix – 尝试修复在测试过程中发现的任何问题。
  6. /f:<日志文件名> – 指定要创建的日志文件的名称。
  7. /c – 指定DCDiag应该只执行广告域控制器服务的测试。
  8. /skip:<TestName> – 跳过指定的测试。
  9. /l:<LogFileName> – 指定要追加的日志文件名,而不是覆盖。
  10. /q – 指定静默模式,该模式会抑制信息性消息的显示。
  11. /test:DNS – 在指定的域控制器上运行DNS测试。
  12. /test:KCC – 在指定的域控制器上运行KCC测试。
  13. /test:Replications – 在指定的dc上运行复制测试。
  14. /test:Advertising – 在指定的dc上运行广告测试。
  15. /test:Services – 在指定的dc上运行服务测试。

上面列出了一些最常用的DCDiag命令行开关,但实际上还有很多其他选项可用。我们可以通过运行帮助命令来查看所有开关及其定义的完整列表。

尝试我们的Active Directory健康DC报告工具

试用我们免费访问所有功能。- 提供200多个AD报告模板。轻松自定义您自己的AD报告。




运行DCDiag和使用案例

要运行DCDiag,只需输入不带任何开关的DCDiag命令,即可在我们的本地DC(或参数)上进行基本的DCDiag测试。

dcdiag.exe

由于DCDiag会自动识别当前(本地)DC,因此不需要域控制器或管理员凭据。在下面的部分中,我们将讨论使用DCDiag的开关参数的多个使用案例。

远程DC健康检查

我们必须在DC的名称及其凭据(用户名和密码)末尾添加/s:开关,以对远程DC进行诊断。例如:

dcdiag.exe /s:dc01 /u:dc01\Administrator /p:password

本地执行的DCPromo和注册到DNS的操作,不是针对域控制器的,将不会受到/s开关的影响。

请注意,当我们输入/u(用户名)信息时,我们必须指定具有域管理员权限的账户名称,并使用正确的格式:域/用户名。因此,例如,我们将用户名(Administrator)与域名(dc01)连接起来:/u:dc01\Administrator

检查所有DC的健康状况

我们将每个可能包含一组DC的AD站点相互连接起来。如果我们将AD划分为站点,那么/a开关是有益的。它允许我们同时为所有站点DC运行DCDiag实用程序:

dcdiag.exe /s:dc01 /a

使用DCDiag测试DNS

无论我们测试什么,DCDiag工具总是默认在主要连接性测试期间检查每个域控制器的DNS注册。此外,我们可能会进行特定的DNS测试,如转发器、注册记录和其他,这些都有助于调查DNS问题。要测试DNS,请使用以下命令:

dcdiag.exe /s:dc01 /test:dns

除了外部名称解析之外,以下基本测试默认运行。所有DNS结果都显示DNSBasic测试。如果没有值,/test:dns开关会自动默认为 /DNSall。以下是我们在使用DCDiag工具时调用的一些特定于DNS的测试:

  1. /DNS基础 – 检查域控制器的DNS服务器是否配置正确并能解析名称。
  2. /DNS授权– 测试DNS授权是否为域控制器正确配置。
  3. /DNS转发器 – 检查域控制器的DNS转发器是否配置正确。
  4. /DNS动态更新 – 检查域控制器是否执行DNS动态更新。
  5. /DNS记录注册 – 测试域控制器的DNS注册是否最新且准确。

这些测试确保域控制器的DNS配置正确且正常运行。如果DCDiag在这些测试中发现任何问题,DCDiag会及时解决这些问题,以避免活动目录和其他网络服务可能出现的问题。DNS测试应该像这样:

自定义DCDiag结果

DCDiag允许我们通过显示更少或更多的信息来定制结果。还可以导出结果以供以后分析。以下是一些关于我们如何定制DCDiag报告的示例。

在静音模式下运行DCDiag

静音/q开关非常方便,通过仅显示错误消息列表来减少输出大小。以下是DCDiag在静音模式下的示例:

dcdiag.exe /s:dc01 /q

使用/q的输出仅过滤到错误,看起来像这样:

使用详细输出运行DCDiag

通过添加/v详细标志,以详细输出方式运行DCDiag。它为我们提供了更多关于日常任务的信息,如错误、警告、信息性消息等。/v开关是安静/q开关的反面。

如前所述,DCDiag(不带/v)提供了足够的细节来识别和解决我们域控制器上的任何问题,这在大多数情况下可能已经足够。以下是带有详细开关的代码片段示例:

dcdiag.exe /s:dc01 /v

带有/v开关的输出应该看起来像这样:

我们只建议在标准摘要表中看到警告或错误,并希望更详细地调查问题时使用详细输出。

导出DCDiag结果

DCDiag实用工具允许我们导出健康检查结果。例如,我们可以通过将/f开关附加到DCDiag命令来将所有测试结果保存到文本文件中。例如:

dcdiag.exe /s:dc01 f:c:\dcdiag_dc01_test01.txt

请注意,我们自定义了日志文件的名称,并将其保存在任何特定的文件夹中。我们使用记事本或任何支持.txt文件的程序打开结果。

我们还导出结果到XLSXXML。但是,此功能仅适用于/test:dns开关:

dcdiag.exe /test:dns /x or, /test:dns/x:

DCDiag只是一个诊断工具。因此,它执行不同的测试,并仅提供其发现的结果。然而,/fix开关是一个很棒的开关,它试图安全地修复所述问题。

dcdiag.exe /s:dc01 /fix

在使用/fix开关时,我们不需要提供更多的参数或特性。对于MachineAccount测试,只有/f开关是有效的。它修复了DC的MachineAccount对象的服务主体名称(SPNs)。

注意:尽管DCDiag设计了(修复)开关以进行安全的自动修复,但它仍然会改变域控制器。因此,在使用/f开关之前,请仔细检查测试结果,并始终为DC创建一个备份

使用PowerShell的DCDiag

Windows PowerShell 中没有 DCDiag 的对应项。然而,我们可以通过使用Invoke-ExpressionInvoke-Command cmdlet 运行带有适当参数的 dcdiag.exe 命令来在 PowerShell 中使用 DCDiag。以下是如何在 PowerShell 中使用 DCDiag 运行 DNS 测试的示例:

Invoke-Expression "dcdiag.exe /test:DNS /v"

在这个示例中,我们使用 Invoke-Expression cmdlet 运行带有 /test:DNS 参数的 dcdiag.exe 命令来运行 DNS 测试,并使用 /v 参数提供详细输出。当然,我们可以用任何其他 DCDiag 测试替换 /test:DNS。或者,我们可以使用 Invoke-Command cmdlet 在远程计算机上运行 DCDiag。

以下是另一个示例:

Invoke-Command -ComputerName "ServerName" -ScriptBlock { dcdiag.exe /test:DNS /v }

在前面的示例中,我们使用-ScriptBlock参数与Invoke-Command一起,指定我们想要在远程计算机上运行的代码。-ScriptBlock参数接受一个脚本块,实质上是用大括号{} 括起来的一段代码。

当我们使用Invoke-Command与-ScriptBlock参数一起使用时,我们在由-ComputerName参数指定的远程计算机上执行脚本块,并将脚本块的输出返回到本地计算机。使用-ScriptBlock参数与Invoke-Command是在远程计算机上执行命令或脚本的强大方式。它有助于在网络环境中管理大量的计算机,就像我们使用DCDiag工具一样。

感谢您阅读DCDiag:如何使用Powershell检查域控制器健康状况。我们将结束本文。

总的来说,DCDiag 对于管理 Active Directory 环境的管理员来说是一个必不可少的工具。提供全面的健康检查套件,用于检测 控制器有助于管理员轻松诊断和解决问题。DCDiag 能够执行与 DNS、复制、LDAP、安全等相关的详细测试,使其成为确保域控制器和 Active Directory 环境 健康和稳定的宝贵工具。

将 DCDiag 纳入定期维护和 监控 例行程序中,管理员有助于防止更严重的问题发生,并确保其 Active Directory 环境保持安全和可靠。

Source:
https://infrasos.com/dcdiag-how-to-check-domain-controller-health-using-powershell/