跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

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

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区