# Windows Server 激活检查与 KMS 切换 ## 场景 服务器提示需要激活、右下角出「Windows 未激活」水印,或者要把 MAK 换成内网 KMS 统一管理。 ## 前置条件 - 管理员权限 - 内网有 KMS 服务器,客户端能通 1688 端口 - 知道 KMS 地址,或者域里已经发布了 `_vlmcs._tcp` 的 SRV 记录 ## 配置 ```cmd :: 看当前状态和剩余天数 slmgr /dli slmgr /xpr :: 看详细信息(到期时间、激活类型、密钥类型) slmgr /dlv :: 换成内网 KMS slmgr /skms kms.corp.local:1688 slmgr /ato ``` MAK 换回来时要重新装密钥: ```cmd slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX slmgr /ato ``` ## 验证 ```cmd slmgr /xpr ``` 应显示「计算机已永久激活」,或者 KMS 的 180 天周期。 ```powershell # 域里找 KMS 的 SRV 记录 Resolve-DnsName -Name "_vlmcs._tcp" -Type SRV ``` ## 回滚 ```cmd :: 清掉手动设置的 KMS 地址,回到默认(DHCP / DNS 自动发现) slmgr /ckms ``` ## 坑 - **时间不同步会导致激活失败**,KMS 对时间偏差敏感,先 `w32tm /resync`。 - KMS 客户端每 7 天续一次,一个周期 180 天;离线超过 180 天会掉激活。 - 域里如果自动发布了 KMS,`slmgr /ato` 会自己找到,不用手填地址。 - `slmgr /dlv` 里的「剩余 Windows 重置计数」是 sysprep 次数,和激活无关,别看错。 - 虚拟机克隆后 CMID 重复可能激活异常,先 `sysprep` 再激活。 - 批量服务器用 `slmgr /skms` 一台台敲很蠢,用组策略或者登录脚本推。