1. KMS 故障排除流程
KMS 故障排除应遵循 从服务器到客户端 的顺序:
- 检查 KMS 主机状态(激活状态、端口监听)
- 检查 DNS SRV 记录(客户端自动发现)
- 检查 防火墙(TCP 1688 端口)
- 检查 客户端配置(CSVLK、KMS 服务器地址)
- 检查 激活阈值(是否达到 25 台 Windows/5 台 Server)
- 查看 事件日志(KMS 操作日志)
💡 快速诊断命令
# 在 KMS 主机上运行
slmgr.vbs /dlv
# 在客户端上运行
slmgr.vbs /dlv
nslookup -type=srv _vlmcs._tcp.iehang.cn
Test-NetConnection -ComputerName kms.iehang.cn -Port 1688
2. KMS 主机激活失败
KMS 主机无法激活的常见原因:
2.1 KMS 主机密钥无效或已过期
CMD - 验证 KMS 主机密钥
REM 在 KMS 主机上运行
slmgr.vbs /dlv
REM 检查输出:
REM - License Status: Licensed(已激活)
REM - License Status: Grace Period(未激活,宽限期)
REM - License Status: Notification(激活失败)
REM 如果未激活,重新安装密钥并激活:
slmgr.vbs /ipk <KMS_HOST_KEY>
slmgr.vbs /ato
2.2 无法连接微软激活服务器(在线激活失败)
1
使用 电话激活:
slmgr.vbs /dti
记录 安装 ID,拨打微软激活中心电话,提供安装 ID,获取确认 ID。
2
使用确认 ID 激活:
slmgr.vbs /atp <CONFIRMATION_ID>
⚠️ 注意
KMS 主机密钥从 VLSC 获取。如果密钥无效,登录 VLSC 重新下载密钥。
3. 客户端激活失败(0xC004F038)
错误 0xC004F038 表示 KMS 激活阈值未达到。
⚠️ 激活阈值
- Windows 客户端:至少 25 台请求激活
- Windows Server:至少 5 台请求激活
- Office:至少 5 台安装请求激活
PowerShell - 检查当前计数
# 在 KMS 主机上运行
$dlv = cscript "$env:SystemRoot\system32\slmgr.vbs" "/dlv"
$dlv | Select-String "Current Count"
# 输出示例:
# Current Count: 12(还差 13 台 Windows 客户端)
💡 实验环境解决方案
快速克隆多台 Windows 10 虚拟机(使用 Sysprep 通用化),或临时修改注册表跳过阈值检查(仅用于实验,不推荐生产环境)。
4. 客户端激活失败(0xC004F074)
错误 0xC004F074 表示 客户端无法连接到 KMS 主机。
1
检查 KMS 服务器地址配置:
slmgr.vbs /dlv
查看 KMS 主机名称 字段,确认是否指向正确的 KMS 主机。
2
测试 KMS 主机连通性:
Test-NetConnection -ComputerName kms.iehang.cn -Port 1688
如果 TcpTestSucceeded: False,检查防火墙。
3
检查 DNS SRV 记录:
nslookup -type=srv _vlmcs._tcp.iehang.cn
如果记录不存在,手动创建(参见第 5 节)。
5. DNS SRV 记录问题
客户端无法通过 DNS 自动发现 KMS 主机。
5.1 SRV 记录不存在
CMD - 验证 SRV 记录
nslookup -type=srv _vlmcs._tcp.iehang.cn
REM 如果输出"*** 找不到 _vlmcs._tcp.iehang.cn: Non-existent domain"
REM 说明 SRV 记录不存在,需要手动创建(参见第 4 篇 4.1 节)
5.2 KMS 主机未发布 SRV 记录
CMD - 启用 DNS 发布
REM 在 KMS 主机上运行
slmgr.vbs /dlv
REM 检查"DNS publishing enabled": Yes
REM 如果为 No,运行:
slmgr.vbs /dns
💡 手动创建 SRV 记录
在 DNS 管理器(dnsmgmt.msc)中:
- 右键域名 → 其他新记录
- 选择 服务位置(SRV) → 创建记录
- 服务:
_vlmcs,协议:_tcp,端口:1688,提供服务的主机:kms.iehang.cn
6. 防火墙与连通性问题
防火墙阻止 TCP 1688 端口是常见原因。
PowerShell - 检查防火墙规则
# 在 KMS 主机上运行
Get-NetFirewallRule | Where-Object { $_.LocalPort -eq 1688 }
# 如果规则不存在,创建规则:
New-NetFirewallRule -Name "KMS-TCP-1688" `
-DisplayName "KMS Service (TCP 1688)" `
-Protocol "TCP" `
-LocalPort 1688 `
-Action "Allow" `
-Direction "Inbound"
6.1 测试端口连通性(客户端)
PowerShell - 测试端口
# 在客户端上运行
Test-NetConnection -ComputerName kms.iehang.cn -Port 1688
# 输出应显示:
# TcpTestSucceeded : True
# 如果为 False,检查:
# 1. KMS 主机防火墙
# 2. 网络路径(ping kms.iehang.cn)
# 3. KMS 主机服务是否运行(slmgr.vbs /dlv 查看 Listening on Port: 1688)
7. 事件日志分析
KMS 事件日志位于 应用程序和服务日志 → Microsoft → Windows → Key Management Service → KMS。
| 事件 ID | 说明 | 处理方法 |
|---|---|---|
| 12290 | KMS 操作日志(客户端请求激活) | 正常,记录客户端激活请求 |
| 12288 | KMS 主机激活状态变更 | 检查 KMS 主机密钥激活状态 |
| 12293 | KMS 无法发布 DNS SRV 记录 | 检查 DNS 动态更新设置 |
| 12294 | KMS 主机密钥即将过期 | 重新激活 KMS 主机密钥 |
| 12300 | KMS 客户端激活失败 | 检查客户端配置和网络 |
PowerShell - 查询 KMS 事件日志
# 查询最近的 KMS 操作日志
Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-Key Management Service/KMS"; ID=12290} -MaxEvents 20
# 导出事件日志
Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-Key Management Service/KMS"} | Export-Csv -Path "C:\KMS-Events.csv" -NoTypeInformation
8. 常用错误代码速查
| 错误代码 | 说明 | 解决方法 |
|---|---|---|
| 0xC004F038 | KMS 激活阈值未达到 | 部署更多客户端,等待达到阈值 |
| 0xC004F074 | 客户端无法连接到 KMS 主机 | 检查防火墙、DNS SRV 记录、KMS 服务器地址 |
| 0xC004F069 | KMS 主机密钥与产品版本不匹配 | 安装正确的 KMS 主机密钥 |
| 0x80070005 | 访问被拒绝(权限不足) | 以管理员身份运行命令 |
| 0x8007232B | DNS 名称不存在(SRV 记录未找到) | 创建 DNS SRV 记录或手动指定 KMS 服务器 |
| 0x80072338 | DNS 查询失败 | 检查 DNS 服务器设置和连通性 |
💡 完整错误代码列表
微软官方文档:KMS Activation Error Codes
8.1 客户端激活状态速查
| 状态 | 说明 | 处理方法 |
|---|---|---|
| Licensed | 已激活 | 无需处理 |
| Grace Period | 宽限期(180 天内) | 检查 KMS 主机可用性 |
| Notification | 需要激活 | 检查客户端配置和 KMS 主机状态 |
| OutOfGrace | 宽限期已过 | 重新激活(slmgr.vbs /ato) |
| Non-Genuine | 非正版 | 使用正版密钥重新安装 |