随便写写

网络备忘录

互联网需要有记忆,应该有记忆,必须有记忆。


Windows 10 数字权利激活

最近几天写了一个数字权利激活使用的批处理脚本,虽然网上有大神用C#写的软件,但是自己动手还是更有意义。

取得管理员权限

默认的批处理文件是没有管理员权限的,如果要进行注册表操作,需要右键单机批处理文件,选择以管理员身份运行,经过搜索,在知乎上找到了这段代码:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"

将这段代码放在批处理最前面,就可以实现自动取得管理员权限,当然开启UAC之后还是要点一下是才能运行的。

获取操作系统版本

数字权利激活的方式,首先要确定操作系统版本,即SKU,这个值可以用powershell的命令来获取:

Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty OperatingSystemSKU

如果要在批处理中执行powershell的命令就需要用:

powershell -command "& {&Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty OperatingSystemSKU}"

这时就可以输出正常的数值,利用这个数值,来确定SKU并决定你在激活时要用到的key

判断操作系统位数

对于如何判断操作系统是32位或者64位,我在网上找到了一段代码,原理是利用if命令判断系统文件夹是否有64位专有的文件夹,如果有,则是64位系统。

代码如下:

if exist %windir%\SysWOW64 (
 start %~dp0\x64\gatherosstate.exe
)else (
 start %~dp0\x86\gatherosstate.exe
)

剩下的就是按照原来的说明中继续操作,需要注意的是,原来的说明中提到企业版N及LTSB 2016 N需要再运行gatherosstate.exe之前执行一个powershell命令,我安装虚拟机测试之后发现并不需要,不知道是为什么。

判断是否为LTSC版本

接下来的问题就是目前微软最新的长期支持版本,即LTSC 2019,不能使用数字权利激活,只能用MAK KEY或者KMS激活,如何判断系统是LTSC 2019或者LTSC 2019 N呢?

下载了对应的镜像,虚拟机安装好之后用下面这一条powershell命令:

Get-WmiObject SoftwareLicensingProduct -Filter 'Name like "Windows%" and LicenseStatus=1' | Select-Object -ExpandProperty Name

返回的结果是Windows(R), EnterpriseS(N) edition,对应的SKU125126

如何判断是LTSC还是LTSB就靠下面的代码了:

for /f "delims=" %%b in ('powershell -command "& {&Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty Version}"') do set ver=%%b
if "%Ver%" GEQ "10.0.17700" (
    if "%sku%"=="125" (
        goto :C
    ) else (
        goto :A
    )
    ) else if "%sku%"=="126" (
       goto :C
    ) else (
       goto :A
    )

首先获取操作系统版本号,如果版本号大于10.0.17700,且SKU125126,即为LTSC版。

最终测试

最后整理一下代码逻辑,最终版本的批处理文件只有85行,又用虚拟机装了不同版本的win10测试,没有发现其它问题。

最近的文章

Hello World

  这是一个完全不会Markdown的人为了记录一些东西而搞出来的一个简单的小博客。…

博客继续阅读