密钥管理服务 (KMS) 故障排除指南

企业客户将密钥管理服务 (KMS) 设置为部署流程的一部分,因为通过该服务,他们可以使用简单、直接的过程在其环境中激活 Windows。 通常,一旦设置了 KMS 主机,KMS 客户端就会自动连接到主机并自行激活。 然而,有时该流程不会按预期运行。 本文将引导你了解如何解决可能遇到的任何问题。

有关事件日志条目和 slmgr.vbs 脚本的详细信息,请参阅批量激活技术参考

从何处开始对 KMS 进行故障排除

首先,我们来快速回顾一下 KMS 激活的工作原理。 KMS 是一种客户端-服务器模型,与动态主机配置协议 (DHCP) 有一些相似之处。 但是,KMS 会启用产品激活,而不是向客户端针对其请求发出 IP 地址。 KMS 也是一种续订模型,客户端可尝试定期重新激活。 具有两个角色:KMS 主机和 KMS 客户端 。

  • KMS 主机在环境中运行激活服务并启用激活。 若要配置 KMS 主机,必须从批量许可服务中心 (VLSC) 安装 KMS 密钥,然后激活服务。
  • KMS 客户端是部署于环境中的 Windows 操作系统,需要激活。 KMS 客户端可以运行任何使用批量激活的 Windows 版本。 KMS 客户端附带预装的密钥,称为通用批量许可密钥 (GVLK) 或 KMS 客户端安装密钥。 GVLK 的存在使系统成为了 KMS 客户端。 KMS 客户端使用 DNS SRV 记录 (_vlmcs._tcp) 来识别 KMS 主机。 接下来,客户端会自动尝试发现此服务并将其用于激活客户端自身。 在 30 天开箱宽限期内,客户端尝试每两小时激活一次。 KMS 客户端激活后,将尝试每七天续订一次激活。

从故障排除的角度来看,可能必须同时查看主机和客户端才能找出问题发生的原因。

KMS 主机故障排除

在故障排除期间检查 KMS 主机时,应该查看两个方面:

  • 在命令行提示符下使用 slmgr.vbs 命令检查主机软件许可证服务的状态。
  • 检查事件查看器中是否有与许可或激活相关的事件。

使用 slmgr.vbs 命令检查软件许可服务

若要查看软件许可服务的详细输出,请打开提升的命令提示符窗口并输入 slmgr.vbs /dlv。 以下屏幕截图显示了在 Microsoft 内的一台 KMS 主机上运行此命令的结果。

A screenshot of the `slmgr` command output for the KMS client with labels explaining what each variable means.

以下是故障排除时应注意输出中的一些变量:

  • 版本信息位于 slmgr.vbs /dlv 输出的顶部。 版本信息对于确定服务是否是最新的非常有用。 务必确保所有内容都是最新的,因为 KMS 服务支持不同的 KMS 主机密钥。 可以使用此数据来评估当前使用的版本是否支持你尝试安装的 KMS 主机密钥。 有关更新的详细信息,请参阅更新可用于 Windows Vista 和 Windows Server 2008,以扩展对 Windows 7 和 Windows Server 2008 R2 的 KMS 激活支持

  • 名称指示在 KMS 主机系统上运行的 Windows 版本。 可以使用此信息来排查涉及添加或更改 KMS 主机密钥的问题。 例如,可以使用此信息来验证操作系统版本是否支持你尝试使用的密钥。

  • 说明显示当前安装的密钥。 使用此字段可验证首次激活服务的密钥是否为已部署的 KMS 客户端的正确密钥。

  • 许可证状态显示 KMS 主机系统的状态。 该值应为“已获许可”。 任何其他值都意味着应该重新激活主机。

  • 当前计数显示 050 之间的计数。 计数在操作系统之间是累积的,指示在 30 天内尝试激活的有效系统的数目。

    如果计数为 0,则服务最近已激活,或者任何有效的客户端都未连接到 KMS 主机。

    无论环境中存在多少个有效系统,计数都不会增加到 50 以上。 该计数设置为仅缓存 KMS 客户端返回的最大许可策略的两倍。 最大策略由 Windows 客户端操作系统设置,这需要来自 KMS 主机的 25 或更大计数才能自行激活。 因此,KMS 主机上可以拥有的最大计数是 2 x 25 或 50。 在仅包含 Windows Server KMS 客户端的环境中,KMS 主机上的最大计数为 10。 此限制是因为 Windows Server 版本的阈值为 5(2 x 5,或 10)。

    当环境中具有已激活的 KMS 主机和足够的客户端,但计数不会增加到 1 以上时,会出现与计数相关的常见问题。 发生此问题时,意味着部署的客户端映像配置不正确,因此系统没有唯一的客户端计算机 ID (CMID)。 有关详细信息,请参阅 KMS 客户端在将基于 Windows Vista 或 Windows 7 的新客户端计算机添加到网络时,KMS 当前计数不增加。 我们的一名支持上报工程师通过 KMS Host Client Count not Increasing Due to Duplicate CMID(由于CMID 重复导致 KMS 主机客户端计数没有增加)也发布了有关此问题的博客文章。

    计数可能不会增加的另一个原因是,环境中的 KMS 主机过多,而计数在所有这些主机中分布。

  • 侦听端口。 与 KMS 的通信使用匿名 RPC。 默认情况下,客户端使用 1688 TCP 端口来连接到 KMS 主机。 请确保此端口在 KMS 客户端与 KMS 主机之间打开。 可更改或配置 KMS 主机上的端口。 在通信过程中,KMS 主机会向 KMS 客户端发送端口标识。 如果更改 KMS 客户端上的端口,则在客户端与主机联系时会覆盖端口标识。

