使用PowerShell校验Windows OEM密钥是否为Win10专业版
PowerShell校验OEM密钥是否为Windows 10专业版的实现方法
核心逻辑
设备UEFI/BIOS中存储的OA3.0 OEM密钥和系统版本是强绑定的,我们可以通过调用系统内置的软件授权WMI类,临时加载提取到的密钥读取其绑定的版本信息,无需联网即可完成校验,整个过程不会破坏当前系统的KMS激活状态。
前置要求
- 执行脚本的账户需要拥有本地管理员权限
- 适用系统范围:Windows 10 全版本、Windows 11 全版本
完整可运行脚本
<# 返回值说明: True = 检测到有效Windows 10专业版OEM密钥,可执行KMS转OEM操作 False = 无有效OEM密钥/密钥对应版本不是Windows 10专业版 #> function Test-Win10ProOEMKey { # 提取固件中写入的原生OEM密钥 $licService = Get-CimInstance -Class SoftwareLicensingService $oemKey = $licService.OA3xOriginalProductKey if ([string]::IsNullOrWhiteSpace($oemKey)) { Write-Warning "当前设备未内置OA3.0 OEM密钥,跳过转换" return $false } # 临时加载密钥到授权服务做版本校验,不会替换当前激活配置 $installRes = $licService.InstallProductKey($oemKey) if ($installRes.ReturnValue -ne 0) { Write-Warning "密钥无效,校验失败,错误码:$($installRes.ReturnValue)" return $false } # 查询密钥对应的授权属性 $targetLic = Get-CimInstance SoftwareLicensingProduct | Where-Object { $_.ProductKeyID -and $_.PartialProductKey -and $_.EditionID } | Sort-Object -Property LicenseStatus -Descending | Select-Object -First 1 # 版本匹配规则:内部EditionID为Professional,通道为OEM,排除其他衍生版本 $checkResult = $targetLic.EditionID -eq "Professional" -and $targetLic.ProductKeyChannel -match "^OEM" -and $targetLic.Name -notmatch "Workstation|N|Education|Enterprise|Core|Single Language" # 清理临时加载的校验密钥,恢复原有授权状态 slmgr.vbs /upk | Out-Null return $checkResult } # 调用示例 if (Test-Win10ProOEMKey) { Write-Host "校验通过:当前设备内置Win10专业版OEM密钥" -ForegroundColor Green <# 后续替换激活的命令可以放在这里 $validKey = (Get-CimInstance SoftwareLicensingService).OA3xOriginalProductKey slmgr.vbs /ipk $validKey slmgr.vbs /ato #> } else { Write-Host "校验不通过:内置密钥不是Win10专业版,跳过转换" -ForegroundColor Red }
注意事项
- 校验过程中临时加载密钥仅用于读取版本属性,脚本执行末尾会自动清理临时密钥,不会导致现有KMS激活失效
- 版本判断优先使用系统内部
EditionID字段做匹配,比读取显示名称的准确率高,可100%排除家庭版(Core)、专业工作站版(ProfessionalWorkstation)、教育版、企业版、单语言版、N版等非目标版本 - 批量部署场景下,可以将脚本封装为计算机启动脚本,通过组策略推送,将校验结果写入共享日志文件即可批量统计所有设备的密钥适配情况
内容的提问来源于stack exchange,提问作者FatalxE
相关产品推荐
相关产品推荐

