1.7
This commit is contained in:
		@@ -55,8 +55,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -86,6 +85,7 @@ set cbs_log=%SystemRoot%\logs\cbs\cbs.log
 | 
			
		||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
 | 
			
		||||
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:"
 | 
			
		||||
set "line=_________________________________________________________________________________________________"
 | 
			
		||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -135,7 +135,7 @@ goto at_done
 | 
			
		||||
 | 
			
		||||
::  Elevate script as admin and pass arguments and preventing loop
 | 
			
		||||
 | 
			
		||||
%nul% reg query HKU\S-1-5-19 || (
 | 
			
		||||
>nul fltmc || (
 | 
			
		||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
 | 
			
		||||
%nceline%
 | 
			
		||||
echo This script require administrator privileges.
 | 
			
		||||
@@ -170,33 +170,43 @@ color 07
 | 
			
		||||
title  Activation Troubleshoot
 | 
			
		||||
mode con cols=77 lines=30
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo:
 | 
			
		||||
echo:
 | 
			
		||||
echo:
 | 
			
		||||
echo:       _______________________________________________________________
 | 
			
		||||
echo:                                                   
 | 
			
		||||
echo:             [1] ReadMe  
 | 
			
		||||
echo:             ___________________________________________________      
 | 
			
		||||
call :_color2 %_White% "             [1] " %_Green% "Help"
 | 
			
		||||
echo:             ___________________________________________________
 | 
			
		||||
echo:                                                                      
 | 
			
		||||
echo:             [2] Dism RestoreHealth                                   
 | 
			
		||||
echo:             [3] SFC Scannow                                          
 | 
			
		||||
echo:                          
 | 
			
		||||
echo:             [2] Dism RestoreHealth
 | 
			
		||||
echo:             [3] SFC Scannow
 | 
			
		||||
echo:
 | 
			
		||||
echo:             [4] Rebuild Licensing Tokens
 | 
			
		||||
echo:             [5] Clear Office vNext License
 | 
			
		||||
echo:             ___________________________________________________      
 | 
			
		||||
echo:             [5] Rebuild ClipSVC Licences
 | 
			
		||||
echo:             [6] Clear Office vNext Licences
 | 
			
		||||
echo:             ___________________________________________________
 | 
			
		||||
echo:                                                                      
 | 
			
		||||
echo:             [6] Solution: Office is not genuine banner
 | 
			
		||||
echo:             [0] Exit                                                 
 | 
			
		||||
echo:             [7] Rebuild WMI Repository
 | 
			
		||||
echo:             [8] Fix: Issues Caused By Gaming Spoofers
 | 
			
		||||
echo:             [9] Fix: Issues Caused By KB971033 In Windows 7
 | 
			
		||||
echo:             [G] Fix: Office Is Not Genuine Banner
 | 
			
		||||
echo:             [E] Export Event Viewer Logs
 | 
			
		||||
echo:             ___________________________________________________
 | 
			
		||||
echo:
 | 
			
		||||
echo:             [0] %_exitmsg%
 | 
			
		||||
echo:       _______________________________________________________________
 | 
			
		||||
echo:          
 | 
			
		||||
call :_color2 %_White% "            " %_Green% "Enter a menu option in the Keyboard :"
 | 
			
		||||
choice /C:1234560 /N
 | 
			
		||||
choice /C:123456789GE0 /N
 | 
			
		||||
set _erl=%errorlevel%
 | 
			
		||||
 | 
			
		||||
if %_erl%==7 exit /b
 | 
			
		||||
if %_erl%==6 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu
 | 
			
		||||
if %_erl%==5 goto:clearvnext
 | 
			
		||||
if %_erl%==12 exit /b
 | 
			
		||||
if %_erl%==11 goto:exportevtlogs
 | 
			
		||||
if %_erl%==10 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu
 | 
			
		||||
if %_erl%==9 goto:fixwindows7
 | 
			
		||||
if %_erl%==8 goto:fixspoofer
 | 
			
		||||
if %_erl%==7 goto:rewmi
 | 
			
		||||
if %_erl%==6 goto:clearvnext
 | 
			
		||||
if %_erl%==5 goto:reclipsvc
 | 
			
		||||
if %_erl%==4 goto:retokens
 | 
			
		||||
if %_erl%==3 goto:sfcscan
 | 
			
		||||
if %_erl%==2 goto:dism_rest
 | 
			
		||||
@@ -242,7 +252,7 @@ call :_color2 %_White% "     - " %Gray% "Make sure the Windows update is properl
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:29 /N /M ">    [9] Continue [2] Go back : "
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
@@ -260,12 +270,6 @@ echo dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHea
 | 
			
		||||
echo:
 | 
			
		||||
dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\" (
 | 
			
		||||
echo:
 | 
			
		||||
call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop."
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
 | 
			
		||||
copy /y /b "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" "!desktop!\AT_Logs\RHealth_DISM_%_time%.txt" %nul%
 | 
			
		||||
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\RHealth_CBS_%_time%.txt" %nul%
 | 
			
		||||
@@ -295,7 +299,7 @@ echo      restarting the PC after each time to completely fix everything that it
 | 
			
		||||
echo:   
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:29 /N /M ">    [9] Continue [2] Go back : "
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
@@ -312,12 +316,6 @@ echo sfc /scannow
 | 
			
		||||
echo:
 | 
			
		||||
sfc /scannow
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\" (
 | 
			
		||||
echo:
 | 
			
		||||
call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop."
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
 | 
			
		||||
 | 
			
		||||
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\SFC_CBS_%_time%.txt" %nul%
 | 
			
		||||
@@ -346,15 +344,10 @@ echo          - KMS option activated Office but Office activation page is not sh
 | 
			
		||||
echo:   
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:29 /N /M ">    [9] Continue [2] Go back : "
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode con cols=115 lines=32
 | 
			
		||||
%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
@@ -362,16 +355,30 @@ call :_color %Magenta% "Clearing Office vNext License"
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
setlocal DisableDelayedExpansion
 | 
			
		||||
set "_locl=%LocalAppData%\Microsoft\Office\Licenses"
 | 
			
		||||
set "_Local=%LocalAppData%"
 | 
			
		||||
setlocal EnableDelayedExpansion
 | 
			
		||||
call :cleanfolder
 | 
			
		||||
set "_locl=%ProgramData%\Microsoft\Office\Licenses"
 | 
			
		||||
call :cleanfolder
 | 
			
		||||
 | 
			
		||||
attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul%
 | 
			
		||||
attrib -R "!_Local!\Microsoft\Office\Licenses" %nul%
 | 
			
		||||
rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul%
 | 
			
		||||
rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul%
 | 
			
		||||
 | 
			
		||||
if exist "!ProgramData!\Microsoft\Office\Licenses\" (
 | 
			
		||||
echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\
 | 
			
		||||
) else (
 | 
			
		||||
echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if exist "!_Local!\Microsoft\Office\Licenses\" (
 | 
			
		||||
echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\
 | 
			
		||||
) else (
 | 
			
		||||
echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
for %%# in (
 | 
			
		||||
HKCU\Software\Microsoft\Office\16.0\Common\Licensing
 | 
			
		||||
HKCU\Software\Microsoft\Office\16.0\Common\Identity
 | 
			
		||||
HKCU\Software\Microsoft\Office\16.0\Registration
 | 
			
		||||
) do (
 | 
			
		||||
reg query %%# %nul% && (
 | 
			
		||||
reg delete %%# /f %nul% && (
 | 
			
		||||
@@ -380,32 +387,12 @@ echo Deleted Registry - %%#
 | 
			
		||||
echo Failed to Delete - %%#
 | 
			
		||||
)
 | 
			
		||||
) || (
 | 
			
		||||
echo Already Clean - %%#
 | 
			
		||||
echo Deleted Registry - %%#
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
:cleanfolder
 | 
			
		||||
 | 
			
		||||
2>nul dir /b /a "!_locl!\*" | %nul% findstr "^" && (
 | 
			
		||||
pushd "!_locl!\" && (
 | 
			
		||||
del /S /F /Q "!_locl!\*"
 | 
			
		||||
for /F "delims=" %%i in ('dir /b') do (
 | 
			
		||||
RD /S /Q "%%i" %nul%
 | 
			
		||||
if not exist "!_locl!\%%i\" (
 | 
			
		||||
echo Deleted Folder - !_locl!\%%i
 | 
			
		||||
) else (
 | 
			
		||||
echo Failed To Delete - !_locl!\%%i
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
popd
 | 
			
		||||
)
 | 
			
		||||
) || (
 | 
			
		||||
echo Already Clean - !_locl!\
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:retokens
 | 
			
		||||
@@ -432,11 +419,12 @@ call :_color2 %_White% "      - " %Red% "Apply it only when it is necessary."
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:29 /N /M ">    [9] Continue [2] Go back : "
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
:cleanspptoken
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
@@ -496,7 +484,7 @@ sc qc osppsvc %nul% || (
 | 
			
		||||
echo:
 | 
			
		||||
call :_color %Magenta% "OSPP based Office is not installed"
 | 
			
		||||
call :_color %Magenta% "Skipping rebuilding OSPP tokens"
 | 
			
		||||
goto :cleanclipsvc
 | 
			
		||||
goto :repairoffice
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
call :_color %Magenta% "Rebuilding OSPP Licensing Tokens"
 | 
			
		||||
@@ -545,12 +533,6 @@ call :_color %Green% "tokens.dat file was rebuilt successfully."
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:cleanclipsvc
 | 
			
		||||
 | 
			
		||||
:: This section is removed
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:repairoffice
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
@@ -597,10 +579,11 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
 | 
			
		||||
%nul% reg query %_86%\ClickToRun /v InstallPath        && (set "c2r16_86=Office 16.0 C2R x86"      & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe")
 | 
			
		||||
 | 
			
		||||
set uwp16=
 | 
			
		||||
if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %nul% && (
 | 
			
		||||
if %winbuild% GEQ 10240 (
 | 
			
		||||
dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
 | 
			
		||||
dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
 | 
			
		||||
dir /b "%ProgramFiles(x86)%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
 | 
			
		||||
%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" 1>nul && set uwp16=Office 16.0 UWP
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set /a counter=0
 | 
			
		||||
@@ -645,7 +628,7 @@ goto :repairend
 | 
			
		||||
echo:
 | 
			
		||||
) else (
 | 
			
		||||
echo:
 | 
			
		||||
call :_color %_Yellow% "A Window will popup, in that Window you need to select Repair Option..."
 | 
			
		||||
call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..."
 | 
			
		||||
call :_color %_Yellow% "Press any key to continue..."
 | 
			
		||||
echo:
 | 
			
		||||
pause >nul
 | 
			
		||||
@@ -691,6 +674,405 @@ echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
echo:
 | 
			
		||||
call :_color %Green% "Finished"
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:reclipsvc
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
title  Rebuild ClipSVC Licences
 | 
			
		||||
 | 
			
		||||
if %winbuild% LSS 10240 (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Unsupported OS version Detected.
 | 
			
		||||
echo This command is supported only for Windows 10/11 and their Server equivalent..
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
echo      Notes:
 | 
			
		||||
echo:
 | 
			
		||||
echo       - Rebuilding ClipSVC Licences helps in troubleshooting HWID-KMS38 activation issues.
 | 
			
		||||
echo:
 | 
			
		||||
echo       - Do not run this option unless you are having issues in HWID-KMS38 activation.
 | 
			
		||||
echo:
 | 
			
		||||
echo       - System restart is recommended after applying it.
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
echo Stopping ClipSVC service...
 | 
			
		||||
call :_stopservice ClipSVC
 | 
			
		||||
timeout /t 2 %nul%
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Applying the command to Clean ClipSVC Licences...
 | 
			
		||||
echo rundll32 clipc.dll,ClipCleanUpState
 | 
			
		||||
 | 
			
		||||
rundll32 clipc.dll,ClipCleanUpState
 | 
			
		||||
 | 
			
		||||
if %winbuild% LEQ 10240 (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
) else (
 | 
			
		||||
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after 
 | 
			
		||||
::  system restart. It needs to be deleted to activate the system without restart.
 | 
			
		||||
 | 
			
		||||
set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState"
 | 
			
		||||
set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
 | 
			
		||||
 | 
			
		||||
reg query "%RegKey%" %nul% && %nul% call :regownstart
 | 
			
		||||
reg delete "%RegKey%" /f %nul% 
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Deleting a Volatile ^& Protected Registry Key...
 | 
			
		||||
echo [%RegKey%]
 | 
			
		||||
reg query "%RegKey%" %nul% && (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
echo Restart the system, that will delete this registry key automatically.
 | 
			
		||||
) || (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::   Clear HWID token related registry to fix activation incase if there is any corruption
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Deleting a IdentityCRL Registry Key...
 | 
			
		||||
echo [%_ident%]
 | 
			
		||||
reg delete "%_ident%" /f %nul%
 | 
			
		||||
reg query "%_ident%" %nul% && (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
) || (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Restarting [ClipSVC wlidsvc LicenseManager sppsvc] services...
 | 
			
		||||
for %%# in (ClipSVC wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%)
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:fixspoofer
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode con cols=115 lines=32
 | 
			
		||||
%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
 | 
			
		||||
title  Fix: Issues Caused By Gaming Spoofers
 | 
			
		||||
 | 
			
		||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Powershell is not responding properly. Aborting."
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
echo      Notes:
 | 
			
		||||
echo:
 | 
			
		||||
echo       - Gaming unban/spoofers/cleaners often cause Windows activation issues.
 | 
			
		||||
echo:
 | 
			
		||||
call :_color2 %_White% "      - " %Red% "Apply this fix ONLY if you have used these things."
 | 
			
		||||
echo:
 | 
			
		||||
echo       - This option will fix files and registry permissions and rebuild licensing tokens.
 | 
			
		||||
echo:
 | 
			
		||||
echo       - System restart is recommended after applying it.
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
echo Fixing registry and files permissions...
 | 
			
		||||
call :fixpermissions %nul%
 | 
			
		||||
goto :cleanspptoken
 | 
			
		||||
 | 
			
		||||
:fixpermissions
 | 
			
		||||
 | 
			
		||||
::  Thanks to skidaim for the fix
 | 
			
		||||
 | 
			
		||||
takeown /F %windir%\System32\sppsvc.exe
 | 
			
		||||
icacls %windir%\System32 /grant administrators:F /T
 | 
			
		||||
icacls %windir%\System32\spp /grant administrators:F /T
 | 
			
		||||
 | 
			
		||||
::  I know it's bad but people have messed up system32 permissions, that's why I don't recommend to run this unless users have messed up systems
 | 
			
		||||
 | 
			
		||||
%psc% $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -AclObject $acl
 | 
			
		||||
%psc% $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP' -AclObject $acl
 | 
			
		||||
%psc% $acl = Get-Acl 'HKLM:\SYSTEM\CurrentControlSet\Services\SPPSVC'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\SPPSVC' -AclObject $acl
 | 
			
		||||
%psc% $acl = Get-Acl 'HKLM:\SYSTEM\WPA'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SYSTEM\WPA' -AclObject $acl
 | 
			
		||||
%psc% $acl = Get-Acl '%windir%\System32'; $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path '%windir%\System32' -AclObject $acl
 | 
			
		||||
%psc% $acl = Get-Acl '%windir%\System32\spp'; $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path '%windir%\System32\spp' -AclObject $acl
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:fixwindows7
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
title  Fix: Issues Caused By KB971033 In Windows 7
 | 
			
		||||
 | 
			
		||||
if %winbuild% GEQ 9200 (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Unsupported OS version Detected.
 | 
			
		||||
echo This option is supported only for Windows 7 and it's Server equivalent.
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
echo      Notes:
 | 
			
		||||
echo:
 | 
			
		||||
echo       - This option fixes issues caused by Update KB971033 in Windows 7.
 | 
			
		||||
echo         https://support.microsoft.com/en-us/help/4487266
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:01 /N /M ">    [1] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
echo Checking Update KB971033...
 | 
			
		||||
dism /online /get-packages | find /i "Microsoft-Windows-Security-WindowsActivationTechnologies-package~31bf3856ad364e35~amd64~~7.1.7600.16395" 1>nul && (
 | 
			
		||||
echo [Found]
 | 
			
		||||
echo Uninstalling it...
 | 
			
		||||
) || (
 | 
			
		||||
echo [Not Found]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
wusa /uninstall /quiet /norestart /kb:971033
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Applying Fixes...
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
net stop sppuinotify /y
 | 
			
		||||
sc config sppuinotify start= disabled
 | 
			
		||||
net stop sppsvc /y
 | 
			
		||||
del %windir%\system32\7B296FB0-376B-497e-B012-9C450E1B7327-5P-0.C7483456-A289-439d-8115-601632D005A0 /ah
 | 
			
		||||
del %windir%\system32\7B296FB0-376B-497e-B012-9C450E1B7327-5P-1.C7483456-A289-439d-8115-601632D005A0 /ah
 | 
			
		||||
del %windir%\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat
 | 
			
		||||
del %windir%\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\cache\cache.dat
 | 
			
		||||
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
 | 
			
		||||
sc config sppuinotify start= demand
 | 
			
		||||
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:rewmi
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
title  Rebuild WMI Repository
 | 
			
		||||
 | 
			
		||||
::  https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484
 | 
			
		||||
 | 
			
		||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
 | 
			
		||||
%eline%
 | 
			
		||||
echo WMI rebuild is not recommended on Windows Server. Aborting...
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
 | 
			
		||||
set _wmic=0
 | 
			
		||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" set _wmic=1
 | 
			
		||||
 | 
			
		||||
set error=
 | 
			
		||||
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %errorlevel% NEQ 0 set error=1
 | 
			
		||||
winmgmt /verifyrepository %nul%
 | 
			
		||||
if %errorlevel% NEQ 0 set error=1
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
if defined error (
 | 
			
		||||
echo      WMI Status - [Not Responding] %_wmic%
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %_Green% "     WMI Status - [Working]"
 | 
			
		||||
)
 | 
			
		||||
echo:
 | 
			
		||||
echo      Notes:
 | 
			
		||||
echo:
 | 
			
		||||
call :_color2 %_White% "      - " %Magenta% "WMI rebuild can cause some 3rd party apps to not work until reinstall."
 | 
			
		||||
echo:       
 | 
			
		||||
call :_color2 %_White% "      - " %Red% "Apply this fix ONLY if WMI is not working."
 | 
			
		||||
echo:
 | 
			
		||||
echo %line%
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:09 /N /M ">    [9] Continue [0] Go back : "
 | 
			
		||||
if %errorlevel%==1 goto at_menu
 | 
			
		||||
 | 
			
		||||
::  Below fixes are taken from https://kb.acronis.com/content/62731
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
sc query Winmgmt %nul% || (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Winmgmt service is not installed. Aborting...
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo Disabling Winmgmt service...
 | 
			
		||||
sc config Winmgmt start= disabled %nul%
 | 
			
		||||
if %errorlevel% EQU 0 (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Red% "[Failed] Aborting..."
 | 
			
		||||
goto :wmifixend
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Stopping Winmgmt service...
 | 
			
		||||
call :_stopservice Winmgmt
 | 
			
		||||
call :_stopservice Winmgmt
 | 
			
		||||
sc query Winmgmt | find /i "1  STOPPED" %nul% && (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
) || (
 | 
			
		||||
call :_color %Red% "[Failed] Aborting..."
 | 
			
		||||
goto :wmifixend
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Deleting WMI repository...
 | 
			
		||||
if exist "%windir%\System32\wbem\repository\" rmdir /s /q "%windir%\System32\wbem\repository\" %nul%
 | 
			
		||||
if exist "%windir%\System32\wbem\repository\" (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Enabling Winmgmt service...
 | 
			
		||||
sc config Winmgmt start= auto %nul%
 | 
			
		||||
if %errorlevel% EQU 0 (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Checking WMI...
 | 
			
		||||
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %errorlevel% NEQ 0 (
 | 
			
		||||
call :_color %Red% "[Not Responding]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Green% "[Working]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
:wmifixend
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Enabling Winmgmt service...
 | 
			
		||||
sc config Winmgmt start= auto %nul%
 | 
			
		||||
if %errorlevel% EQU 0 (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:exportevtlogs
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode con cols=125 lines=32
 | 
			
		||||
%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=500;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
 | 
			
		||||
title  Export Event Viewer Logs
 | 
			
		||||
 | 
			
		||||
set tdir=%SystemRoot%\Temp\_EventLogs
 | 
			
		||||
if exist %tdir%\. rd /s /q %tdir%\ %nul%
 | 
			
		||||
if exist %tdir%\ (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Failed to delete below folder. Aborting...
 | 
			
		||||
echo %tdir%\
 | 
			
		||||
goto :at_back
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
md %tdir%\
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Creating archive file of Event logs...
 | 
			
		||||
 | 
			
		||||
set _time=
 | 
			
		||||
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
 | 
			
		||||
%nul% robocopy %SystemRoot%\System32\winevt\Logs\ %tdir%\
 | 
			
		||||
 | 
			
		||||
::  https://stackoverflow.com/a/46268232
 | 
			
		||||
 | 
			
		||||
set "ddf="%SystemRoot%\Temp\ddf""
 | 
			
		||||
%nul% del /q /f %ddf%
 | 
			
		||||
echo/.New Cabinet>%ddf%
 | 
			
		||||
echo/.set Cabinet=ON>>%ddf%
 | 
			
		||||
echo/.set CabinetFileCountThreshold=0;>>%ddf%
 | 
			
		||||
echo/.set Compress=ON>>%ddf%
 | 
			
		||||
echo/.set CompressionType=LZX>>%ddf%
 | 
			
		||||
echo/.set CompressionLevel=7;>>%ddf%
 | 
			
		||||
echo/.set CompressionMemory=21;>>%ddf%
 | 
			
		||||
echo/.set FolderFileCountThreshold=0;>>%ddf%
 | 
			
		||||
echo/.set FolderSizeThreshold=0;>>%ddf%
 | 
			
		||||
echo/.set GenerateInf=OFF>>%ddf%
 | 
			
		||||
echo/.set InfFileName=nul>>%ddf%
 | 
			
		||||
echo/.set MaxCabinetSize=0;>>%ddf%
 | 
			
		||||
echo/.set MaxDiskFileCount=0;>>%ddf%
 | 
			
		||||
echo/.set MaxDiskSize=0;>>%ddf%
 | 
			
		||||
echo/.set MaxErrors=1;>>%ddf%
 | 
			
		||||
echo/.set RptFileName=nul>>%ddf%
 | 
			
		||||
echo/.set UniqueFiles=ON>>%ddf%
 | 
			
		||||
pushd "%tdir%\"
 | 
			
		||||
for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%tdir%\"') do (
 | 
			
		||||
 echo/"%%~fD"  /inf=no;>>%ddf%
 | 
			
		||||
)
 | 
			
		||||
makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate=%tdir%\Logs.cab
 | 
			
		||||
del /q /f %ddf%
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
 | 
			
		||||
copy /y /b "%tdir%\Logs.cab" "!desktop!\AT_Logs\EventLogs_%_time%.cab" %nul%
 | 
			
		||||
if exist %tdir%\. rd /s /q %tdir%\ %nul%
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
if exist "!desktop!\AT_Logs\EventLogs_%_time%.cab" (
 | 
			
		||||
call :_color %Green% "[Successful]"
 | 
			
		||||
echo EventLogs_%_time%.cab created inside AT_Logs folder on the dekstop.
 | 
			
		||||
) else (
 | 
			
		||||
call :_color %Red% "[Failed]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
goto :at_back
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -708,7 +1090,7 @@ goto :at_menu
 | 
			
		||||
:at_done
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
echo Press any key to %_exitmsg%...
 | 
			
		||||
pause >nul
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
@@ -779,7 +1161,57 @@ del /S /F /Q "%%#*.dat"
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================\
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:regownstart
 | 
			
		||||
 | 
			
		||||
setlocal
 | 
			
		||||
set "TMP=%SystemRoot%\Temp"
 | 
			
		||||
set "TEMP=%SystemRoot%\Temp"
 | 
			
		||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);"
 | 
			
		||||
endlocal
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::  Below code takes ownership of a volatile registry key and deletes it
 | 
			
		||||
::  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState
 | 
			
		||||
 | 
			
		||||
::  Thanks to Remko Weijnen for the code and thanks to abbodi1406 for the help
 | 
			
		||||
::  remkoweijnen.nl/blog/2012/01/16/take-ownership-of-a-registry-key-in-powershell/
 | 
			
		||||
 | 
			
		||||
:regown:
 | 
			
		||||
$definition = @"
 | 
			
		||||
using System;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
namespace Win32Api
 | 
			
		||||
{
 | 
			
		||||
    public class NtDll
 | 
			
		||||
    {
 | 
			
		||||
        [DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")]
 | 
			
		||||
        public static extern int RtlAdjustPrivilege(int Privilege, bool Enable, bool CurrentThread, ref bool Enabled);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
"@
 | 
			
		||||
 | 
			
		||||
Add-Type -TypeDefinition $definition -PassThru | Out-Null
 | 
			
		||||
[Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null
 | 
			
		||||
 | 
			
		||||
$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
 | 
			
		||||
$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value
 | 
			
		||||
$Admin = New-Object System.Security.Principal.NTAccount($IDN)
 | 
			
		||||
 | 
			
		||||
$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState'
 | 
			
		||||
$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership')
 | 
			
		||||
 | 
			
		||||
$acl = $key.GetAccessControl()
 | 
			
		||||
$acl.SetOwner($Admin)
 | 
			
		||||
$key.SetAccessControl($acl)
 | 
			
		||||
 | 
			
		||||
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow")
 | 
			
		||||
$acl.SetAccessRule($rule)
 | 
			
		||||
$key.SetAccessControl($acl)
 | 
			
		||||
:regown:
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:_color
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,10 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
::  To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line
 | 
			
		||||
set _stg=0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -55,8 +59,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -102,13 +105,23 @@ set "_Yellow="Black" "Yellow""
 | 
			
		||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
 | 
			
		||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
 | 
			
		||||
set "line=echo ___________________________________________________________________________________________"
 | 
			
		||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if %winbuild% LSS 10240 (
 | 
			
		||||
%eline%
 | 
			
		||||
if %winbuild% LSS 7600 (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo Unsupported OS version detected.
 | 
			
		||||
echo Project is supported for Windows 10/11/Server Build 10240 and later.
 | 
			
		||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo Updated Powershell not found.
 | 
			
		||||
echo:
 | 
			
		||||
echo Download Windows Management Framework 5.1 from below link and install
 | 
			
		||||
echo https://aka.ms/wmf5download
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -151,7 +164,7 @@ goto ced_done
 | 
			
		||||
 | 
			
		||||
::  Elevate script as admin and pass arguments and preventing loop
 | 
			
		||||
 | 
			
		||||
%nul% reg query HKU\S-1-5-19 || (
 | 
			
		||||
>nul fltmc || (
 | 
			
		||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
 | 
			
		||||
%eline%
 | 
			
		||||
echo This script require administrator privileges.
 | 
			
		||||
@@ -164,23 +177,39 @@ goto ced_done
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
 | 
			
		||||
call :dk_initial
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_product
 | 
			
		||||
call :dk_ckeckwmic
 | 
			
		||||
 | 
			
		||||
if not defined applist (
 | 
			
		||||
cls
 | 
			
		||||
%eline%
 | 
			
		||||
echo Not Respoding: !e_wmispp!
 | 
			
		||||
goto ced_done
 | 
			
		||||
::  Show info for potential script stuck scenario
 | 
			
		||||
 | 
			
		||||
sc start sppsvc %nul%
 | 
			
		||||
if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error code: %errorlevel%
 | 
			
		||||
call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..."
 | 
			
		||||
echo:
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Check Activation IDs
 | 
			
		||||
 | 
			
		||||
call :dk_actids
 | 
			
		||||
 | 
			
		||||
if not defined applist (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Activation IDs not found. Aborting...
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Check Windows Edition
 | 
			
		||||
 | 
			
		||||
set 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%
 | 
			
		||||
DISM /English /Online /Get-CurrentEdition %nul%
 | 
			
		||||
@@ -190,10 +219,6 @@ echo OS Edition was not detected properly. Aborting...
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Check product name
 | 
			
		||||
 | 
			
		||||
call :dk_product
 | 
			
		||||
 | 
			
		||||
::  Check SKU value
 | 
			
		||||
 | 
			
		||||
set osSKU=
 | 
			
		||||
@@ -213,6 +238,9 @@ echo SKU value was not detected properly. Aborting...
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set branch=
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
 | 
			
		||||
 | 
			
		||||
::  Check PowerShell
 | 
			
		||||
 | 
			
		||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
 | 
			
		||||
@@ -221,25 +249,17 @@ echo PowerShell is not responding properly. Aborting...
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Check slmgr /dlv
 | 
			
		||||
 | 
			
		||||
cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul%
 | 
			
		||||
set error_code=%errorlevel%
 | 
			
		||||
cmd /c exit /b %error_code%
 | 
			
		||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
 | 
			
		||||
if %error_code% NEQ 0 (
 | 
			
		||||
%eline%
 | 
			
		||||
echo slmgr /dlv is not responding %error_code%
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Get Target editions list
 | 
			
		||||
 | 
			
		||||
set _target=
 | 
			
		||||
set _dtarget=
 | 
			
		||||
set _ptarget=
 | 
			
		||||
set _ntarget=
 | 
			
		||||
for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _target (set "_target=!_target! %%a") else (set "_target=%%a"))
 | 
			
		||||
 | 
			
		||||
if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget=!_dtarget! %%a") else (set "_dtarget=%%a"))
 | 
			
		||||
for /f "tokens=4" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget=!_ptarget! %%a") else (set "_ptarget=%%a"))
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -253,9 +273,13 @@ echo Aborting...
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
for %%# in ( %_dtarget% %_ptarget% ) do (
 | 
			
		||||
echo "!_target!" | find /i " %%# " 1>nul || set "_target=!_target! %%# "
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if defined _target (
 | 
			
		||||
for %%# in (%_target%) do (
 | 
			
		||||
echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (if defined _ntarget (set "_ntarget=!_ntarget! %%#") else (set "_ntarget=%%#"))
 | 
			
		||||
echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#")
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -275,26 +299,40 @@ goto ced_done
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
set inpt=
 | 
			
		||||
set note=
 | 
			
		||||
set counter=0
 | 
			
		||||
set verified=0
 | 
			
		||||
set targetedition=
 | 
			
		||||
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Gray% "You can change the Current Edition [%osedition%] to one of the following."
 | 
			
		||||
call :dk_color %Gray% "You can change the Edition [%osedition%] [%winbuild%] to one of the following."
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
for %%A in (%_ntarget%) do (
 | 
			
		||||
set /a counter+=1
 | 
			
		||||
if %winbuild% GEQ 10240 (
 | 
			
		||||
echo "%_ptarget%" | find /i "%%A" 1>nul && (
 | 
			
		||||
set note=1
 | 
			
		||||
call :dk_color2 %_White% "[!counter!]  " %Magenta% "%%A"
 | 
			
		||||
) || (
 | 
			
		||||
echo [!counter!]  %%A
 | 
			
		||||
)
 | 
			
		||||
) else (
 | 
			
		||||
echo [!counter!]  %%A
 | 
			
		||||
)
 | 
			
		||||
set targetedition!counter!=%%A
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
echo [0]  Exit
 | 
			
		||||
echo [0]  %_exitmsg%
 | 
			
		||||
echo:
 | 
			
		||||
if defined note (
 | 
			
		||||
echo Note: CBS Upgrade Method is available for Purple colored editions.
 | 
			
		||||
echo:
 | 
			
		||||
)
 | 
			
		||||
call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":"
 | 
			
		||||
set /p inpt=
 | 
			
		||||
if "%inpt%"=="" goto cedmenu2
 | 
			
		||||
@@ -305,6 +343,42 @@ if %verified%==0 goto cedmenu2
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
if %winbuild% GEQ 10240 (
 | 
			
		||||
echo "%_ptarget%" | find /i "%targetedition%" 1>nul && (
 | 
			
		||||
echo "%_dtarget%" | find /i "%targetedition%" 1>nul && (
 | 
			
		||||
echo:
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
 | 
			
		||||
echo  [1] DISM Method
 | 
			
		||||
) else (
 | 
			
		||||
echo  [1] Changepk Method
 | 
			
		||||
)
 | 
			
		||||
echo:
 | 
			
		||||
echo  [2] CBS Upgrade Method      [Alternative]
 | 
			
		||||
echo:
 | 
			
		||||
echo  [0] Go back
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
echo  Enter a menu option in the Keyboard:
 | 
			
		||||
choice /C:120 /N
 | 
			
		||||
set _el=!errorlevel!
 | 
			
		||||
if !_el!==3 goto :cedmenu2
 | 
			
		||||
if !_el!==2 goto :cbsmethod
 | 
			
		||||
if !_el!==1 REM
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
) else (
 | 
			
		||||
goto :cbsmethod
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo "%_ptarget%" | find /i "%targetedition%" 1>nul && (
 | 
			
		||||
echo "%_dtarget%" | find /i "%targetedition%" 1>nul || (
 | 
			
		||||
goto :cbsmethod
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
 | 
			
		||||
goto :ced_change_server
 | 
			
		||||
)
 | 
			
		||||
@@ -327,7 +401,7 @@ set _changepk=1
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if %winbuild% LEQ 19044 call :changeeditiondata
 | 
			
		||||
if %winbuild% LEQ 19045 call :changeeditiondata
 | 
			
		||||
 | 
			
		||||
if not defined key call :ced_targetSKU %targetedition%
 | 
			
		||||
if not defined key if defined targetSKU call :ced_windowskey
 | 
			
		||||
@@ -337,7 +411,8 @@ if not defined key (
 | 
			
		||||
%eline%
 | 
			
		||||
echo [%targetedition% ^| %winbuild%]
 | 
			
		||||
echo Unable to get product key from pkeyhelper.dll
 | 
			
		||||
echo Make sure you are using updated version of the script
 | 
			
		||||
echo Make sure you are using updated version of the script.
 | 
			
		||||
echo https://massgrave.dev
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -348,8 +423,6 @@ goto ced_done
 | 
			
		||||
::  Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" method and restart
 | 
			
		||||
::  In other cases, editions can be changed instantly with "slmgr /ipk"
 | 
			
		||||
 | 
			
		||||
:ced_loop
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
if %_changepk%==1 (
 | 
			
		||||
echo "%_chan%" | find /i "OEM" >NUL && (
 | 
			
		||||
@@ -358,10 +431,17 @@ echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack o
 | 
			
		||||
echo Non-OEM keys are required to change from Core to Non-Core Editions.
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
:ced_loop
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
if %_changepk%==1 (
 | 
			
		||||
for %%a in (dns.msftncsi.com,www.microsoft.com,one.one.one.one,resolver1.opendns.com) do (
 | 
			
		||||
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
 | 
			
		||||
if not [%%#]==[] (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Internet needs to be disconnected to change edition [%osedition%] to [%targetedition%]
 | 
			
		||||
echo Disconnect the Internet and then press any key...
 | 
			
		||||
pause >nul
 | 
			
		||||
goto ced_loop
 | 
			
		||||
@@ -375,12 +455,20 @@ echo Changing the Current Edition [%osedition%] to [%targetedition%]
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
if %_changepk%==1 (
 | 
			
		||||
call :dk_color %Green% "You can safely ignore if error appears in the upgrade Window."
 | 
			
		||||
call :dk_color %Red% "But in that case you must manually reboot the system."
 | 
			
		||||
call :dk_color %_Green% "You can safely ignore if error appears in the upgrade Window."
 | 
			
		||||
call :dk_color %_Yellow% "But in that case you must manually reboot the system."
 | 
			
		||||
echo:
 | 
			
		||||
%psc% "$BLinfo = Get-BitLockerVolume -MountPoint "C:";$blinfo.ProtectionStatus" | find /i "On" 1>nul && (
 | 
			
		||||
call :dk_color %Red% "Bitlocker / Device Encryption is On in the system."
 | 
			
		||||
echo:
 | 
			
		||||
echo Either Use alternative CBS upgrade method for edition change
 | 
			
		||||
echo Or     Ensure that you have it's recovery key, you may need it
 | 
			
		||||
echo Or     Turn off Bitlocker / Device Encryption
 | 
			
		||||
echo:
 | 
			
		||||
)
 | 
			
		||||
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:21 /N /M "[1] Continue [2] Exit : "
 | 
			
		||||
choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : "
 | 
			
		||||
if !errorlevel!==1 exit /b
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -419,6 +507,34 @@ goto ced_done
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:cbsmethod
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode con cols=105 lines=32
 | 
			
		||||
%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Changing the Current Edition [%osedition%] to [%targetedition%]
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
 | 
			
		||||
if %winbuild% GEQ 17034 if %targetedition%==Professional echo           - Enterprise Key will be installed instead of Pro, you can quickly change to Pro later. 
 | 
			
		||||
echo:
 | 
			
		||||
choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : "
 | 
			
		||||
if %errorlevel%==1 exit /b
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
 | 
			
		||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;"
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
%line%
 | 
			
		||||
goto ced_done
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:ced_change_server
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
@@ -438,7 +554,8 @@ if not defined key (
 | 
			
		||||
%eline%
 | 
			
		||||
echo [%targetedition% ^| %winbuild%]
 | 
			
		||||
echo Unable to get product key from pkeyhelper.dll
 | 
			
		||||
echo Make sure you are using updated version of the script
 | 
			
		||||
echo Make sure you are using updated version of the script.
 | 
			
		||||
echo https://massgrave.dev
 | 
			
		||||
goto ced_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -459,7 +576,7 @@ call :dk_color %Magenta% "Make sure to restart the system."
 | 
			
		||||
:ced_done
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %_Yellow% "Press any key to exit..."
 | 
			
		||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
 | 
			
		||||
pause >nul
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
@@ -509,53 +626,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:dk_initial
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
 | 
			
		||||
::  Check and enable WinMgmt, sppsvc services if required
 | 
			
		||||
 | 
			
		||||
for %%# in (WinMgmt sppsvc) do (
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Enabling %%# service...
 | 
			
		||||
if /i %%#==sppsvc  sc config %%# start= delayed-auto %nul% || echo Failed
 | 
			
		||||
if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed
 | 
			
		||||
)
 | 
			
		||||
sc start %%# %nul%
 | 
			
		||||
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Starting %%# service...
 | 
			
		||||
sc start %%#
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..."
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Check WMI and SPP Errors
 | 
			
		||||
 | 
			
		||||
call :dk_ckeckwmic
 | 
			
		||||
 | 
			
		||||
set e_wmi=
 | 
			
		||||
set e_wmispp=
 | 
			
		||||
call :dk_actids
 | 
			
		||||
 | 
			
		||||
if not defined applist (
 | 
			
		||||
net stop sppsvc /y %nul%
 | 
			
		||||
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
 | 
			
		||||
if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
 | 
			
		||||
call :dk_refresh
 | 
			
		||||
 | 
			
		||||
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if !errorlevel! NEQ 0 set e_wmi=1
 | 
			
		||||
 | 
			
		||||
if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP)
 | 
			
		||||
call :dk_actids
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Get Product Key from pkeyhelper.dll for future new editions
 | 
			
		||||
@@ -631,6 +701,231 @@ exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition
 | 
			
		||||
 | 
			
		||||
:cbsxml:[
 | 
			
		||||
param (
 | 
			
		||||
    [Parameter()]
 | 
			
		||||
    [String]$SetEdition,
 | 
			
		||||
 | 
			
		||||
    [Parameter()]
 | 
			
		||||
    [Switch]$GetTargetEditions,
 | 
			
		||||
 | 
			
		||||
    [Parameter()]
 | 
			
		||||
    [Switch]$StageCurrent
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
function Get-AssemblyIdentity {
 | 
			
		||||
    param (
 | 
			
		||||
        [String]$PackageName
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $PackageName = [String]$PackageName
 | 
			
		||||
    $packageData = ($PackageName -split '~')
 | 
			
		||||
 | 
			
		||||
    if($packageData[3] -eq '') {
 | 
			
		||||
        $packageData[3] = 'neutral'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return "<assemblyIdentity name=`"$($packageData[0])`" version=`"$($packageData[4])`" processorArchitecture=`"$($packageData[2])`" publicKeyToken=`"$($packageData[1])`" language=`"$($packageData[3])`" />"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Get-SxsName {
 | 
			
		||||
    param (
 | 
			
		||||
        [String]$PackageName
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $name = ($PackageName -replace '[^A-z0-9\-\._]', '')
 | 
			
		||||
 | 
			
		||||
    if($name.Length -gt 40) {
 | 
			
		||||
        $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $name.ToLower()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Find-EditionXmlInSxs {
 | 
			
		||||
    param (
 | 
			
		||||
        [String]$Edition
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $candidates = @($Edition, 'Client', 'Server')
 | 
			
		||||
    $winSxs = $Env:SystemRoot + '\WinSxS'
 | 
			
		||||
    $allInSxs = Get-ChildItem -Path $winSxs | select Name
 | 
			
		||||
 | 
			
		||||
    foreach($candidate in $candidates) {
 | 
			
		||||
        $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate"
 | 
			
		||||
        $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35')
 | 
			
		||||
 | 
			
		||||
        if($packages.Length -eq 0) {
 | 
			
		||||
            continue
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $package = $packages[-1].Name
 | 
			
		||||
        $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml'
 | 
			
		||||
 | 
			
		||||
        if(Test-Path -Path $testPath -PathType Leaf) {
 | 
			
		||||
            return $testPath
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Find-EditionXml {
 | 
			
		||||
    param (
 | 
			
		||||
        [String]$Edition
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $servicingEditions = $Env:SystemRoot + '\servicing\Editions'
 | 
			
		||||
    $editionXml = $Edition + 'Edition.xml'
 | 
			
		||||
 | 
			
		||||
    $editionXmlInServicing = $servicingEditions + '\' + $editionXml
 | 
			
		||||
 | 
			
		||||
    if(Test-Path -Path $editionXmlInServicing -PathType Leaf) {
 | 
			
		||||
        return $editionXmlInServicing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Find-EditionXmlInSxs -Edition $Edition
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Write-UpgradeCandidates {
 | 
			
		||||
    param (
 | 
			
		||||
        [HashTable]$InstallCandidates
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $editionCount = 0
 | 
			
		||||
    Write-Host 'Editions that can be upgraded to:'
 | 
			
		||||
    foreach($candidate in $InstallCandidates.Keys) {
 | 
			
		||||
        Write-Host "Target Edition : $candidate"
 | 
			
		||||
        $editionCount++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if($editionCount -eq 0) {
 | 
			
		||||
        Write-Host '(no editions are available)'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Write-UpgradeXml {
 | 
			
		||||
    param (
 | 
			
		||||
        [Array]$RemovalCandidates,
 | 
			
		||||
        [Array]$InstallCandidates,
 | 
			
		||||
        [Boolean]$Stage
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $removeAction = 'remove'
 | 
			
		||||
    if($Stage) {
 | 
			
		||||
        $removeAction = 'stage'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Write-Output '<?xml version="1.0"?>'
 | 
			
		||||
    Write-Output '<unattend xmlns="urn:schemas-microsoft-com:unattend">'
 | 
			
		||||
    Write-Output '<servicing>'
 | 
			
		||||
 | 
			
		||||
    foreach($package in $InstallCandidates) {
 | 
			
		||||
        Write-Output '<package action="install">'
 | 
			
		||||
        Write-Output (Get-AssemblyIdentity -PackageName $package)
 | 
			
		||||
        Write-Output '</package>'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach($package in $RemovalCandidates) {
 | 
			
		||||
        Write-Output "<package action=`"$removeAction`">"
 | 
			
		||||
        Write-Output (Get-AssemblyIdentity -PackageName $package)
 | 
			
		||||
        Write-Output '</package>'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Write-Output '</servicing>'
 | 
			
		||||
    Write-Output '</unattend>'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Write-Usage {
 | 
			
		||||
    Get-Help $PSCommandPath -detailed
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$version = '1.0'
 | 
			
		||||
$getTargetsParam = $GetTargetEditions.IsPresent
 | 
			
		||||
$stageCurrentParam = $StageCurrent.IsPresent
 | 
			
		||||
 | 
			
		||||
if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) {
 | 
			
		||||
    Write-Usage
 | 
			
		||||
    Exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$removalCandidates = @();
 | 
			
		||||
$installCandidates = @{};
 | 
			
		||||
 | 
			
		||||
$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where name -Match '^.*\\Microsoft-Windows-.*Edition~'
 | 
			
		||||
foreach($package in $packages) {
 | 
			
		||||
    $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState
 | 
			
		||||
    $packageName = ($package.Name -split '\\')[-1]
 | 
			
		||||
    $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1]
 | 
			
		||||
 | 
			
		||||
    if($state -eq 0x40) {
 | 
			
		||||
        if($null -eq $installCandidates[$packageEdition]) {
 | 
			
		||||
            $installCandidates[$packageEdition] = @()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if($false -eq ($packageName -in $installCandidates[$packageEdition])) {
 | 
			
		||||
            $installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($packageName -in $removalCandidates))) {
 | 
			
		||||
        $removalCandidates = $removalCandidates + @($packageName)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if($getTargetsParam) {
 | 
			
		||||
    Write-UpgradeCandidates -InstallCandidates $installCandidates
 | 
			
		||||
    Exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if($false -eq ($SetEdition -in $installCandidates.Keys)) {
 | 
			
		||||
    Write-Error "The system cannot be upgraded to `"$SetEdition`""
 | 
			
		||||
    Exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$xmlPath = $Env:Temp + '\CbsUpgrade.xml'
 | 
			
		||||
 | 
			
		||||
Write-UpgradeXml -RemovalCandidates $removalCandidates `
 | 
			
		||||
    -InstallCandidates $installCandidates[$SetEdition] `
 | 
			
		||||
    -Stage $stageCurrentParam >$xmlPath
 | 
			
		||||
 | 
			
		||||
$editionXml = Find-EditionXml -Edition $SetEdition
 | 
			
		||||
if($null -eq $editionXml) {
 | 
			
		||||
    Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Write-Host 'Starting the upgrade process. This may take a while...'
 | 
			
		||||
 | 
			
		||||
DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath
 | 
			
		||||
$dismError = $LASTEXITCODE
 | 
			
		||||
 | 
			
		||||
Remove-Item -Path $xmlPath -Force
 | 
			
		||||
 | 
			
		||||
if(($dismError -ne 0) -and ($dismError -ne 3010)) {
 | 
			
		||||
    Write-Error 'Failed to upgrade to the target edition'
 | 
			
		||||
    Exit $dismError
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if($null -ne $editionXml) {
 | 
			
		||||
    $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml'
 | 
			
		||||
    Copy-Item -Path $editionXml -Destination $destination
 | 
			
		||||
 | 
			
		||||
    DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml
 | 
			
		||||
    $dismError = $LASTEXITCODE
 | 
			
		||||
 | 
			
		||||
    if(($dismError -ne 0) -and ($dismError -ne 3010)) {
 | 
			
		||||
        Write-Error 'Failed to apply edition specific settings'
 | 
			
		||||
        Exit $dismError
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Restart-Computer
 | 
			
		||||
:cbsxml:]
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  1st column = Generic Retail/OEM/MAK/GVLK Key
 | 
			
		||||
::  2nd column = Key Type
 | 
			
		||||
::  3rd column = WMI Edition ID
 | 
			
		||||
@@ -644,43 +939,45 @@ exit /b
 | 
			
		||||
:changeeditiondata
 | 
			
		||||
 | 
			
		||||
for %%# in (
 | 
			
		||||
44NYX-TKR9D-CCM2D-V6B8F-HQWWR_Volume:MAK_Enterprise
 | 
			
		||||
D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ_____Retail_Starter
 | 
			
		||||
3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT_Volume:MAK_EnterpriseN
 | 
			
		||||
3NFXW-2T27M-2BDW6-4GHRV-68XRX_____Retail_StarterN
 | 
			
		||||
VK7JG-NPHTM-C97JM-9MPGT-3V66T_____Retail_Professional
 | 
			
		||||
2B87N-8KFHP-DKV6R-Y2C8J-PKCKT_____Retail_ProfessionalN
 | 
			
		||||
4CPRK-NM3K3-X6XXQ-RXX86-WXCHW_____Retail_CoreN
 | 
			
		||||
N2434-X9D7W-8PF6X-8DV9T-8TYMD_____Retail_CoreCountrySpecific
 | 
			
		||||
BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_____Retail_CoreSingleLanguage
 | 
			
		||||
YTMG3-N6DKC-DKB77-7M9GH-8HVX7_____Retail_Core
 | 
			
		||||
XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_OEM:NONSLP_PPIPro
 | 
			
		||||
YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_____Retail_Education
 | 
			
		||||
84NGF-MHBT6-FXBX8-QWJK7-DRR8H_____Retail_EducationN
 | 
			
		||||
KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_Volume:MAK_EnterpriseS_2021
 | 
			
		||||
VBX36-N7DDY-M9H62-83BMJ-CPR42_Volume:MAK_EnterpriseS_2019
 | 
			
		||||
PN3KR-JXM7T-46HM4-MCQGK-7XPJQ_Volume:MAK_EnterpriseS_2016
 | 
			
		||||
DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY_Volume:MAK_EnterpriseS_2015
 | 
			
		||||
RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_Volume:MAK_EnterpriseSN_2021
 | 
			
		||||
M33WV-NHY3C-R7FPM-BQGPT-239PG_Volume:MAK_EnterpriseSN_2019
 | 
			
		||||
2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_Volume:MAK_EnterpriseSN_2016
 | 
			
		||||
NTX6B-BRYC2-K6786-F6MVQ-M7V2X_Volume:MAK_EnterpriseSN_2015
 | 
			
		||||
G3KNM-CHG6T-R36X3-9QDG6-8M8K9_____Retail_ProfessionalSingleLanguage
 | 
			
		||||
HNGCC-Y38KG-QVK8D-WMWRK-X86VK_____Retail_ProfessionalCountrySpecific
 | 
			
		||||
DXG7C-N36C4-C4HTG-X4T3X-2YV77_____Retail_ProfessionalWorkstation
 | 
			
		||||
WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_____Retail_ProfessionalWorkstationN
 | 
			
		||||
8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_____Retail_ProfessionalEducation
 | 
			
		||||
GJTYN-HDMQY-FRR76-HVGC7-QPF8P_____Retail_ProfessionalEducationN
 | 
			
		||||
C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC_Volume:MAK_EnterpriseG
 | 
			
		||||
46PN6-R9BK9-CVHKB-HWQ9V-MBJY8_Volume:MAK_EnterpriseGN
 | 
			
		||||
NJCF7-PW8QT-3324D-688JX-2YV66_____Retail_ServerRdsh
 | 
			
		||||
V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_____Retail_Cloud
 | 
			
		||||
NH9J3-68WK7-6FB93-4K3DF-DJ4F6_____Retail_CloudN
 | 
			
		||||
2HN6V-HGTM8-6C97C-RK67V-JQPFD_____Retail_CloudE
 | 
			
		||||
XQQYW-NFFMW-XJPBH-K8732-CKFFD_____OEM:DM_IoTEnterprise
 | 
			
		||||
QPM6N-7J2WJ-P88HH-P3YRH-YY74H_OEM:NONSLP_IoTEnterpriseS
 | 
			
		||||
K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_____Retail_CloudEditionN
 | 
			
		||||
KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_____Retail_CloudEdition
 | 
			
		||||
44NYX-TKR9D-CCM2D-V6B8F-HQWWR__Volume:MAK_Enterprise
 | 
			
		||||
D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ______Retail_Starter
 | 
			
		||||
3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__Volume:MAK_EnterpriseN
 | 
			
		||||
3NFXW-2T27M-2BDW6-4GHRV-68XRX______Retail_StarterN
 | 
			
		||||
VK7JG-NPHTM-C97JM-9MPGT-3V66T______Retail_Professional
 | 
			
		||||
2B87N-8KFHP-DKV6R-Y2C8J-PKCKT______Retail_ProfessionalN
 | 
			
		||||
4CPRK-NM3K3-X6XXQ-RXX86-WXCHW______Retail_CoreN
 | 
			
		||||
N2434-X9D7W-8PF6X-8DV9T-8TYMD______Retail_CoreCountrySpecific
 | 
			
		||||
BT79Q-G7N6G-PGBYW-4YWX6-6F4BT______Retail_CoreSingleLanguage
 | 
			
		||||
YTMG3-N6DKC-DKB77-7M9GH-8HVX7______Retail_Core
 | 
			
		||||
XKCNC-J26Q9-KFHD2-FKTHY-KD72Y__OEM:NONSLP_PPIPro
 | 
			
		||||
YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY______Retail_Education
 | 
			
		||||
84NGF-MHBT6-FXBX8-QWJK7-DRR8H______Retail_EducationN
 | 
			
		||||
KCNVH-YKWX8-GJJB9-H9FDT-6F7W2__Volume:MAK_EnterpriseS_VB
 | 
			
		||||
VBX36-N7DDY-M9H62-83BMJ-CPR42__Volume:MAK_EnterpriseS_RS5
 | 
			
		||||
PN3KR-JXM7T-46HM4-MCQGK-7XPJQ__Volume:MAK_EnterpriseS_RS1
 | 
			
		||||
DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY__Volume:MAK_EnterpriseS_TH
 | 
			
		||||
RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT__Volume:MAK_EnterpriseSN_VB
 | 
			
		||||
M33WV-NHY3C-R7FPM-BQGPT-239PG__Volume:MAK_EnterpriseSN_RS5
 | 
			
		||||
2DBW3-N2PJG-MVHW3-G7TDK-9HKR4__Volume:MAK_EnterpriseSN_RS1
 | 
			
		||||
NTX6B-BRYC2-K6786-F6MVQ-M7V2X__Volume:MAK_EnterpriseSN_TH
 | 
			
		||||
G3KNM-CHG6T-R36X3-9QDG6-8M8K9______Retail_ProfessionalSingleLanguage
 | 
			
		||||
HNGCC-Y38KG-QVK8D-WMWRK-X86VK______Retail_ProfessionalCountrySpecific
 | 
			
		||||
DXG7C-N36C4-C4HTG-X4T3X-2YV77______Retail_ProfessionalWorkstation
 | 
			
		||||
WYPNQ-8C467-V2W6J-TX4WX-WT2RQ______Retail_ProfessionalWorkstationN
 | 
			
		||||
8PTT6-RNW4C-6V7J2-C2D3X-MHBPB______Retail_ProfessionalEducation
 | 
			
		||||
GJTYN-HDMQY-FRR76-HVGC7-QPF8P______Retail_ProfessionalEducationN
 | 
			
		||||
C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC__Volume:MAK_EnterpriseG
 | 
			
		||||
46PN6-R9BK9-CVHKB-HWQ9V-MBJY8__Volume:MAK_EnterpriseGN
 | 
			
		||||
NJCF7-PW8QT-3324D-688JX-2YV66______Retail_ServerRdsh
 | 
			
		||||
V3WVW-N2PV2-CGWC3-34QGF-VMJ2C______Retail_Cloud
 | 
			
		||||
NH9J3-68WK7-6FB93-4K3DF-DJ4F6______Retail_CloudN
 | 
			
		||||
2HN6V-HGTM8-6C97C-RK67V-JQPFD______Retail_CloudE
 | 
			
		||||
XQQYW-NFFMW-XJPBH-K8732-CKFFD______OEM:DM_IoTEnterprise
 | 
			
		||||
QPM6N-7J2WJ-P88HH-P3YRH-YY74H__OEM:NONSLP_IoTEnterpriseS_VB
 | 
			
		||||
KBN8V-HFGQ4-MGXVD-347P6-PDQGT_Volume:GVLK_IoTEnterpriseS_NI
 | 
			
		||||
K9VKN-3BGWV-Y624W-MCRMQ-BHDCD______Retail_CloudEditionN
 | 
			
		||||
KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W______Retail_CloudEdition
 | 
			
		||||
MPB3G-XNBR7-CC43M-FG64B-F9GBK______Retail_IoTEnterpriseSK
 | 
			
		||||
) do (
 | 
			
		||||
for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
 | 
			
		||||
 | 
			
		||||
@@ -689,7 +986,7 @@ set 4th=%%D
 | 
			
		||||
if not defined 4th (
 | 
			
		||||
set "key=%%A" & set "_chan=%%B"
 | 
			
		||||
) else (
 | 
			
		||||
echo "%winos%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
 | 
			
		||||
echo "%branch%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
@@ -701,7 +998,6 @@ exit /b
 | 
			
		||||
:changeeditionserverdata
 | 
			
		||||
 | 
			
		||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
 | 
			
		||||
 | 
			
		||||
::  Only RS3 and older version keys (GVLK/Generic Retail) are stored here, later ones are extracted from the system itself
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,8 +44,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -72,8 +72,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -362,7 +361,7 @@ exit /b
 | 
			
		||||
function PrintModePerPridFromRegistry
 | 
			
		||||
{
 | 
			
		||||
	$vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext"
 | 
			
		||||
	$vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_ -Ne 'InstalledGraceKey' -And $_ -Ne 'MigrationToV5Done' -And $_ -Ne 'test' -And $_ -Ne 'unknown'}
 | 
			
		||||
	$vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}
 | 
			
		||||
	If ($vNextPrids -Eq $null)
 | 
			
		||||
	{
 | 
			
		||||
		Write-Host "No registry keys found."
 | 
			
		||||
@@ -457,15 +456,20 @@ function PrintLicensesInformation
 | 
			
		||||
		$license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License
 | 
			
		||||
		$decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json
 | 
			
		||||
		$licenseType = $decodedLicense.LicenseType
 | 
			
		||||
		$userId = $decodedLicense.Metadata.UserId
 | 
			
		||||
		$identitiesRegkey = Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\${userId}*" -ErrorAction Ignore
 | 
			
		||||
		If ($null -Ne $decodedLicense.ExpiresOn)
 | 
			
		||||
		{
 | 
			
		||||
			$expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48)
 | 
			
		||||
		}
 | 
			
		||||
		Else
 | 
			
		||||
		{
 | 
			
		||||
			$expiry = New-Object DateTime
 | 
			
		||||
		}
 | 
			
		||||
		$licenseState = $null
 | 
			
		||||
		If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter))
 | 
			
		||||
		{
 | 
			
		||||
			$licenseState = "RFM"
 | 
			
		||||
		}
 | 
			
		||||
		ElseIf (($decodedLicense.ExpiresOn -Eq $null) -Or
 | 
			
		||||
			((Get-Date) -Lt (Get-Date $decodedLicense.ExpiresOn)))
 | 
			
		||||
		ElseIf ((Get-Date) -Lt (Get-Date $expiry))
 | 
			
		||||
		{
 | 
			
		||||
			$licenseState = "Licensed"
 | 
			
		||||
		}
 | 
			
		||||
@@ -483,11 +487,11 @@ function PrintLicensesInformation
 | 
			
		||||
				Acid = $decodedLicense.Acid;
 | 
			
		||||
				LicenseState = $licenseState;
 | 
			
		||||
				EntitlementStatus = $decodedLicense.Status;
 | 
			
		||||
				EntitlementExpiration = $decodedLicense.ExpiresOn;
 | 
			
		||||
				ReasonCode = $decodedLicense.ReasonCode;
 | 
			
		||||
				NotBefore = $decodedLicense.Metadata.NotBefore;
 | 
			
		||||
				NotAfter = $decodedLicense.Metadata.NotAfter;
 | 
			
		||||
				NextRenewal = $decodedLicense.Metadata.RenewAfter;
 | 
			
		||||
				Expiration = $decodedLicense.ExpiresOn;
 | 
			
		||||
				TenantId = $decodedLicense.Metadata.TenantId;
 | 
			
		||||
			} | ConvertTo-Json
 | 
			
		||||
		}
 | 
			
		||||
@@ -502,11 +506,11 @@ function PrintLicensesInformation
 | 
			
		||||
				DeviceId = $decodedLicense.Metadata.DeviceId;
 | 
			
		||||
				LicenseState = $licenseState;
 | 
			
		||||
				EntitlementStatus = $decodedLicense.Status;
 | 
			
		||||
				EntitlementExpiration = $decodedLicense.ExpiresOn;
 | 
			
		||||
				ReasonCode = $decodedLicense.ReasonCode;
 | 
			
		||||
				NotBefore = $decodedLicense.Metadata.NotBefore;
 | 
			
		||||
				NotAfter = $decodedLicense.Metadata.NotAfter;
 | 
			
		||||
				NextRenewal = $decodedLicense.Metadata.RenewAfter;
 | 
			
		||||
				Expiration = $decodedLicense.ExpiresOn;
 | 
			
		||||
				TenantId = $decodedLicense.Metadata.TenantId;
 | 
			
		||||
			} | ConvertTo-Json
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -55,8 +55,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -114,22 +113,12 @@ goto done2
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Check desktop location
 | 
			
		||||
::  Fix for the special characters limitation in path name
 | 
			
		||||
 | 
			
		||||
set desktop=
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
 | 
			
		||||
if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
 | 
			
		||||
 | 
			
		||||
if not defined desktop (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Desktop location was not detected, aborting...
 | 
			
		||||
goto done2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Fix for the special characters limitation in path name
 | 
			
		||||
 | 
			
		||||
set "_work=%~dp0"
 | 
			
		||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +126,7 @@ set "_batf=%~f0"
 | 
			
		||||
set "_batp=%_batf:'=''%"
 | 
			
		||||
set "_pdesk=%desktop:'=''%"
 | 
			
		||||
 | 
			
		||||
set _PSarg="""%~f0""" -el %_args%
 | 
			
		||||
set "_ttemp=%temp%"
 | 
			
		||||
 | 
			
		||||
set "_dir=%desktop%\$OEM$\$$\Setup\Scripts"
 | 
			
		||||
@@ -145,14 +135,6 @@ setlocal EnableDelayedExpansion
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\" (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Desktop location was not detected, aborting...
 | 
			
		||||
goto done2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
 | 
			
		||||
if /i not "!_work!"=="!_ttemp!" (
 | 
			
		||||
%eline%
 | 
			
		||||
@@ -166,6 +148,26 @@ goto done2
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Elevate script as admin and pass arguments and preventing loop
 | 
			
		||||
 | 
			
		||||
>nul fltmc || (
 | 
			
		||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
 | 
			
		||||
%eline%
 | 
			
		||||
echo This script require administrator privileges.
 | 
			
		||||
echo To do so, right click on this script and select 'Run as administrator'.
 | 
			
		||||
goto done2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if not exist "!desktop!\" (
 | 
			
		||||
%eline%
 | 
			
		||||
echo Desktop location was not detected, aborting...
 | 
			
		||||
goto done2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
mode 66, 26
 | 
			
		||||
 | 
			
		||||
if exist "!desktop!\$OEM$\" (
 | 
			
		||||
@@ -178,8 +180,6 @@ goto done2
 | 
			
		||||
 | 
			
		||||
set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd
 | 
			
		||||
set KMS38_Activation.cmd=HWID-KMS38_Activation\KMS38_Activation.cmd
 | 
			
		||||
set ClipUp.exe=HWID-KMS38_Activation\BIN\ClipUp.exe
 | 
			
		||||
set gatherosstate.exe=HWID-KMS38_Activation\BIN\gatherosstate.exe
 | 
			
		||||
 | 
			
		||||
set Activate.cmd=Online_KMS_Activation\Activate.cmd
 | 
			
		||||
set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe
 | 
			
		||||
@@ -191,8 +191,6 @@ set _nofile=
 | 
			
		||||
for %%# in (
 | 
			
		||||
%HWID_Activation.cmd%
 | 
			
		||||
%KMS38_Activation.cmd%
 | 
			
		||||
%ClipUp.exe%
 | 
			
		||||
%gatherosstate.exe%
 | 
			
		||||
%Activate.cmd%
 | 
			
		||||
%cleanosppx64.exe%
 | 
			
		||||
%cleanosppx86.exe%
 | 
			
		||||
@@ -229,11 +227,11 @@ echo:
 | 
			
		||||
echo:        [4] HWID  ^(Windows^) ^+ Online KMS ^(Office^)
 | 
			
		||||
echo:        [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
 | 
			
		||||
echo:
 | 
			
		||||
echo:        [6] Exit                                            
 | 
			
		||||
echo:        [0] Exit                                            
 | 
			
		||||
echo:     ________________________________________________________
 | 
			
		||||
echo:  
 | 
			
		||||
call :ex_color2 %_White% "      " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6]"
 | 
			
		||||
choice /C:123456 /N
 | 
			
		||||
call :ex_color2 %_White% "      " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,0]"
 | 
			
		||||
choice /C:123450 /N
 | 
			
		||||
set _erl=%errorlevel%
 | 
			
		||||
 | 
			
		||||
if %_erl%==6 exit /b
 | 
			
		||||
@@ -249,14 +247,18 @@ goto :Menu
 | 
			
		||||
:hwid
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
call :prep
 | 
			
		||||
call :hwidprep
 | 
			
		||||
call :pop_d
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
 | 
			
		||||
popd
 | 
			
		||||
call :export hwid_setup
 | 
			
		||||
call :hwidprep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
 | 
			
		||||
if defined _error goto errorfound
 | 
			
		||||
set "_oem=HWID"
 | 
			
		||||
 | 
			
		||||
set oem=HWID
 | 
			
		||||
goto done
 | 
			
		||||
 | 
			
		||||
:hwid_setup:
 | 
			
		||||
@@ -264,7 +266,7 @@ goto done
 | 
			
		||||
 | 
			
		||||
fltmc >nul || exit /b
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
 | 
			
		||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
 | 
			
		||||
 | 
			
		||||
cd \
 | 
			
		||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
 | 
			
		||||
@@ -275,14 +277,18 @@ cd \
 | 
			
		||||
:kms38
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
call :prep
 | 
			
		||||
call :kms38prep
 | 
			
		||||
call :pop_d
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
 | 
			
		||||
popd
 | 
			
		||||
call :export kms38_setup
 | 
			
		||||
call :kms38prep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
 | 
			
		||||
if defined _error goto errorfound
 | 
			
		||||
set "_oem=KMS38"
 | 
			
		||||
 | 
			
		||||
set oem=KMS38
 | 
			
		||||
goto done
 | 
			
		||||
 | 
			
		||||
:kms38_setup:
 | 
			
		||||
@@ -290,7 +296,7 @@ goto done
 | 
			
		||||
 | 
			
		||||
fltmc >nul || exit /b
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
 | 
			
		||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
 | 
			
		||||
 | 
			
		||||
cd \
 | 
			
		||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
 | 
			
		||||
@@ -301,14 +307,22 @@ cd \
 | 
			
		||||
:kms
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
call :prep
 | 
			
		||||
call :kmsprep
 | 
			
		||||
call :pop_d
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul%
 | 
			
		||||
popd
 | 
			
		||||
call :export kms_setup
 | 
			
		||||
call :kmsprep2
 | 
			
		||||
 | 
			
		||||
if defined _kerror goto errorfound
 | 
			
		||||
set "_oem=Online KMS"
 | 
			
		||||
set _error=
 | 
			
		||||
if not exist "!_dir!\Activate.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1
 | 
			
		||||
if defined _error goto errorfound
 | 
			
		||||
 | 
			
		||||
set oem=Online KMS
 | 
			
		||||
goto done
 | 
			
		||||
 | 
			
		||||
:kms_setup:
 | 
			
		||||
@@ -316,8 +330,7 @@ goto done
 | 
			
		||||
 | 
			
		||||
fltmc >nul || exit /b
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-WindowsOffice
 | 
			
		||||
 | 
			
		||||
cd \
 | 
			
		||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
 | 
			
		||||
@@ -328,17 +341,24 @@ cd \
 | 
			
		||||
:hwid_kms
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
call :prep
 | 
			
		||||
call :hwidprep
 | 
			
		||||
call :kmsprep
 | 
			
		||||
call :pop_d
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
 | 
			
		||||
copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul%
 | 
			
		||||
popd
 | 
			
		||||
call :export hwid_kms_setup
 | 
			
		||||
call :hwidprep2
 | 
			
		||||
call :kmsprep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\Activate.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1
 | 
			
		||||
if defined _error goto errorfound
 | 
			
		||||
if defined _kerror goto errorfound
 | 
			
		||||
set "_oem=HWID [Windows] + Online KMS [Office]"
 | 
			
		||||
 | 
			
		||||
set oem=HWID [Windows] + Online KMS [Office]
 | 
			
		||||
goto done
 | 
			
		||||
 | 
			
		||||
:hwid_kms_setup:
 | 
			
		||||
@@ -346,10 +366,9 @@ goto done
 | 
			
		||||
 | 
			
		||||
fltmc >nul || exit /b
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
 | 
			
		||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-Office
 | 
			
		||||
 | 
			
		||||
cd \
 | 
			
		||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
 | 
			
		||||
@@ -360,17 +379,24 @@ cd \
 | 
			
		||||
:kms38_kms
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
call :prep
 | 
			
		||||
call :kms38prep
 | 
			
		||||
call :kmsprep
 | 
			
		||||
call :pop_d
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
 | 
			
		||||
copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul%
 | 
			
		||||
popd
 | 
			
		||||
call :export kms38_kms_setup
 | 
			
		||||
call :kms38prep2
 | 
			
		||||
call :kmsprep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\Activate.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1
 | 
			
		||||
if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1
 | 
			
		||||
if defined _error goto errorfound
 | 
			
		||||
if defined _kerror goto errorfound
 | 
			
		||||
set "_oem=KMS38 [Windows] + Online KMS [Office]"
 | 
			
		||||
 | 
			
		||||
set oem=KMS38 [Windows] + Online KMS [Office]
 | 
			
		||||
goto done
 | 
			
		||||
 | 
			
		||||
:kms38_kms_setup:
 | 
			
		||||
@@ -378,10 +404,9 @@ goto done
 | 
			
		||||
 | 
			
		||||
fltmc >nul || exit /b
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
 | 
			
		||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
 | 
			
		||||
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
 | 
			
		||||
start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-Office
 | 
			
		||||
 | 
			
		||||
cd \
 | 
			
		||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
 | 
			
		||||
@@ -397,11 +422,16 @@ goto :done2
 | 
			
		||||
 | 
			
		||||
:done
 | 
			
		||||
 | 
			
		||||
echo _______________________________________________________
 | 
			
		||||
echo ______________________________________________________________
 | 
			
		||||
echo:
 | 
			
		||||
call :ex_color %Magenta% "%_oem%"
 | 
			
		||||
call :ex_color %Magenta% "%oem%"
 | 
			
		||||
call :ex_color %Green% "$OEM$ folder is successfully created on the Desktop."
 | 
			
		||||
echo _______________________________________________________
 | 
			
		||||
echo "%oem%" | find /i "38" %nul% && (
 | 
			
		||||
echo:
 | 
			
		||||
echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^),
 | 
			
		||||
echo Check this page https://massgrave.dev/oem-folder
 | 
			
		||||
)
 | 
			
		||||
echo ______________________________________________________________
 | 
			
		||||
 | 
			
		||||
:done2
 | 
			
		||||
 | 
			
		||||
@@ -412,88 +442,6 @@ exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:prep
 | 
			
		||||
 | 
			
		||||
pushd "!desktop!"
 | 
			
		||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
 | 
			
		||||
pushd "!_work!"
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:hwidprep
 | 
			
		||||
 | 
			
		||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
 | 
			
		||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:kms38prep
 | 
			
		||||
 | 
			
		||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
 | 
			
		||||
copy /y /b "%ClipUp.exe%" "!_dir!\BIN\ClipUp.exe" %nul%
 | 
			
		||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:kmsprep
 | 
			
		||||
 | 
			
		||||
copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul%
 | 
			
		||||
copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul%
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:hwidprep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
pushd "!_dir!\"
 | 
			
		||||
 | 
			
		||||
for %%# in (
 | 
			
		||||
HWID_Activation.cmd
 | 
			
		||||
BIN\gatherosstate.exe
 | 
			
		||||
SetupComplete.cmd
 | 
			
		||||
) do (
 | 
			
		||||
if not exist "%%#" set _error=1
 | 
			
		||||
)
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:kms38prep2
 | 
			
		||||
 | 
			
		||||
set _error=
 | 
			
		||||
pushd "!_dir!\"
 | 
			
		||||
 | 
			
		||||
for %%# in (
 | 
			
		||||
KMS38_Activation.cmd
 | 
			
		||||
BIN\ClipUp.exe
 | 
			
		||||
BIN\gatherosstate.exe
 | 
			
		||||
SetupComplete.cmd
 | 
			
		||||
) do (
 | 
			
		||||
if not exist "%%#" set _error=1
 | 
			
		||||
)
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:kmsprep2
 | 
			
		||||
 | 
			
		||||
set _kerror=
 | 
			
		||||
pushd "!_dir!\"
 | 
			
		||||
 | 
			
		||||
for %%# in (
 | 
			
		||||
Activate.cmd
 | 
			
		||||
BIN\cleanosppx64.exe
 | 
			
		||||
BIN\cleanosppx86.exe
 | 
			
		||||
SetupComplete.cmd
 | 
			
		||||
) do (
 | 
			
		||||
if not exist "%%#" set _kerror=1
 | 
			
		||||
)
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:pop_d
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Extract the text from batch script without character and file encoding issue
 | 
			
		||||
 | 
			
		||||
:export
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -1,22 +0,0 @@
 | 
			
		||||
=================================================================================
 | 
			
		||||
   File Details:
 | 
			
		||||
=================================================================================
 | 
			
		||||
 | 
			
		||||
   - ClipUp.exe (x64)
 | 
			
		||||
     SHA-1: 48D928B1BEC25A56FE896C430C2C034B7866AA7A
 | 
			
		||||
 | 
			
		||||
     Taken from Windows server 2016 x64 ISO
 | 
			
		||||
     https://www.microsoft.com/en-us/evalcenter/
 | 
			
		||||
 | 
			
		||||
   - gatherosstate.exe (x86)
 | 
			
		||||
     SHA-1: FABB5A0FC1E6A372219711152291339AF36ED0B5
 | 
			
		||||
 | 
			
		||||
     Taken from Windows 10 Version 1607 ADK (Section: User State Migration Tool)
 | 
			
		||||
     https://go.microsoft.com/fwlink/p/?LinkId=526740
 | 
			
		||||
 | 
			
		||||
_________________________________________________________________________________
 | 
			
		||||
 | 
			
		||||
 - All files are original Microsoft's files.
 | 
			
		||||
 - ClipUp.exe is required for KMS38 activation of Server Cor/Acor editions.
 | 
			
		||||
 | 
			
		||||
=================================================================================
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -14,7 +14,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
:: For unattended mode, run the script with /u parameter.
 | 
			
		||||
:: For unattended mode, run the script with "/Insert-HWID-Key" parameter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -58,8 +58,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -69,7 +68,7 @@ popd
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
color 07
 | 
			
		||||
title  Install Windows Retail/OEM/MAK Key
 | 
			
		||||
title  Install Windows HWID Key
 | 
			
		||||
 | 
			
		||||
set _args=
 | 
			
		||||
set _elev=
 | 
			
		||||
@@ -80,7 +79,7 @@ if defined _args set _args=%_args:"=%
 | 
			
		||||
if defined _args (
 | 
			
		||||
for %%A in (%_args%) do (
 | 
			
		||||
if /i "%%A"=="-el" set _elev=1
 | 
			
		||||
if /i "%%A"=="/u"  set _unattended=1
 | 
			
		||||
if /i "%%A"=="/Insert-HWID-Key"  set _unattended=1
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -111,6 +110,7 @@ set "_Yellow="Black" "Yellow""
 | 
			
		||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
 | 
			
		||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
 | 
			
		||||
set "line=echo ___________________________________________________________________________________________"
 | 
			
		||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -121,6 +121,12 @@ echo Project is supported for Windows 10/11.
 | 
			
		||||
goto ins_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
 | 
			
		||||
%eline%
 | 
			
		||||
echo HWID Activation is not supported for Windows Server.
 | 
			
		||||
goto ins_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo Unable to find powershell.exe in the system.
 | 
			
		||||
@@ -160,7 +166,7 @@ goto ins_done
 | 
			
		||||
 | 
			
		||||
::  Elevate script as admin and pass arguments and preventing loop
 | 
			
		||||
 | 
			
		||||
%nul% reg query HKU\S-1-5-19 || (
 | 
			
		||||
>nul fltmc || (
 | 
			
		||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
 | 
			
		||||
%eline%
 | 
			
		||||
echo This script require administrator privileges.
 | 
			
		||||
@@ -172,13 +178,11 @@ goto ins_done
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
mode 98, 30
 | 
			
		||||
 | 
			
		||||
call :dk_initial
 | 
			
		||||
 | 
			
		||||
::  Check product name
 | 
			
		||||
 | 
			
		||||
cls
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
call :dk_product
 | 
			
		||||
call :dk_ckeckwmic
 | 
			
		||||
call :dk_actids
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -206,34 +210,23 @@ goto ins_done
 | 
			
		||||
::  Detect key
 | 
			
		||||
 | 
			
		||||
set key=
 | 
			
		||||
set pkey=
 | 
			
		||||
set _chan=
 | 
			
		||||
set channel=
 | 
			
		||||
set actidnotfound=
 | 
			
		||||
 | 
			
		||||
if defined applist call :hwiddata attempt1
 | 
			
		||||
if not defined key call :hwiddata attempt2
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
 | 
			
		||||
 | 
			
		||||
set pkey=
 | 
			
		||||
if not defined key call :dk_hwidkey %nul%
 | 
			
		||||
if defined applist call :hwidkey key attempt1
 | 
			
		||||
if not defined key call :hwidkey key attempt2
 | 
			
		||||
 | 
			
		||||
if not defined key (
 | 
			
		||||
%eline%
 | 
			
		||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
 | 
			
		||||
echo PowerShell is not responding properly.
 | 
			
		||||
echo:
 | 
			
		||||
)
 | 
			
		||||
echo Unable to find HWID key for [%winos% ^| SKU:%osSKU% ^| %winbuild%]
 | 
			
		||||
echo Make sure you are using updated version of the script
 | 
			
		||||
echo:
 | 
			
		||||
if not "%regSKU%"=="%wmiSKU%" (
 | 
			
		||||
echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
 | 
			
		||||
echo Restart the system and try again.
 | 
			
		||||
)
 | 
			
		||||
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
 | 
			
		||||
echo Unable to find this product in the HWID supported product list.
 | 
			
		||||
echo Make sure you are using updated version of the script.
 | 
			
		||||
echo https://massgrave.dev
 | 
			
		||||
goto ins_done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if defined key call :dk_pkeychannel %key%
 | 
			
		||||
if defined pkeychannel set _chan=%pkeychannel% Key
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if %_unattended%==1 goto insertkey
 | 
			
		||||
@@ -241,7 +234,7 @@ if %_unattended%==1 goto insertkey
 | 
			
		||||
cls
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan%
 | 
			
		||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %channel% Key
 | 
			
		||||
echo [%key%]
 | 
			
		||||
%line%
 | 
			
		||||
echo:
 | 
			
		||||
@@ -250,10 +243,9 @@ echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
 | 
			
		||||
echo       Restart the system to resolve it
 | 
			
		||||
echo:
 | 
			
		||||
)
 | 
			
		||||
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit"
 | 
			
		||||
choice /C:21 /N
 | 
			
		||||
call :dk_color %_Green% "Press [1] to Continue or [0] to %_exitmsg%"
 | 
			
		||||
choice /C:01 /N
 | 
			
		||||
if %errorlevel%==1 exit /b
 | 
			
		||||
cls
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -270,20 +262,17 @@ set error_code=%errorlevel%
 | 
			
		||||
cmd /c exit /b %error_code%
 | 
			
		||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
 | 
			
		||||
echo Installing %channel% [%key%]
 | 
			
		||||
echo:
 | 
			
		||||
 | 
			
		||||
if %error_code% EQU 0 (
 | 
			
		||||
call :dk_refresh
 | 
			
		||||
echo:
 | 
			
		||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
 | 
			
		||||
echo Installing %_chan% [%key%]
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Green% "[Successful]"
 | 
			
		||||
) else (
 | 
			
		||||
%eline%
 | 
			
		||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
 | 
			
		||||
echo Installing %_chan% [%key%]
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Red% "[Unsuccessful] %error_code%"
 | 
			
		||||
if not defined applist echo Not Respoding: %e_wmispp%
 | 
			
		||||
if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key."
 | 
			
		||||
)
 | 
			
		||||
%line%
 | 
			
		||||
 | 
			
		||||
@@ -293,7 +282,7 @@ if not defined applist echo Not Respoding: %e_wmispp%
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
if %_unattended%==1 timeout /t 2 & exit /b
 | 
			
		||||
call :dk_color %_Yellow% "Press any key to exit..."
 | 
			
		||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
 | 
			
		||||
pause >nul
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
@@ -343,93 +332,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:dk_initial
 | 
			
		||||
 | 
			
		||||
echo:
 | 
			
		||||
echo Initializing...
 | 
			
		||||
 | 
			
		||||
::  Check and enable WinMgmt, sppsvc services if required
 | 
			
		||||
 | 
			
		||||
for %%# in (WinMgmt sppsvc) do (
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Enabling %%# service...
 | 
			
		||||
if /i %%#==sppsvc  sc config %%# start= delayed-auto %nul% || echo Failed
 | 
			
		||||
if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed
 | 
			
		||||
)
 | 
			
		||||
sc start %%# %nul%
 | 
			
		||||
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Starting %%# service...
 | 
			
		||||
sc start %%#
 | 
			
		||||
echo:
 | 
			
		||||
call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..."
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::  Check WMI and SPP Errors
 | 
			
		||||
 | 
			
		||||
call :dk_ckeckwmic
 | 
			
		||||
 | 
			
		||||
set e_wmi=
 | 
			
		||||
set e_wmispp=
 | 
			
		||||
call :dk_actids
 | 
			
		||||
 | 
			
		||||
if not defined applist (
 | 
			
		||||
net stop sppsvc /y %nul%
 | 
			
		||||
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
 | 
			
		||||
if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
 | 
			
		||||
call :dk_refresh
 | 
			
		||||
 | 
			
		||||
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
 | 
			
		||||
if !errorlevel! NEQ 0 set e_wmi=1
 | 
			
		||||
 | 
			
		||||
if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP)
 | 
			
		||||
call :dk_actids
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
::  Get Product Key from pkeyhelper.dll for future new editions
 | 
			
		||||
::  It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later)
 | 
			
		||||
 | 
			
		||||
:dk_pkey
 | 
			
		||||
 | 
			
		||||
set pkey=
 | 
			
		||||
set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p);
 | 
			
		||||
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k
 | 
			
		||||
for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::  Get channel name for the key which was extracted from pkeyhelper.dll
 | 
			
		||||
 | 
			
		||||
:dk_pkeychannel
 | 
			
		||||
 | 
			
		||||
set k=%1
 | 
			
		||||
set pkeychannel=
 | 
			
		||||
set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
 | 
			
		||||
set m=[System.Runtime.InteropServices.Marshal]
 | 
			
		||||
set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f);
 | 
			
		||||
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272);
 | 
			
		||||
set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','')
 | 
			
		||||
for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:dk_hwidkey
 | 
			
		||||
 | 
			
		||||
for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
 | 
			
		||||
for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do (
 | 
			
		||||
call :dk_pkey %osSKU% '%%#'
 | 
			
		||||
if defined pkey call :dk_pkeychannel !pkey!
 | 
			
		||||
if /i [!pkeychannel!]==[%%#] (
 | 
			
		||||
set key=!pkey!
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
:dk_color
 | 
			
		||||
@@ -446,76 +348,77 @@ exit /b
 | 
			
		||||
::  1st column = Activation ID
 | 
			
		||||
::  2nd column = Generic Retail/OEM/MAK Key
 | 
			
		||||
::  3rd column = SKU ID
 | 
			
		||||
::  4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
 | 
			
		||||
::  5th column = Key Type
 | 
			
		||||
::  6th column = WMI Edition ID
 | 
			
		||||
::  7th column = Version name incase same Edition ID is used in different OS versions with different key
 | 
			
		||||
::  4th column = Key Type
 | 
			
		||||
::  5th column = WMI Edition ID
 | 
			
		||||
::  6th column = Version name incase same Edition ID is used in different OS versions with different key
 | 
			
		||||
::  Separator  = _
 | 
			
		||||
 | 
			
		||||
::  Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
:hwiddata
 | 
			
		||||
:hwidkey
 | 
			
		||||
 | 
			
		||||
for %%# in (
 | 
			
		||||
8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_Enterprise
 | 
			
		||||
23505d51-32d6-41f0-8ca7-e78ad0f16e71_D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ__11_1_____Retail_Starter
 | 
			
		||||
c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN
 | 
			
		||||
211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN
 | 
			
		||||
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional
 | 
			
		||||
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN
 | 
			
		||||
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN
 | 
			
		||||
1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific
 | 
			
		||||
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage
 | 
			
		||||
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core
 | 
			
		||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro
 | 
			
		||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education
 | 
			
		||||
c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN
 | 
			
		||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021
 | 
			
		||||
d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019
 | 
			
		||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016
 | 
			
		||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_EnterpriseS_2015
 | 
			
		||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021
 | 
			
		||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019
 | 
			
		||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016
 | 
			
		||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015
 | 
			
		||||
a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage
 | 
			
		||||
f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific
 | 
			
		||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation
 | 
			
		||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN
 | 
			
		||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation
 | 
			
		||||
13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN
 | 
			
		||||
1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG
 | 
			
		||||
8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_EnterpriseGN
 | 
			
		||||
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh
 | 
			
		||||
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud
 | 
			
		||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_0_____Retail_CloudN
 | 
			
		||||
c7051f63-3a76-4992-bce5-731ec0b1e825_2HN6V-HGTM8-6C97C-RK67V-JQPFD_183_1_____Retail_CloudE
 | 
			
		||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_0_____OEM:DM_IoTEnterprise
 | 
			
		||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NONSLP_IoTEnterpriseS
 | 
			
		||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN
 | 
			
		||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition
 | 
			
		||||
8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_OEM:NONSLP_Enterprise
 | 
			
		||||
c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_Volume:MAK_EnterpriseN
 | 
			
		||||
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_____Retail_Professional
 | 
			
		||||
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_____Retail_ProfessionalN
 | 
			
		||||
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_____Retail_CoreN
 | 
			
		||||
1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_____Retail_CoreCountrySpecific
 | 
			
		||||
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_____Retail_CoreSingleLanguage
 | 
			
		||||
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_____Retail_Core
 | 
			
		||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_OEM:NONSLP_PPIPro
 | 
			
		||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_____Retail_Education
 | 
			
		||||
c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_____Retail_EducationN
 | 
			
		||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_Volume:MAK_EnterpriseS_VB
 | 
			
		||||
d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_OEM:NONSLP_EnterpriseS_RS5
 | 
			
		||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_OEM:NONSLP_EnterpriseS_RS1
 | 
			
		||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_OEM:NONSLP_EnterpriseS_TH
 | 
			
		||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_Volume:MAK_EnterpriseSN_VB
 | 
			
		||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_Volume:MAK_EnterpriseSN_RS5
 | 
			
		||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_Volume:MAK_EnterpriseSN_RS1
 | 
			
		||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_Volume:MAK_EnterpriseSN_TH
 | 
			
		||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_____Retail_ProfessionalWorkstation
 | 
			
		||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_____Retail_ProfessionalWorkstationN
 | 
			
		||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_____Retail_ProfessionalEducation
 | 
			
		||||
13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_____Retail_ProfessionalEducationN
 | 
			
		||||
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_____Retail_ServerRdsh
 | 
			
		||||
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_____Retail_Cloud
 | 
			
		||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_____Retail_CloudN
 | 
			
		||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_____OEM:DM_IoTEnterprise
 | 
			
		||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_OEM:NONSLP_IoTEnterpriseS_VB
 | 
			
		||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_____Retail_CloudEditionN
 | 
			
		||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_____Retail_CloudEdition
 | 
			
		||||
d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_205_OEM:NONSLP_IoTEnterpriseSK
 | 
			
		||||
) do (
 | 
			
		||||
for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
 | 
			
		||||
for /f "tokens=1-6 delims=_" %%A in ("%%#") do (
 | 
			
		||||
 | 
			
		||||
if %1==attempt1 if not defined key (
 | 
			
		||||
if %1==key if %osSKU%==%%C (
 | 
			
		||||
 | 
			
		||||
REM Detect key attempt 1
 | 
			
		||||
 | 
			
		||||
if "%2"=="attempt1" if not defined key (
 | 
			
		||||
echo "!applist!" | find /i "%%A" 1>nul && (
 | 
			
		||||
set key=%%B
 | 
			
		||||
set channel=%%D
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if %1==attempt2 if not defined key (
 | 
			
		||||
set 7th=%%G
 | 
			
		||||
if not defined 7th (
 | 
			
		||||
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
 | 
			
		||||
if not defined key set key=%%B
 | 
			
		||||
REM Detect key attempt 2
 | 
			
		||||
 | 
			
		||||
if "%2"=="attempt2" if not defined key (
 | 
			
		||||
set actidnotfound=1
 | 
			
		||||
set 6th=%%F
 | 
			
		||||
if not defined 6th (
 | 
			
		||||
set key=%%B
 | 
			
		||||
set channel=%%D
 | 
			
		||||
) else (
 | 
			
		||||
echo "%winos%" | find /i "%%G" 1>nul && (
 | 
			
		||||
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
 | 
			
		||||
if not defined key set key=%%B
 | 
			
		||||
echo "%branch%" | find /i "%%F" 1>nul && (
 | 
			
		||||
set key=%%B
 | 
			
		||||
set channel=%%D
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
exit /b
 | 
			
		||||
 
 | 
			
		||||
@@ -61,8 +61,7 @@ if not %errorlevel%==0 (
 | 
			
		||||
echo:
 | 
			
		||||
echo Error: This is not a correct file. It has LF line ending issue.
 | 
			
		||||
echo:
 | 
			
		||||
echo Press any key to exit...
 | 
			
		||||
pause >nul
 | 
			
		||||
ping 127.0.0.1 -n 6 > nul
 | 
			
		||||
popd
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
@@ -74,13 +73,15 @@ cls
 | 
			
		||||
color 07
 | 
			
		||||
title  Online KMS Activation
 | 
			
		||||
 | 
			
		||||
::  You are not supposed to edit anything below this.
 | 
			
		||||
 | 
			
		||||
set WMI_VBS=0
 | 
			
		||||
set _Debug=0
 | 
			
		||||
set Silent=0
 | 
			
		||||
set Logger=0
 | 
			
		||||
set AutoR2V=1
 | 
			
		||||
set SkipKMS38=1
 | 
			
		||||
 | 
			
		||||
set vNextOverride=1
 | 
			
		||||
set ActWindows=1
 | 
			
		||||
set ActOffice=1
 | 
			
		||||
 | 
			
		||||
@@ -90,6 +91,7 @@ set _elev=
 | 
			
		||||
set _renetask=
 | 
			
		||||
set _renacttask=
 | 
			
		||||
set _unattended=
 | 
			
		||||
set _unattendedact=
 | 
			
		||||
 | 
			
		||||
set _args=%*
 | 
			
		||||
if defined _args set _args=%_args:"=%
 | 
			
		||||
@@ -99,14 +101,15 @@ if "%_args%"=="-el"  set _unattended=
 | 
			
		||||
 | 
			
		||||
for %%A in (%_args%) do (
 | 
			
		||||
if /i "%%A"=="-el"  (set _elev=1
 | 
			
		||||
) else if /i "%%A"=="/rt"  (set _renetask=1
 | 
			
		||||
) else if /i "%%A"=="/rat" (set _renacttask=1
 | 
			
		||||
) else if /i "%%A"=="/uni" (set _uni=1
 | 
			
		||||
) else if /i "%%A"=="/w"   (set ActWindows=1&set ActOffice=0
 | 
			
		||||
) else if /i "%%A"=="/o"   (set ActWindows=0&set ActOffice=1
 | 
			
		||||
) else if /i "%%A"=="/wo"  (set ActWindows=1&set ActOffice=1
 | 
			
		||||
) else if /i "%%A"=="/d"   (set _Debug=1
 | 
			
		||||
) else if /i "%%A"=="/l"   (set Logger=1&set Silent=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-RenewalTask"  (set _renetask=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-ActAndRenewalTask" (set _renacttask=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-Uninstall" (set _uni=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-Windows"   (set ActWindows=1&set ActOffice=0&set _unattendedact=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-Office"   (set ActWindows=0&set ActOffice=1&set _unattendedact=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-WindowsOffice"  (set ActWindows=1&set ActOffice=1&set _unattendedact=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-KeepvNext"  (set vNextOverride=0
 | 
			
		||||
) else if /i "%%A"=="/KMS-Debug"   (set _Debug=1
 | 
			
		||||
) else if /i "%%A"=="/KMS-Logger"   (set Logger=1&set Silent=1
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
@@ -157,6 +160,7 @@ set "_batp=%_batf:'=''%"
 | 
			
		||||
set _PSarg="""%~f0""" -el %_args%
 | 
			
		||||
 | 
			
		||||
set "_ttemp=%temp%"
 | 
			
		||||
set "_Local=%LocalAppData%"
 | 
			
		||||
 | 
			
		||||
setlocal EnableDelayedExpansion
 | 
			
		||||
 | 
			
		||||
@@ -177,7 +181,7 @@ goto Done
 | 
			
		||||
 | 
			
		||||
::  Elevate script as admin and pass arguments and preventing loop
 | 
			
		||||
 | 
			
		||||
%nul% reg query HKU\S-1-5-19 || (
 | 
			
		||||
>nul fltmc || (
 | 
			
		||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
 | 
			
		||||
%nceline%
 | 
			
		||||
echo This script require administrator privileges.
 | 
			
		||||
@@ -187,6 +191,16 @@ goto Done
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
 | 
			
		||||
 | 
			
		||||
::  Check not x86 Windows
 | 
			
		||||
 | 
			
		||||
set notx86=
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
 | 
			
		||||
if /i not "%arch%"=="x86" set notx86=1
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo Unable to find wmic.exe in the system.
 | 
			
		||||
@@ -197,6 +211,7 @@ goto Done
 | 
			
		||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul || (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo wmic.exe is not responding in the system.
 | 
			
		||||
echo Check this page for help https://massgrave.dev/troubleshoot
 | 
			
		||||
echo Aborting...
 | 
			
		||||
goto Done
 | 
			
		||||
)
 | 
			
		||||
@@ -206,29 +221,20 @@ reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nu
 | 
			
		||||
reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
 | 
			
		||||
 | 
			
		||||
if %_WSH% EQU 0 (
 | 
			
		||||
%nceline%
 | 
			
		||||
echo Windows Script Host is disabled.
 | 
			
		||||
echo It is required for this script to work.
 | 
			
		||||
echo Aborting...
 | 
			
		||||
goto Done
 | 
			
		||||
reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
 | 
			
		||||
reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
 | 
			
		||||
if defined notx86 reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul%
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if %~z0 GEQ 500000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
 | 
			
		||||
 | 
			
		||||
::  Check not x86 Windows
 | 
			
		||||
 | 
			
		||||
set notx86=
 | 
			
		||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
 | 
			
		||||
if /i not "%arch%"=="x86" set notx86=1
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
if defined _uni goto _Complete_Uninstall
 | 
			
		||||
 | 
			
		||||
if defined _renacttask set ActTask=1&goto:RenTask
 | 
			
		||||
if defined _renetask set ActTask=&goto:RenTask
 | 
			
		||||
if defined _renetask set ActTask=&call:RenTask&timeout /t 2
 | 
			
		||||
cls
 | 
			
		||||
if defined _renacttask set ActTask=1&call:RenTask&timeout /t 2
 | 
			
		||||
cls
 | 
			
		||||
if defined _unattended if not defined _unattendedact goto Done
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
 | 
			
		||||
@@ -237,6 +243,16 @@ set _gui=
 | 
			
		||||
 | 
			
		||||
:_KMS_Menu
 | 
			
		||||
 | 
			
		||||
set sub_next=0
 | 
			
		||||
set sub_o365=0
 | 
			
		||||
set sub_proj=0
 | 
			
		||||
set sub_vsio=0
 | 
			
		||||
set _Identity=0
 | 
			
		||||
set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext
 | 
			
		||||
dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" %nul% && set _Identity=1
 | 
			
		||||
dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" %nul% && set _Identity=1
 | 
			
		||||
if %_Identity% EQU 1 reg query %kNext% /v MigrationToV5Done 2>nul | find /i "0x1" %nul% && call :officeSub %nul%
 | 
			
		||||
 | 
			
		||||
set _tskinstalled=
 | 
			
		||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && (
 | 
			
		||||
set _tskinstalled=1
 | 
			
		||||
@@ -251,6 +267,7 @@ set _oldtsk=1
 | 
			
		||||
 | 
			
		||||
if defined _unattended (
 | 
			
		||||
call :Activation_Start
 | 
			
		||||
timeout /t 2
 | 
			
		||||
goto Done
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -265,15 +282,9 @@ echo.
 | 
			
		||||
echo.
 | 
			
		||||
echo.       ______________________________________________________________
 | 
			
		||||
echo.
 | 
			
		||||
if %_Debug%==0 (
 | 
			
		||||
echo.              [1] Activate - Windows
 | 
			
		||||
echo.              [2] Activate - Office
 | 
			
		||||
echo.              [3] Activate - All
 | 
			
		||||
) else (
 | 
			
		||||
call :_color2 %_White% "              [1] Activate - Windows        " %_Red% "[Debug Mode]"
 | 
			
		||||
call :_color2 %_White% "              [2] Activate - Office         " %_Red% "[Debug Mode]"
 | 
			
		||||
call :_color2 %_White% "              [3] Activate - All            " %_Red% "[Debug Mode]"
 | 
			
		||||
)
 | 
			
		||||
echo.
 | 
			
		||||
if defined _tskinstalled call :_color2 %_White% "              [4] Install Auto-Renewal      " %_Green% "[Installed]"
 | 
			
		||||
if defined _oldtsk       call :_color2 %_White% "              [4] Install Auto-Renewal      " %_Red% "[Old Installed]"
 | 
			
		||||
@@ -281,17 +292,35 @@ if not defined _tskinstalled if not defined _oldtsk echo.              [4] Insta
 | 
			
		||||
echo.              [5] Uninstall
 | 
			
		||||
echo.              _______________________________________________  
 | 
			
		||||
echo.
 | 
			
		||||
echo.              [6] Enable Debug Mode
 | 
			
		||||
if %_Debug%==0 (
 | 
			
		||||
echo.              [6] Enable Debug Mode         [No]
 | 
			
		||||
) else (
 | 
			
		||||
call :_color2 %_White% "              [6] Enable Debug Mode         " %_Red% "[Yes]"
 | 
			
		||||
)
 | 
			
		||||
if %vNextOverride% EQU 1 (
 | 
			
		||||
if %sub_next% EQU 1 (
 | 
			
		||||
call :_color2 %_White% "              [7] Override Office vNext     " %_Red% "[Yes]"
 | 
			
		||||
) else (
 | 
			
		||||
echo               [7] Override Office vNext     [Yes]
 | 
			
		||||
)
 | 
			
		||||
) else (
 | 
			
		||||
if %sub_next% EQU 1 (
 | 
			
		||||
call :_color2 %_White% "              [7] Override Office vNext     " %_Yellow% "[No]"
 | 
			
		||||
) else (
 | 
			
		||||
echo               [7] Override Office vNext     [No]
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
echo.              _______________________________________________       
 | 
			
		||||
echo.
 | 
			
		||||
echo.              [7] %_exitmsg%
 | 
			
		||||
echo.              [0] %_exitmsg%
 | 
			
		||||
echo.       ______________________________________________________________
 | 
			
		||||
echo.
 | 
			
		||||
call :_color2 %_White% "           " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7]"
 | 
			
		||||
choice /C:1234567 /N
 | 
			
		||||
call :_color2 %_White% "           " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,0]"
 | 
			
		||||
choice /C:12345670 /N
 | 
			
		||||
set _el=%errorlevel%
 | 
			
		||||
 | 
			
		||||
if %_el%==7 exit /b
 | 
			
		||||
if %_el%==8 exit /b
 | 
			
		||||
if %_el%==7 (if %vNextOverride% EQU 0 (set vNextOverride=1) else (set vNextOverride=0))&goto _KMS_Menu
 | 
			
		||||
if %_el%==6 (if %_Debug%==0 (set _Debug=1) else (set _Debug=0)) &goto _KMS_Menu
 | 
			
		||||
if %_el%==5 call:_Complete_Uninstall&cls&goto _KMS_Menu
 | 
			
		||||
if %_el%==4 set ActTask=&call:RenTask&goto _KMS_Menu
 | 
			
		||||
@@ -322,6 +351,8 @@ for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe,osppsvc.exe) do (
 | 
			
		||||
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" /f %nul%)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
call :Clear-KMS-Cache %nul%
 | 
			
		||||
 | 
			
		||||
set "_Null=1>nul 2>nul"
 | 
			
		||||
set KMS_Port=1688
 | 
			
		||||
if %_Debug% EQU 1 set _unattended=1
 | 
			
		||||
@@ -364,11 +395,11 @@ set "_mO21c=Detected Office 2021 C2R Retail could not be converted to Volume"
 | 
			
		||||
set "_mO19c=Detected Office 2019 C2R Retail could not be converted to Volume"
 | 
			
		||||
set "_mO16c=Detected Office 2016 C2R Retail could not be converted to Volume"
 | 
			
		||||
set "_mO15c=Detected Office 2013 C2R Retail could not be converted to Volume"
 | 
			
		||||
set "_mO14c=Detected Office 2010 C2R Retail is not supported by KMS_VL_ALL"
 | 
			
		||||
set "_mO14m=Detected Office 2010 MSI Retail is not supported by KMS_VL_ALL"
 | 
			
		||||
set "_mO15m=Detected Office 2013 MSI Retail is not supported by KMS_VL_ALL"
 | 
			
		||||
set "_mO16m=Detected Office 2016 MSI Retail is not supported by KMS_VL_ALL"
 | 
			
		||||
set "_mOuwp=Detected Office 365/2016 UWP is not supported by KMS_VL_ALL"
 | 
			
		||||
set "_mO14c=Detected Office 2010 C2R Retail is not supported by this script"
 | 
			
		||||
set "_mO14m=Detected Office 2010 MSI Retail is not supported by this script"
 | 
			
		||||
set "_mO15m=Detected Office 2013 MSI Retail is not supported by this script"
 | 
			
		||||
set "_mO16m=Detected Office 2016 MSI Retail is not supported by this script"
 | 
			
		||||
set "_mOuwp=Detected Office 365/2016 UWP is not supported by this script"
 | 
			
		||||
set DO16Ids=ProPlus,Standard,Access,SkypeforBusiness,Excel,Outlook,PowerPoint,Publisher,Word
 | 
			
		||||
set LV16Ids=Mondo,ProPlus,ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness,OneNote,Excel,Outlook,PowerPoint,Publisher,Word
 | 
			
		||||
set LR16Ids=%LV16Ids%,Professional,HomeBusiness,HomeStudent,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud
 | 
			
		||||
@@ -647,7 +678,7 @@ if %ActWindows% EQU 0 (
 | 
			
		||||
    echo.&echo %_winos% %nKMS%
 | 
			
		||||
    if defined _eval echo %nEval%
 | 
			
		||||
    ) else (
 | 
			
		||||
    echo.&echo Failed checking KMS Activation ID^(s^) for Windows.&echo Check Troubleshooting in MAS extras section.&call :CheckWS
 | 
			
		||||
    echo.&echo Failed checking KMS Activation ID^(s^) for Windows.&echo Check this page for help https://massgrave.dev/troubleshoot &call :CheckWS
 | 
			
		||||
    exit /b
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
@@ -707,9 +738,12 @@ if %winbuild% GEQ 9200 (
 | 
			
		||||
  )
 | 
			
		||||
if %winbuild% LSS 9200 (if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b))
 | 
			
		||||
)
 | 
			
		||||
set sub_O365=0
 | 
			
		||||
if %vNextOverride% EQU 1 if %AutoR2V% EQU 1 (
 | 
			
		||||
set sub_o365=0
 | 
			
		||||
set sub_proj=0
 | 
			
		||||
set sub_vis=0
 | 
			
		||||
set sub_vsio=0
 | 
			
		||||
if %sub_next% EQU 1 reg delete HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing /f %_Nul3%
 | 
			
		||||
)
 | 
			
		||||
set Off1ce=1
 | 
			
		||||
set _sC2R=sppoff
 | 
			
		||||
set _fC2R=ReturnSPP
 | 
			
		||||
@@ -758,7 +792,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office21%%a20
 | 
			
		||||
  call set /a prr_off21+=1
 | 
			
		||||
  find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1
 | 
			
		||||
  )
 | 
			
		||||
if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
  call set /a prr_off21+=1
 | 
			
		||||
  find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1
 | 
			
		||||
  )
 | 
			
		||||
@@ -783,7 +817,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office19%%a20
 | 
			
		||||
  call set /a prr_off19+=1
 | 
			
		||||
  find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1
 | 
			
		||||
  )
 | 
			
		||||
if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
  call set /a prr_off19+=1
 | 
			
		||||
  find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1
 | 
			
		||||
  )
 | 
			
		||||
@@ -815,7 +849,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office16%%aR"
 | 
			
		||||
  if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1
 | 
			
		||||
  if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1
 | 
			
		||||
  )
 | 
			
		||||
if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && (
 | 
			
		||||
  call set /a prr_off16+=1
 | 
			
		||||
  if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1
 | 
			
		||||
  if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1
 | 
			
		||||
@@ -824,7 +858,7 @@ if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_t
 | 
			
		||||
)
 | 
			
		||||
if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R if %prv_off16% LSS %prr_off16% (set vol_off16=0&set run_off16=1)
 | 
			
		||||
set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%' %_zz6% %_zz3% LicenseFamily %_zz4%"
 | 
			
		||||
if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_O365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && (
 | 
			
		||||
if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_o365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && (
 | 
			
		||||
find /i "Office16MondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off16=1
 | 
			
		||||
)
 | 
			
		||||
set run_off15=0
 | 
			
		||||
@@ -862,7 +896,7 @@ if %loc_off19% EQU 1 if %vol_off19% EQU 0 (
 | 
			
		||||
if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%)
 | 
			
		||||
)
 | 
			
		||||
if %loc_off16% EQU 1 if %vol_off16% EQU 0 (
 | 
			
		||||
if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_O365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%)
 | 
			
		||||
if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%)
 | 
			
		||||
)
 | 
			
		||||
if %loc_off15% EQU 1 if %vol_off15% EQU 0 (
 | 
			
		||||
if defined _C15R (if %aC2R15% EQU 1 (echo.&echo %_mO15a%) else (echo.&echo %_mO15c%)) else if %_O15MSI% EQU 1 (if %ret_off15% EQU 1 echo.&echo %_mO15m%)
 | 
			
		||||
@@ -1292,6 +1326,20 @@ if not %xOS%==x86 if exist "%ProgramW6432%\Microsoft Office\Office%1\OSPP.VBS" s
 | 
			
		||||
if not %xOS%==x86 if exist "%ProgramFiles(x86)%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:officeSub
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vsio=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vsio=1
 | 
			
		||||
if %sub_o365% EQU 1 set sub_next=1
 | 
			
		||||
if %sub_proj% EQU 1 set sub_next=1
 | 
			
		||||
if %sub_vsio% EQU 1 set sub_next=1
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
:insKey
 | 
			
		||||
set S_OK=1
 | 
			
		||||
echo.
 | 
			
		||||
@@ -1609,22 +1657,6 @@ echo Error: %_sps% WMI version is not detected
 | 
			
		||||
call :CheckWS
 | 
			
		||||
goto :%_fC2R%
 | 
			
		||||
)
 | 
			
		||||
set _Identity=0
 | 
			
		||||
set _vNext=0
 | 
			
		||||
dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" %_Nul3% && set _Identity=1
 | 
			
		||||
dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" %_Nul3% && set _Identity=1
 | 
			
		||||
set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext
 | 
			
		||||
if %_Identity% EQU 1 reg query %kNext% /v MigrationToV5Done %_Nul2% | find /i "0x1" %_Nul1% && set _vNext=1
 | 
			
		||||
if %_vNext% EQU 1 (
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_O365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_O365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_O365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_O365=1)
 | 
			
		||||
reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vis=1
 | 
			
		||||
reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vis=1
 | 
			
		||||
)
 | 
			
		||||
set _Retail=0
 | 
			
		||||
set "_ocq=ApplicationID='%_oApp%' AND LicenseStatus='1' AND PartialProductKey is not NULL"
 | 
			
		||||
if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get Description %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt"
 | 
			
		||||
@@ -1759,20 +1791,20 @@ find /i "Office16MondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (
 | 
			
		||||
  for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud) do set _%%a=0
 | 
			
		||||
  )
 | 
			
		||||
)
 | 
			
		||||
if %sub_O365% EQU 1 (
 | 
			
		||||
if %sub_o365% EQU 1 (
 | 
			
		||||
  for %%a in (%_Suites%) do set _%%a=0
 | 
			
		||||
echo.
 | 
			
		||||
echo Microsoft Office is activated with a subscription.
 | 
			
		||||
echo Microsoft Office is activated with a vNext license.
 | 
			
		||||
)
 | 
			
		||||
if %sub_proj% EQU 1 (
 | 
			
		||||
  for %%a in (%_PrjSKU%) do set _%%a=0
 | 
			
		||||
echo.
 | 
			
		||||
echo Microsoft Project is activated with a subscription.
 | 
			
		||||
echo Microsoft Project is activated with a vNext license.
 | 
			
		||||
)
 | 
			
		||||
if %sub_vis% EQU 1 (
 | 
			
		||||
if %sub_vsio% EQU 1 (
 | 
			
		||||
  for %%a in (%_VisSKU%) do set _%%a=0
 | 
			
		||||
echo.
 | 
			
		||||
echo Microsoft Visio is activated with a subscription.
 | 
			
		||||
echo Microsoft Visio is activated with a vNext license.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
for %%a in (%_RetIds%,ProPlus) do if !_%%a! EQU 1 (
 | 
			
		||||
@@ -2980,25 +3012,45 @@ exit /b
 | 
			
		||||
 | 
			
		||||
:_errorinfo
 | 
			
		||||
 | 
			
		||||
(set msg1=echo Try again and if the issue still persist then either use a^
 | 
			
		||||
&echo different Internet connection or use this offline KMS activator^
 | 
			
		||||
&echo KMS_VL_ALL by @abbodi1406  pastebin.com/raw/cpdmr6HZ
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
call :CheckFR
 | 
			
		||||
 | 
			
		||||
if !server_num! GTR %max_servers% (
 | 
			
		||||
ping -n 1 one.one.one.one 1>nul || ping -n 1 resolver1.opendns.com 1>nul || (
 | 
			
		||||
call :_color %_Red% "Unable to test KMS servers due to restricted or no Internet."
 | 
			
		||||
echo.
 | 
			
		||||
%msg1%
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
set _intcon=
 | 
			
		||||
for %%a in (dns.msftncsi.com licensing.mp.microsoft.com) do (
 | 
			
		||||
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _intcon=1)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if not defined _intcon (
 | 
			
		||||
call :_color %_Red% "Internet is not connected."
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set _portcon=
 | 
			
		||||
for %%a in (%srvlist%) do if not defined _portcon (
 | 
			
		||||
%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""%%a""", 1688)}catch{};$t.Connected" | findstr /i true 1>nul && set _portcon=1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if not defined _portcon (
 | 
			
		||||
echo Internet is found but failed to connect KMS servers on Port 1688.
 | 
			
		||||
echo.
 | 
			
		||||
echo Make sure restricted Internet [Office/College] is not connected, 
 | 
			
		||||
echo or Port 1688 is not blocked in the firewall.
 | 
			
		||||
echo.
 | 
			
		||||
echo Either use another Internet connection or use offline KMS activator
 | 
			
		||||
echo https://github.com/abbodi1406/KMS_VL_ALL_AIO
 | 
			
		||||
exit /b
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if [%ERRORCODE%]==[-1073418124] (
 | 
			
		||||
echo KMS server port 1688 test is passed.
 | 
			
		||||
echo Make sure system files are not blocked in firewall.
 | 
			
		||||
echo.
 | 
			
		||||
echo If the issue persist, try offline KMS activator,
 | 
			
		||||
echo https://github.com/abbodi1406/KMS_VL_ALL_AIO
 | 
			
		||||
echo.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
echo Restart the system and try again.
 | 
			
		||||
echo KMS server is not an issue in this case.
 | 
			
		||||
echo Check Troubleshooting steps in the ReadMe.
 | 
			
		||||
call :_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot"
 | 
			
		||||
exit /b
 | 
			
		||||
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
@@ -3078,7 +3130,7 @@ if %winbuild% GEQ 9600 (
 | 
			
		||||
%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
 | 
			
		||||
set error_=9
 | 
			
		||||
echo Failed to completely clear KMS Cache.
 | 
			
		||||
reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo Most likely, the KMS38 activation is locked.
 | 
			
		||||
reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo KMS38 activation is locked.
 | 
			
		||||
) || (
 | 
			
		||||
echo Cleared KMS Cache successfully.
 | 
			
		||||
)
 | 
			
		||||
@@ -3158,7 +3210,7 @@ call :_color %Green% "Online KMS Complete Uninstall was done successfully."
 | 
			
		||||
echo __________________________________________________________________________________________
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if defined _unattended exit /b
 | 
			
		||||
if defined _unattended timeout /t 2 & exit /b
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
call :_color %_Yellow% "Press any key to go back..."
 | 
			
		||||
@@ -3942,7 +3994,7 @@ if not [%KMS_IP%]==[!KMS_IP!] exit /b
 | 
			
		||||
goto :_taskgetserv
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
:: Ver:1.6
 | 
			
		||||
:: Ver:1.7
 | 
			
		||||
::========================================================================================================================================
 | 
			
		||||
:_extracttask:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user