我们经常被问及有关 slmgr.vbs /dlv 输出“累计请求数”部分的问题。 通常,此数据对于故障排除没有用。 KMS 主机会持续记录每个尝试激活或重新激活的 KMS 客户端的状态。 失败的请求表示 KMS 主机不支持某些 KMS 客户端。 例如,如果 Windows 7 KMS 客户端尝试针对使用 Windows Vista KMS 密钥激活的 KMS 主机进行激活,则激活会失败。

具有许可证状态的请求”行说明过去和现在所有可能的许可证状态。 从故障排除的角度来看,仅当计数不按预期增加时,此数据才适用。 在这种情况下,应看到失败的请求数增加。 若要解决此问题,应检查用于首次激活 KMS 主机系统的产品密钥。 另请注意,仅当重新安装 KMS 主机系统时,累积请求值才会重置。

有用的 KMS 主机事件

你应该熟悉以下部分中描述的事件 ID,以便更有效地排查与主机相关的问题。

事件 ID 12290

当 KMS 客户端在尝试激活时联系主机时,KMS 主机会创建一个标记为事件 ID 12290 的日志。 事件 ID 12290 包含可用于确定联系主机的客户端类型以及发生故障的原因的信息。 事件 ID 12290 项的以下段来自 KMS 主机的密钥管理服务事件日志。

A screenshot of the KMS event log. There are labels highlighting important areas of the Info field and what the number strings mean.

事件详细信息包括下列信息:

  • 激活所需的最小计数,报告来自 KMS 主机的计数必须为 5 才能激活客户端。 这意味着该操作系统是 Windows Server 操作系统,尽管此变量本身并未指示客户端正在使用哪个版本。 如果客户端未激活,请确保主机的计数允许客户端激活。
  • 客户端计算机 ID (CMID),这是每个系统上的唯一值。 如果该值不是唯一的,那是因为未正确配置映像以使用 sysprep 进行分发。 若要了解有关通用化计算机的更多信息,请参阅 Sysprep(通用化)Windows 安装。 遇到此问题时,即使环境中有足够的客户端,KMS 主机计数也不会增加。 有关详细信息,请参阅在将基于 Windows Vista 或 Windows 7 的新客户端计算机添加到网络时,KMS 当前计数不增加
  • 许可证状态和状态过期时间,这是客户端的当前许可证状态。 此变量可以帮助你判断客户端是首次尝试激活还是尝试重新激活。 时间条目还可以指示如果没有其他变化,客户端可以保持该状态多长时间。

如果要对客户端进行故障排除,并且在 KMS 主机上找不到相应的事件 ID 12290,则表示客户端未连接到 KMS 主机。 缺少事件 ID 12290 条目的原因可能包括:

  • 网络中断。
  • 主机未解析或未在 DNS 中注册。
  • 防火墙阻止 TCP 1688。
    • 该端口也可能在环境中的其他位置被阻止,包括 KMS 主机系统本身。 KMS 主机默认具有针对 KMS 的防火墙例外,但此例外不会自动启用。 必须手动启用此例外。
  • 事件日志已满。

KMS 客户端记录两个对应事件:事件 ID 12288 和事件 ID 12289。 有关这些事件的信息,请参阅 KMS 客户端部分。

事件 ID 12293

在 KMS 主机上查找的另一个相关事件是事件 ID 12293。 此事件表示主机未在 DNS 中发布所需的记录。 这种情况可能会导致失败,应该确保在设置主机之后和部署客户端之前不存在该事件。 有关 DNS 问题的详细信息,请参阅 KMS 和 DNS 问题的常见排查过程

KMS 客户端

还可以使用 slmgr.vbs 命令和事件查看器对 KMS 客户端上的激活进行故障排除。

Slmgr.vbs 和软件许可服务

若要查看软件许可服务的详细输出,请打开提升的命令提示符窗口,并在命令提示符处输入 slmgr.vbs /dlv。 以下屏幕截图显示 Microsoft 内其中一台 KMS 主机上此命令的结果。

A screenshot of the output for the slmgr command for the KMS client. There are labels explaining what each variable means.

