1. 为什么监控 KMS
KMS 是企业激活服务的关键组件,需要持续监控以确保:
- KMS 主机可用 — TCP 1688 端口监听正常
- 激活阈值满足 — 足够数量的客户端请求激活
- 客户端激活成功 — 激活成功率监控
- KMS 主机密钥未过期 — KMS-HK 激活状态正常
💡 监控要点
- KMS 主机状态:
slmgr.vbs /dlv - KMS 服务监听:TCP 1688 端口
- 客户端请求:事件 ID 12290(KMS 操作日志)
- DNS SRV 记录:
nslookup -type=srv _vlmcs._tcp.domain.com
2. 监控 KMS 主机状态
定期运行 slmgr.vbs /dlv 检查 KMS 主机状态。
CMD - 监控 KMS 主机状态
REM 在 KMS 主机上以管理员身份运行
slmgr.vbs /dlv
REM 关键字段:
REM - License Status: Licensed(KMS 主机已激活)
REM - Current Count: 当前激活客户端数量
REM - Listening on Port: 1688
REM - DNS publishing enabled: Yes
REM - KMS Product Key: Enabled
2.1 使用 PowerShell 远程监控
PowerShell - 远程检查 KMS 状态
# 远程检查 KMS 主机状态
Invoke-Command -ComputerName "DC01" -ScriptBlock {
cscript $env:SystemRoot"\system32\slmgr.vbs" "/dlv"
}
# 检查 TCP 1688 端口是否监听
Test-NetConnection -ComputerName "DC01" -Port 1688
# 检查 KMS 服务进程
Get-Process -Name "sppsvc" -ComputerName "DC01"
3. 监控客户端激活请求
KMS 主机记录所有客户端激活请求。可以通过 事件查看器 查看。
1
打开 事件查看器(eventvwr.msc)
2
导航到:应用程序和服务日志 → Microsoft → Windows → Key Management Service → KMS
3
查看事件:
- 事件 ID 12290 — KMS 操作日志(客户端激活请求)
- 事件 ID 12288 — KMS 主机激活状态变更
- 事件 ID 12293 — KMS 主机无法发布 DNS SRV 记录
PowerShell - 查询 KMS 事件日志
# 查询最近的 KMS 操作日志(事件 ID 12290)
Get-WinEvent -LogName "Microsoft-Windows-Key Management Service/KMS" -MaxEvents 50
# 筛选特定事件 ID
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
4. KMS 事件日志
| 事件 ID | 说明 | 处理方法 |
|---|---|---|
| 12290 | KMS 操作日志(客户端请求激活) | 正常,记录客户端激活请求 |
| 12288 | KMS 主机激活状态变更 | 检查 KMS 主机密钥激活状态 |
| 12293 | KMS 无法发布 DNS SRV 记录 | 检查 DNS 动态更新设置 |
| 12294 | KMS 主机密钥即将过期 | 重新激活 KMS 主机密钥 |
| 12300 | KMS 客户端激活失败 | 检查客户端配置和网络 |
⚠️ 注意
如果事件日志中 没有事件 ID 12290,说明没有客户端请求激活。可能原因:
- 客户端未配置 KMS 服务器地址(或 DNS SRV 记录不存在)
- 客户端未安装 CSVLK
- 防火墙阻止 TCP 1688 端口
5. VAMT 报告
VAMT 可以生成详细的激活报告。
1
打开 Volume Activation Management Tool (VAMT)
2
点击 Reports → Activation Status Report
3
选择报告类型:
- Activation Status — 激活状态报告
- Product Key Installation Status — 产品密钥安装状态
- License Status — 许可证状态
4
导出报告:Export → Export to CSV 或 Export to HTML
💡 提示
VAMT 报告可以显示每台计算机的:
- 产品名称和版本
- 激活状态(Licensed / Grace Period / Notification)
- 产品密钥后 5 位
- 上次激活时间
6. PowerShell 监控脚本
可以编写 PowerShell 脚本定期监控 KMS 状态。
PowerShell - KMS 监控脚本
# KMS 监控脚本(保存为 Monitor-KMS.ps1)
$KMSHost = "DC01"
$Report = "C:\KMS-Report-$(Get-Date -Format 'yyyy-MM-dd').csv"
# 1. 检查 KMS 主机状态
$KMSStatus = Invoke-Command -ComputerName $KMSHost -ScriptBlock {
cscript $env:SystemRoot"\system32\slmgr.vbs" "/dlv"
}
# 2. 检查 TCP 1688 端口
$PortTest = Test-NetConnection -ComputerName $KMSHost -Port 1688
# 3. 检查 DNS SRV 记录
$SRVRecord = Resolve-DnsName -Name "_vlmcs._tcp.iehang.cn" -Type "SRV" -ErrorAction "SilentlyContinue"
# 4. 生成报告
$Result = [PSCustomObject]@{
Time = Get-Date
KMSHost = $KMSHost
Port1688Open = $PortTest.TcpTestSucceeded
SRVRecordExists = $SRVRecord -ne $null
}
$Result | Export-Csv -Path $Report -Append -NoTypeInformation
# 5. 如果端口关闭或 SRV 记录不存在,发送警报
if ($PortTest.TcpTestSucceeded -eq $false) {
# 发送电子邮件警报(配置你的 SMTP 设置)
# Send-MailMessage -To "admin@iehang.cn" -Subject "KMS 警报:端口 1688 不可达" ...
Write-Warning "KMS 主机 $KMSHost 端口 1688 不可达!"
}
💡 定期运行
可以使用 任务计划程序 定期运行此脚本:
- 打开 任务计划程序(
taskschd.msc) - 创建基本任务 → 触发器:每天或每小时
- 操作:启动程序 →
powershell.exe -File "C:\Scripts\Monitor-KMS.ps1"
7. 常见问题
Q1:如何监控 KMS 激活阈值(当前计数)?
运行 slmgr.vbs /dlv,查看 Current Count 字段。
如果计数不增长:
- 检查事件日志(事件 ID 12290)查看客户端请求
- 检查 DNS SRV 记录是否存在
- 检查防火墙是否开放 TCP 1688 端口
Q2:VAMT 报告为空或过期
解决方法:
- 在 VAMT 中更新产品状态:选择计算机 → 右键 → Update products
- 确保 VAMT 数据库正常(检查数据库配置)
- 重新发现网络中的计算机(Discover products)
Q3:KMS 主机密钥即将过期怎么办?
KMS 主机密钥 不会过期(与 MAK 不同)。但 KMS 主机本身的激活状态可能会有问题。
如果事件日志显示 事件 ID 12294(KMS 主机密钥即将过期),运行:
slmgr.vbs /dlv检查激活状态- 如果显示 License Status: Grace Period,需要重新激活:
slmgr.vbs /ato - 如果无法在线激活,使用电话激活:
slmgr.vbs /dti获取安装 ID,然后拨打微软激活中心