如果我想检查 Windows 是否已激活,但又懒得深入菜单系统,或者我使用的 Windows 版本没有桌面体验(例如 Server Core),我该如何仅使用命令行来检查激活状态?
答案1
纯粹的 PowerShell 解决方案是:
Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" |
where { $_.PartialProductKey } | select Description, LicenseStatus
这将给你如下输出:
Description LicenseStatus
----------- -------------
Windows(R) Operating System, OEM_DM channel 1
如果LicenseStatus为1,表示系统永久激活。
这样做的好处是,您可以通过指定-ComputerName
参数轻松检查 RemoteMachines。
Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" -ComputerName RemoteComp |
where { $_.PartialProductKey } | select Description, LicenseStatus
但我必须说这slmgr /xpr
更快而且更清晰。
答案2
在 Windows 10 或 Windows Server 2016/2019 上,要使用命令提示符(或 powershell)显示激活状态,请打开您首选的命令行工具并输入以下命令
slmgr /xpr
将显示一个对话框,指示操作系统的激活状态。如果操作系统尚未激活,则对话框将显示它处于“通知模式”
如果 Windows 成功激活,对话框将显示“永久激活”状态(如下所示),或者如果使用限时批量许可证激活,则会显示激活即将到期的时间。
在旧版本的 Windows(例如 Windows 7)中,消息对话框将类似,但文本可能会略有不同。
在完成向导之前,通过使用 Shift + F10 启动命令提示符,此方法还可用于检查开箱即用体验 (OOBE) 向导期间的激活状态。
答案3
- 为了避免弹出窗口和
- 将 Windows 版本/激活状态存储在变量中
- 用于
cscript
运行slmgr.vbs
并将其包装在批处理文件中 for /f
使用循环解析输出
:: Q:\Test\2019\04\07\SU_1422368.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "WinVerAct="
For /f "tokens=*" %%W in ('
cscript /Nologo "C:\Windows\System32\slmgr.vbs" /xpr
') Do Set "WinVerAct=!WinVerAct! %%W"
if Not defined WinVerAct (
Echo:No response from slmgr.vbs
Exit /B 1
)
Echo Windows Version Activation Status:
Echo:"%WinVerAct:~1%"
示例输出:
> Q:\Test\2019\04\07\SU_1422368.cmd
Windows Version Activation Status:
"Windows(R), Professional edition: Der Computer ist dauerhaft aktiviert."
包装 slmgr.vbs 的单行 PowerShell 脚本:
$WinVerAct = (cscript /Nologo "C:\Windows\System32\slmgr.vbs" /xpr) -join ''
答案4
您还可以
SELECT LicenseStatus FROM SoftwareLicensingProduct
作为 WMI 查询,其中值为:
0=Unlicensed
1=Licensed
2=OOBGrace
3=OOTGrace
4=NonGenuineGrace
5=Notification
6=ExtendedGrace