以下是故障排除时应注意输出中的一些变量:

  • 名称,指示 KMS 客户端系统使用的 Windows 版本。 可以使用此变量来验证尝试激活的 Windows 版本是否与 KMS 兼容。
  • 说明,显示安装了哪个密钥。 例如,VOLUME_KMSCLIENT 表示系统已安装 KMS 客户端安装密钥或 GVLK,这是批量许可证媒体的默认配置。 具有 GVLK 的系统会自动尝试使用 KMS 主机激活。 如果此处显示其他值(如 MAK),则必须重新安装 GVLK,才能将此系统配置为 KMS 客户端。 可以按照 KMS 客户端安装密钥中的说明运行 slmgr.vbs /ipk <GVLK> 来手动安装密钥,或者按照批量激活管理工具 (VAMT) 技术参考中的说明使用 VAMT。
  • 部分产品密钥,可用于确定 KMS 客户端安装密钥是否与 KMS 客户端使用的操作系统匹配。 默认情况下,正确的密钥存在于使用批量许可服务中心 (VLSC) 门户中的媒体生成的系统上。 在某些情况下,客户可以使用多次激活密钥 (MAK) 激活,直到环境中具有足够多的系统来支持 KMS 激活为止。 必须在这些系统上安装 KMS 客户端安装密钥,才能将系统从 MAK 转换为 KMS。 使用 VAMT 安装此密钥,并确保使用正确的密钥。
  • 许可证状态显示 KMS 客户端系统的状态。 对于 KMS 激活的系统,此值应为“已获许可”。 任何其他值都可能表示存在问题。 例如,如果 KMS 主机正常运行,但 KMS 客户端仍然未激活或停留在宽限状态,则意味着某些原因阻止客户端访问主机系统。 这种阻止可能是防火墙问题、网络中断等。
  • 客户端计算机 ID (CMID),在每个 KMS 客户端中应该是唯一的。 如使用 slmgr.vbs 命令检查软件许可服务中所述,与计数相关的一个常见问题是,无论你在环境中激活多少个 KMS 主机或客户端,计数都不会增加到超过 1。 有关详细信息,请参阅在将基于 Windows Vista 或 Windows 7 的新客户端计算机添加到网络时,KMS 当前计数不增加
  • DNS 中的 KMS 计算机名称,显示客户端成功用于激活的 KMS 主机的 FQDN 以及用于通信的 TCP 端口。
  • KMS 主机缓存,显示是否启用缓存。 通常,缓存默认处于启用状态。 启用缓存后,KMS 客户端将缓存用于激活的 KMS 主机名称,并在重新激活时直接与此主机通信,而不需要查询 DNS。 如果客户端无法与缓存的 KMS 主机联系,则会查询 DNS 来发现新的 KMS 主机。

KMS 客户端事件

以下部分介绍了你应该熟悉的客户端事件,以帮助你更有效地解决潜在问题。

事件 ID 12288 和事件 ID 12289

KMS 客户端成功激活或重新激活时,客户端会记录两个事件:事件 ID 12288 和事件 ID 12289。 以下屏幕截图显示事件 ID 12288 条目中来自 KMS 客户端的密钥管理服务事件日志的段。

A screenshot of the Event ID 12288 window with labels explaining what each value in the error message means.

如果你只看到事件 ID 12288,而没有相应的事件 ID 12289,则可能是 KMS 客户端无法访问 KMS 主机、KMS 主机未响应,或者客户端未收到主机的响应。 在这种情况下,必须验证 KMS 主机是否可发现,以及 KMS 客户端是否可以联系该主机。

事件 ID 12288 中最相关的信息是“信息”字段中的数据。 例如,“信息”显示客户端的当前状态以及客户端尝试激活时使用的 FQDN 和 TCP 端口。 可以使用 FQDN 来解决 KMS 主机上的计数不增加的问题。 例如,如果客户端可用的 KMS 主机过多(合法的或不受支持的系统),则计数可能会分布在所有这些主机上。

激活失败并不总是意味着客户端有事件 ID 12288,而没有 12289。 激活或重新激活失败可能也有这两个事件。 在这种情况下,必须检查第二个事件来验证失败的原因。

A screenshot of the client event 12289 window with labels explaining what each value in the Info section means.

事件 ID 12289 的信息部分提供以下信息:

  • 激活标志,指示激活是成功 (1) 还是失败 (0)。
  • KMS 主机上的当前计数,显示客户端尝试激活时 KMS 主机上的计数值。 如果激活失败,则可能是因为此客户端操作系统的计数不足,或者环境中没有足够的系统来生成计数。

支持人员需要你提供什么信息?

如果激活在故障排除后未按预期工作,你可以联系 Microsoft 支持寻求技术帮助。 支持工程师通常会要求提供以下信息:

  • 来自 KMS 主机和 KMS 客户端系统的 slmgr.vbs /dlv 输出。
  • 来自 KMS 主机的事件日志(密钥管理服务日志)和来自 KMS 客户端系统的事件日志(应用程序日志)。

后续步骤