Windows / Office 2016 一键 KMS 激活
在批处理文件对密钥与服务器地址进行设定,同一局域网/软件环境下就可以一键激活了。
主要还是不想每次都手动输入序列号,挺烦的…
另外如果安装的是 零售版(Retail) 版本 Office,将自动寻找并安装其 KMS 授权文件。
支持正版:购买微软 KMS 授权服务。
@echo off
call :INIT_KMS_ACTIVATION
:: KMS 激活密钥
set KEY_13=YC7DK-G2NP3-2QQC3-J6H88-GVGXT
set KEY_16=XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
:: https://technet.microsoft.com/en-us/library/jj612867(v=ws.11).aspx
set KEY_WINDOWS=W269N-WFGWX-YVC9B-4J6C9-T83GX
:: 自动寻找 KMS 服务器
set KMS_SERVER=
:: 指定某个 KMS 服务器
:: set KMS_SERVER=10.0.0.1
call :SETUP_WINDOWS
call :SETUP_OFFICE_KMS 13
call :SETUP_OFFICE_KMS 16
pause
exit /b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: WINDOWS SLMGR - KMS ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:_SLMGR_INSTALL
:: [内部过程] _SLMGR_INSTALL <KMS 授权信息文件>
%DEBUG% cscript //Nologo "%windir%\System32\slmgr.vbs" /ilc "%~1"
exit /b
:_SLMGR_SET_KMS
:: [内部过程] _SLMGR_SET_KMS
%DEBUG% cscript //Nologo "%windir%\System32\slmgr.vbs" /skms "%~1"
exit /b
:_SLMGR_INSTALL_KEY
:: [内部过程] _SLMGR_INSTALL_KEY <密钥>
%DEBUG% cscript //Nologo "%windir%\System32\slmgr.vbs" /ipk "%~1"
exit /b
:_SLMGR_ACTIVATE
:: [内部过程] _SLMGR_ACTIVATE
%DEBUG% cscript //Nologo "%windir%\System32\slmgr.vbs" /ato
exit /b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: OFFICE OSPP - KMS ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:_OSPP_INSTALL
:: [内部过程] _OSPP_INSTALL <KMS 授权信息文件>
%DEBUG% cscript //Nologo "%OFFICE_DIR%\ospp.vbs" /inslic:"%~1"
exit /b
:_OSPP_SET_KMS
:: [内部过程] _OSPP_SET_KMS
%DEBUG% cscript //Nologo "%OFFICE_DIR%\ospp.vbs" /sethst:"%~1"
exit /b
:_OSPP_INSTALL_KEY
:: [内部过程] _OSPP_INSTALL_KEY <密钥>
%DEBUG% cscript //Nologo "%OFFICE_DIR%\ospp.vbs" /inpkey:"%~1"
exit /b
:_OSPP_ACTIVATE
:: [内部过程] _OSPP_ACTIVATE
%DEBUG% cscript //Nologo "%OFFICE_DIR%\ospp.vbs" /act
exit /b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: KMS INITIALISATION ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:INIT_KMS_ACTIVATION
:: [公开过程] INIT_KMS_ACTIVATION
::
:: 对脚本进行一些初始化设定。
set "DEBUG="
:: 检测系统版本
:: WIN8+ 使用 SLMGR 安装授权
:: 其它系统使用 OSPP 安装 KMS 授权
for /f "tokens=6 delims=[]. " %%G in ('ver') do set win=%%G
if %win% GEQ 9200 (
set OFFICE_LICENSE=:_SLMGR
) else (
set OFFICE_LICENSE=:_OSPP
)
exit /b
:_SETUP_OFFICE_KMS_ARCH
:: [内部过程] _SETUP_OFFICE_KMS_ARCH <检索 Office 使用的 Program Files 目录> <年份>
set "OFFICE_DIR=%~1\Microsoft Office\Office%~2\"
set "OFFICE_LIC=%~1\Microsoft Office\root\Licenses%~2\"
if not exist "%OFFICE_DIR%" exit /b
if not exist "%OFFICE_LIC%" exit /b
echo Search license file from %OFFICE_LIC% ...
if not ".%SKIP_INSTALL%" == ".Y" (
for /r "%OFFICE_LIC%" %%a in (*.xrm-ms) do (
echo %%~na | findstr /C:KMS_Client >nul && (
echo Install %%~na...
call %OFFICE_LICENSE%_INSTALL "%%~a"
)
)
)
:: 配置 KMS 服务器
if not ".%KMS_SERVER%" == "." (
call :_OSPP_SET_KMS "%KMS_SERVER%"
) else (
echo Skip setup kms server.
)
:: 配置 KMS 密钥
echo Setup Key...
SETLOCAL ENABLEDELAYEDEXPANSION
call :_OSPP_INSTALL_KEY "!KEY_%~2!"
SETLOCAL DISABLEDELAYEDEXPANSION
:: 开始激活
echo Activate...
call :_OSPP_ACTIVATE
exit /b
:SETUP_OFFICE_KMS
:: [公开过程] SETUP_OFFICE_KMS <年份>
:: 年份: OFFICE 软件年份 (13, 16, ...)
::
:: 环境变量:
:: KEY_%YEAR_CODE% = 序列号
:: KMS_SERVER = 服务器
::
:: 如果找不到 KMS 服务器则不进行设定。
:: 可以通过设定 _vlmcs._tcp 的 SRV 值让程序自动寻找。
::
:: dnsmasq 可以设定如下:
:: srv-host =_vlmcs._tcp, 域名, 端口
:: 如:
:: srv-host =_vlmcs._tcp, 1688
if %PROCESSOR_ARCHITECTURE% == AMD64 (
call :_SETUP_OFFICE_KMS_ARCH "%ProgramFiles(x86)%" %1
)
call :_SETUP_OFFICE_KMS_ARCH "%ProgramFiles%" %1
exit /b
:SETUP_WINDOWS
:: [公开过程] SETUP_WINDOWS
::
:: 环境变量:
:: KEY_%YEAR_CODE% = 序列号
:: KMS_SERVER = 服务器
::
:: 使用 KMS 激活 Windows。
:: 配置 KMS 服务器
if not ".%KMS_SERVER%" == "." (
call :_SLMGR_SET_KMS "%KMS_SERVER%"
) else (
echo Skip setup kms server for windows.
)
call :_SLMGR_INSTALL_KEY %KEY_WINDOWS%
call :_SLMGR_ACTIVATE
exit /b