📊 KMS 监控与报告

批量激活服务 KMS · 第 9 篇 · 适用于 Windows Server 2019 / 2022 / 2025

📑 目录

  1. 1. 为什么监控 KMS
  2. 2. 监控 KMS 主机状态
  3. 3. 监控客户端激活请求
  4. 4. KMS 事件日志
  5. 5. VAMT 报告
  6. 6. PowerShell 监控脚本
  7. 7. 常见问题

1. 为什么监控 KMS

KMS 是企业激活服务的关键组件,需要持续监控以确保:

💡 监控要点
  • 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说明处理方法
12290KMS 操作日志(客户端请求激活)正常,记录客户端激活请求
12288KMS 主机激活状态变更检查 KMS 主机密钥激活状态
12293KMS 无法发布 DNS SRV 记录检查 DNS 动态更新设置
12294KMS 主机密钥即将过期重新激活 KMS 主机密钥
12300KMS 客户端激活失败检查客户端配置和网络
⚠️ 注意

如果事件日志中 没有事件 ID 12290,说明没有客户端请求激活。可能原因:

  1. 客户端未配置 KMS 服务器地址(或 DNS SRV 记录不存在)
  2. 客户端未安装 CSVLK
  3. 防火墙阻止 TCP 1688 端口

5. VAMT 报告

VAMT 可以生成详细的激活报告。

1

打开 Volume Activation Management Tool (VAMT)

2

点击 ReportsActivation Status Report

3

选择报告类型:

  • Activation Status — 激活状态报告
  • Product Key Installation Status — 产品密钥安装状态
  • License Status — 许可证状态
4

导出报告:ExportExport to CSVExport 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 不可达!"
}
💡 定期运行

可以使用 任务计划程序 定期运行此脚本:

  1. 打开 任务计划程序taskschd.msc
  2. 创建基本任务 → 触发器:每天或每小时
  3. 操作:启动程序 → powershell.exe -File "C:\Scripts\Monitor-KMS.ps1"

7. 常见问题

Q1:如何监控 KMS 激活阈值(当前计数)?

运行 slmgr.vbs /dlv,查看 Current Count 字段。

如果计数不增长:

  1. 检查事件日志(事件 ID 12290)查看客户端请求
  2. 检查 DNS SRV 记录是否存在
  3. 检查防火墙是否开放 TCP 1688 端口
Q2:VAMT 报告为空或过期

解决方法:

  1. 在 VAMT 中更新产品状态:选择计算机 → 右键 → Update products
  2. 确保 VAMT 数据库正常(检查数据库配置)
  3. 重新发现网络中的计算机(Discover products
Q3:KMS 主机密钥即将过期怎么办?

KMS 主机密钥 不会过期(与 MAK 不同)。但 KMS 主机本身的激活状态可能会有问题。

如果事件日志显示 事件 ID 12294(KMS 主机密钥即将过期),运行:

  1. slmgr.vbs /dlv 检查激活状态
  2. 如果显示 License Status: Grace Period,需要重新激活:slmgr.vbs /ato
  3. 如果无法在线激活,使用电话激活:slmgr.vbs /dti 获取安装 ID,然后拨打微软激活中心