@echo off :: For unattended mode, run the script with /u parameter. ::======================================================================================================================================== : ====================================================== : This script is a fork of @s1ave77's Tool : hwid.kms38.gen.mk6.exe : https://www.nsaneforums.com/topic/312871--/ : ====================================================== : ====================================================== : This script was initially written by @s1ave77 : Later improved by @RPO and Me (@WindowsAddict) : ====================================================== : ================================================================= : This script is a part of 'Microsoft Activation Scripts' : Maintained by @WindowsAddict : Homepage - https://www.nsaneforums.com/topic/316668--/ : ================================================================= ::======================================================================================================================================== ::======================================================================================================================================== cls title KMS38 Activation if /i "%*" EQU "/u" (set Unattended=1) else (set Unattended=0) for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set arch=x86|| set arch=x64 set "nul=>nul 2>&1" set "ELine=echo. &call :Color 4F "==== ERROR ====" &echo:&echo." setlocal EnableDelayedExpansion call :Color_Pre ::======================================================================================================================================== : =========================================================== : Check if the file path name contains special characters : https://stackoverflow.com/a/33626625 : Written by @jeb (stackoverflow) : Thanks to @abbodi1406 (MDL) for the help. : =========================================================== setlocal setlocal DisableDelayedExpansion set "param=%~f0" cmd /v:on /c echo(^^!param^^!| findstr /R "[| ` ~ ! @ %% \^ & ( ) \[ \] { } + = ; ' , |]*^" endlocal if %errorlevel% EQU 0 ( %ELine% echo Disallowed special characters detected in file path name. echo Make sure file path name do not have following special characters, echo ^` ^~ ^! ^@ %% ^^ ^& ^( ^) [ ] { } ^+ ^= ^; ^' ^, goto Done ) ::======================================================================================================================================== if %winbuild% LSS 10586 ( %ELine% echo Unsupported OS version Detected. echo Project is supported only for Windows 10 1511 [10586] and later builds. goto Done ) ::======================================================================================================================================== : ================================================ : Self-elevate passing args and preventing loop : Written by @AveYo aka @BAU : ================================================ reg query HKEY_USERS\S-1-5-20 1>nul 2>nul && goto GotPrivileges If "%ElevError%"=="Y" goto Elev_Err set "args="%~f0" %*" & call set "args=%%args:"=\"%%" echo Initializing... powershell -c "start cmd -ArgumentList '/c set ElevError=Y& call %args%' -verb runas" && exit /b :Elev_Err %ELine% echo Right click on this file and select 'Run as administrator' goto Done :GotPrivileges ::======================================================================================================================================== mode con: cols=110 lines=32 cd /d "%~dp0" pushd "%~dp0" if not exist "%~dp0Files\" ( %ELine% echo 'Files' Folder does not exist in current directory. echo It's supposed to have files required for the Activation. goto Done ) ::======================================================================================================================================== copy /y nul "%~dp0Files\#.rw" %nul% && ( if exist "%~dp0Files\#.rw" del /f /q "%~dp0Files\#.rw" ) || ( %ELine% echo 'Files' Folder in current directory is write protected. echo Copy the Activator's package to a writable directory. goto Done ) ::======================================================================================================================================== FOR /F "TOKENS=2 DELIMS==" %%A IN ('"WMIC PATH SoftwareLicensingProduct WHERE (Name LIKE 'Windows%%' AND PartialProductKey is not NULL) GET LicenseFamily /VALUE"') DO IF NOT ERRORLEVEL 1 SET "osedition=%%A" if not defined osedition (FOR /F "TOKENS=3 DELIMS=: " %%A IN ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| FIND /I "Current Edition :"') DO SET "osedition=%%A") cls if "%osedition%"=="" ( %ELine% echo OS Edition was not detected properly. Aborting... goto Done ) ::======================================================================================================================================== : =========================================== : Check Windows Permanent Activation status : Written by @abbodi1406 (MDL) : =========================================== wmic path SoftwareLicensingProduct where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name 2>nul | findstr /i "Windows" 1>nul && ( echo ---------------------------------------------- echo Checking: Windows is Permanently Activated. echo Activation is not required. echo ---------------------------------------------- echo. if %Unattended% EQU 1 goto Done echo ---------------------------------------- echo Press [A] or [B] button in Keyboard : echo ---------------------------------------- echo. choice /C:AB /N /M "[A] I still want to Activate [B] Exit : " if errorlevel 2 exit /b if errorlevel 1 goto continue ) ::======================================================================================================================================== :Continue cls set key= call :%osedition% %nul% if "%Key%"=="" ( %ELine% echo [%osedition% ^| %winbuild%] KMS38 Activation is Not Supported. goto Done ) call :check gatherosstate.exe slc.dll if defined _miss goto Done for /d %%# in (ServerStandardCor ServerDatacenterCor ServerSolutionCor ServerStandardACor ServerDatacenterACor) do if "%osedition%"=="%%#" set A_Cor=1 if defined A_Cor ( call :check clipup.exe if defined _miss goto Done ) ::======================================================================================================================================== cd /d "%~dp0" if exist "%~dp0Files\*.xml" del /f /q "%~dp0Files\*.xml" Powershell Restart-Service sppsvc %nul% cls echo Checking OS Info [%osedition% ^| %winbuild% ^| %arch%] echo. set "ReTok=Rebuilding ClipSVC tokens " Powershell stop-service clipsvc %nul% if exist "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" %nul% if exist "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" set tokerr_=1 Powershell Restart-Service clipsvc %nul% :: starting clipsvc service will rebuild the tokens if not exist, although in older windows 10 versions, tokens will rebuild when ticket is applied. if defined tokerr_ ( call :Color 4F "%ReTok% [Unsuccessful]" &echo: ) else ( echo %ReTok% [Successful] ) echo. set _1=ClipSVC set _3=sppsvc for %%# in (%_1% %_3%) do call :ServiceCheck %%# set "CLecho=Checking %_1% [Service Status -%Cl_state%] [Startup Type -%Cl_start_type%]" set "specho=Checking %_3% [Service Status -%sp_state%] [Startup Type -%sp_start_type%]" if not "%Cl_start_type%"=="Demand" (call :Color 4F "%CLecho%" &echo: & set Clst_e=1) else (echo %CLecho%) if not "%sp_start_type%"=="Delayed-Auto" (call :Color 4F "%specho%" &echo: & set spst_e=1) else (echo %specho%) echo. if defined Clst_e (sc config %_1% start= Demand %nul% && set Clst_s=%_1%-Demand || set Clst_u=%_1%-Demand ) if defined spst_e (sc config %_3% start= Delayed-Auto %nul% && set spst_s=%_3%-Delayed-Auto || set spst_u=%_3%-Delayed-Auto ) for %%# in (Clst_s,spst_s) do if defined %%# set st_s=1 if defined st_s (echo Changing services Startup Type to [ %Clst_s%%spst_s%] [Successful]) for %%# in (Clst_u,spst_u) do if defined %%# set st_u=1 if defined st_u (call :Color 4F "Error in changing Startup Type to [ %Clst_u%%spst_u%]" &echo:) if not "%Cl_state%"=="Running" (Powershell start-service %_1% %nul% && set Cl_s=%_1% || set Cl_u=%_1% ) if not "%sp_state%"=="Running" (Powershell start-service %_3% %nul% && set sp_s=%_3% || set sp_u=%_3% ) for %%# in (Cl_s,sp_s) do if defined %%# set s_s=1 if defined s_s (echo Starting services [ %Cl_s%%sp_s%] [Successful]) for %%# in (Cl_u,sp_u) do if defined %%# set s_u=1 if defined s_u (call :Color 4F "Error in starting services [ %Cl_u%%sp_u%]" &echo:) echo. cscript /nologo %windir%\system32\slmgr.vbs -ipk %key% : ====================================== : Set specific KMS host to Local Host : Written by @abbodi1406 (MDL) : ====================================== set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" reg delete "HKLM\%SPPk%\55c92734-d682-4d71-983e-d6ec3f16059f" /f %nul% reg delete "HKU\S-1-5-20\%SPPk%\55c92734-d682-4d71-983e-d6ec3f16059f" /f %nul% set "setkms_=Setting specific KMS host to 127.0.0.2 " set spp=SoftwareLicensingProduct set "app=" for /f "tokens=2 delims==" %%G in ('"wmic path %spp% where (Description like '%%KMSCLIENT%%' and Name like 'Windows%%' and PartialProductKey is not NULL) get ID /VALUE"') do (set app=%%G) if not "%app%"=="" ( wmic path %spp% where ID='%app%' call ClearKeyManagementServiceMachine %nul% || (set setkms_error=1) wmic path %spp% where ID='%app%' call ClearKeyManagementServicePort %nul% || (set setkms_error=1) wmic path %spp% where ID='%app%' call SetKeyManagementServiceMachine MachineName="127.0.0.2" %nul% || (set setkms_error=1) wmic path %spp% where ID='%app%' call SetKeyManagementServicePort 1688 %nul% || (set setkms_error=1) ) else (set setkms_error=1) if not defined setkms_error ( echo %setkms_% [Successful] ) else ( call :Color 4F "%setkms_% [Unsuccessful]" &echo: ) start /wait Files\gatherosstate.exe if not exist "%~dp0Files\GenuineTicket.xml" call Files\gatherosstate.exe if not exist "%~dp0Files\GenuineTicket.xml" Files\gatherosstate.exe set "GenTicket=Generating GenuineTicket.xml " if not exist "%~dp0Files\GenuineTicket.xml" ( call :Color 4F "%GenTicket% [Unsuccessful]" &echo: ) else ( echo %GenTicket% [Successful] ) echo Installing GenuineTicket.xml if defined A_Cor ( "%~dp0Files\clipup.exe" -v -o -altto Files\ ) else ( clipup -v -o -altto Files\ ) echo. set "Act=Activation " cscript /nologo %windir%\system32\slmgr.vbs -ato %nul% call :CheckEXPtime if %gpr% GTR 259200 ( call :Actinfo goto Done ) : ==================================================================== : Clear 180 Days KMS Activation lock without full Rearm and Restart : Concept taken from the @Ratiborus Tools : http://forum.ru-board.com/topic.cgi?forum=2&topic=5734#1 : ==================================================================== set "Rearm=Applying SKU-APP ID Rearm " cscript /nologo %windir%\system32\slmgr.vbs /rearm-app 55c92734-d682-4d71-983e-d6ec3f16059f %nul% || (set RearmF=1) cscript /nologo %windir%\system32\slmgr.vbs /rearm-sku %app% %nul% || (set RearmF=1) if defined RearmF ( call :Color 4F "%Rearm% [Unsuccessful]" &echo: ) else ( echo %Rearm% [Successful] ) echo. call :CheckEXPtime if %gpr% GTR 259200 ( call :Actinfo goto Done ) call :ActivationRetry call :CheckEXPtime if %gpr% GTR 259200 ( call :Actinfo goto Done ) call :Color 4F "%Act% [Unsuccessful] [Error Code %ErrCode%]" &echo: call :Color 5F "Try the Troubleshoot Guide listed in the ReadMe File" &echo: &echo. goto Done ::======================================================================================================================================== : ================================ : Echo all the missing files. : Written by @abbodi1406 (MDL) : ================================ :check for %%# in (%1 %2) do (if not exist "%~dp0Files\%%#" (if defined _miss (set "_miss=!_miss! %%#") else (set "_miss=%%#"))) if defined _miss ( %ELine% echo Following required file^(s^) is missing in 'Files' folder. Aborting... echo. echo !_miss! ) exit /b ::======================================================================================================================================== :ServiceCheck : ====================================== : Detect Service status and start type : Written by @RPO (MDL) : ====================================== for /f "tokens=1,3 delims=: " %%a in ('sc query %1') do (if /i %%a==state set "state=%%b") for /f "tokens=1-4 delims=: " %%a in ('sc qc %1') do (if /i %%a==start_type set "start_type=%%c %%d") if /i "%state%"=="STOPPED" set state=Stopped if /i "%state%"=="RUNNING" set state=Running if /i "%start_type%"=="auto_start (delayed)" set start_type=Delayed-Auto if /i "%start_type%"=="auto_start " set start_type=Auto if /i "%start_type%"=="demand_start " set start_type=Demand if /i "%start_type%"=="disabled " set start_type=Disabled for %%i in (%*) do ( if /i "%%i"=="%_3%" set "sp_start_type=%start_type%" & set "sp_state=%state%" if /i "%%i"=="%_1%" set "Cl_start_type=%start_type%" & set "Cl_state=%state%" ) exit /b ::======================================================================================================================================== :ActivationRetry Powershell Restart-Service sppsvc %nul% : ====================================== : Detect Error Code in the Activation : Written by @abbodi1406 (MDL) : ====================================== WMIC PATH SoftwareLicensingProduct WHERE (Name like 'Windows%%' and PartialProductKey is not NULL) CALL Activate >nul 2>&1 set errorcode=%errorlevel% cmd /c exit /b %errorcode% if %errorcode% NEQ 0 set "ErrCode=0x%=ExitCode%" exit /b ::======================================================================================================================================== :Actinfo call :Color 2F "%Act% [Successful]" &echo: cscript /nologo %windir%\system32\slmgr.vbs -xpr exit /b ::======================================================================================================================================== :CheckEXPtime : ====================================== : Check Activation remaining time : Written by @abbodi1406 (MDL) : ====================================== for /f "tokens=2 delims==" %%A in ('"wmic path SoftwareLicensingProduct where (Description like '%%KMSCLIENT%%' and Name like 'Windows%%' and PartialProductKey is not NULL) get GracePeriodRemaining /VALUE" ') do set "gpr=%%A" exit /b ::======================================================================================================================================== : ====================================================== : Multicolor outputs without any external programs : https://stackoverflow.com/a/5344911 : Written by @jeb (stackoverflow) : ====================================================== :Color_Pre for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a") &exit /b :color pushd "%temp%" "%~2" &findstr /v /a:%1 /R "^$" "%~2" nul &del "%~2" > nul 2>&1 &popd &exit /b ::======================================================================================================================================== :Done echo. if %Unattended% EQU 1 ( echo Exiting in 5 seconds... if %winbuild% LSS 7600 (ping -n 5 127.0.0.1 > nul) else (timeout /t 5) exit /b ) echo Press any key to exit... pause >nul exit /b ::======================================================================================================================================== :: Generic Volume License Key (GVLK) List :Core set "key=TX9XD-98N7V-6WMQ6-BX7FG-H8Q99" exit /b :CoreCountrySpecific set "key=PVMJN-6DFY6-9CCP6-7BKTT-D3WVR" exit /b :CoreN set "key=3KHY7-WNT83-DGQKR-F7HPR-844BM" exit /b :CoreSingleLanguage set "key=7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH" exit /b :Education set "key=NW6C2-QMPVW-D7KKK-3GKT6-VCFB2" exit /b :EducationN set "key=2WH4N-8QGBV-H22JP-CT43Q-MDWWJ" exit /b :Enterprise set "key=NPPR9-FWDCX-D2C8J-H872K-2YT43" exit /b :EnterpriseG set "key=YYVX9-NTFWV-6MDM3-9PT4T-4M68B" exit /b :EnterpriseGN set "key=44RPN-FTY23-9VTTB-MP9BX-T84FV" exit /b :EnterpriseN set "key=DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4" exit /b :EnterpriseS if "%winbuild%" EQU "14393" set "key=DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ" if "%winbuild%" EQU "17763" set "key=M7XTQ-FN8P6-TTKYV-9D4CC-J462D" exit /b :EnterpriseSN if "%winbuild%" EQU "14393" set "key=QFFDN-GRT3P-VKWWX-X7T3R-8B639" if "%winbuild%" EQU "17763" set "key=92NFX-8DJQP-P6BBQ-THF9C-7CG2H" exit /b :Professional set "key=W269N-WFGWX-YVC9B-4J6C9-T83GX" exit /b :ProfessionalEducation set "key=6TP4R-GNPTD-KYYHQ-7B7DP-J447Y" exit /b :ProfessionalEducationN set "key=YVWGF-BXNMC-HTQYQ-CPQ99-66QFC" exit /b :ProfessionalN set "key=MH37W-N47XK-V7XM9-C7227-GCQG9" exit /b :ProfessionalWorkstation set "key=NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J" exit /b :ProfessionalWorkstationN set "key=9FNHH-K3HBT-3W4TD-6383H-6XYWF" exit /b :ServerCloudStorage if "%winbuild%" EQU "14393" set "key=QN4C6-GBJD2-FB422-GHWJK-GJG2R" exit /b :ServerDatacenter if "%winbuild%" EQU "14393" set "key=CB7KF-BWN84-R7R2Y-793K2-8XDDG" if "%winbuild%" EQU "17763" set "key=WMDGN-G9PQG-XVVXX-R3X43-63DFG" exit /b :ServerDatacenterACor if "%winbuild%" EQU "16299" set "key=6Y6KB-N82V8-D8CQV-23MJW-BWTG6" if "%winbuild%" EQU "17134" set "key=2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG" if "%winbuild%" EQU "17763" set "key=6NMRW-2C8FM-D24W7-TQWMY-CWH2D" if "%winbuild%" GEQ "18362" set "key=TX3M3-HN6CW-2D8RM-QKCVK-WT3F3" exit /b :ServerDatacenterCor if "%winbuild%" EQU "14393" set "key=CB7KF-BWN84-R7R2Y-793K2-8XDDG" if "%winbuild%" EQU "17763" set "key=WMDGN-G9PQG-XVVXX-R3X43-63DFG" exit /b :ServerRdsh if "%winbuild%" LSS "17763" set "key=7NBT4-WGBQX-MP4H7-QXFF8-YP3KX" if "%winbuild%" GEQ "17763" set "key=CPWHC-NT2C7-VYW78-DHDB2-PG3GK" exit /b :ServerSolution if "%winbuild%" EQU "14393" set "key=JCKRF-N37P4-C2D82-9YXRT-4M63B" if "%winbuild%" EQU "17763" set "key=WVDHN-86M7X-466P6-VHXV7-YY726" exit /b :ServerSolutionCor if "%winbuild%" EQU "14393" set "key=JCKRF-N37P4-C2D82-9YXRT-4M63B" if "%winbuild%" EQU "17763" set "key=WVDHN-86M7X-466P6-VHXV7-YY726" exit /b :ServerStandard if "%winbuild%" EQU "14393" set "key=WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY" if "%winbuild%" EQU "17763" set "key=N69G4-B89J2-4G8F4-WWYCC-J464C" exit /b :ServerStandardACor if "%winbuild%" EQU "16299" set "key=DPCNP-XQFKJ-BJF7R-FRC8D-GF6G4" if "%winbuild%" EQU "17134" set "key=PTXN8-JFHJM-4WC78-MPCBR-9W4KR" if "%winbuild%" EQU "17763" set "key=N2KJX-J94YW-TQVFB-DG9YT-724CC" if "%winbuild%" GEQ "18362" set "key=PHN2T-WHKP4-X8RTQ-TD9TT-D3YPC" exit /b :ServerStandardCor if "%winbuild%" EQU "14393" set "key=WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY" if "%winbuild%" EQU "17763" set "key=N69G4-B89J2-4G8F4-WWYCC-J464C" exit /b ::========================================================================================================================================