1
0
mirror of https://github.com/massgravel/Microsoft-Activation-Scripts.git synced 2024-11-25 15:46:51 +00:00
This commit is contained in:
DESKTOP-AJSJJMA\Admin 2022-11-07 12:33:01 -08:00
parent d17d7496e0
commit bc8ae03488
13 changed files with 3743 additions and 5910 deletions

File diff suppressed because it is too large Load Diff

@ -55,8 +55,7 @@ if not %errorlevel%==0 (
echo: echo:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -86,6 +85,7 @@ set cbs_log=%SystemRoot%\logs\cbs\cbs.log
set "nceline=echo: &echo ==== ERROR ==== &echo:" set "nceline=echo: &echo ==== ERROR ==== &echo:"
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:"
set "line=_________________________________________________________________________________________________" 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 :: 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 if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
%nceline% %nceline%
echo This script require administrator privileges. echo This script require administrator privileges.
@ -170,33 +170,43 @@ color 07
title Activation Troubleshoot title Activation Troubleshoot
mode con cols=77 lines=30 mode con cols=77 lines=30
echo:
echo:
echo: echo:
echo: echo:
echo: _______________________________________________________________ echo: _______________________________________________________________
echo: echo:
echo: [1] ReadMe call :_color2 %_White% " [1] " %_Green% "Help"
echo: ___________________________________________________ echo: ___________________________________________________
echo: echo:
echo: [2] Dism RestoreHealth echo: [2] Dism RestoreHealth
echo: [3] SFC Scannow echo: [3] SFC Scannow
echo: echo:
echo: [4] Rebuild Licensing Tokens echo: [4] Rebuild Licensing Tokens
echo: [5] Clear Office vNext License echo: [5] Rebuild ClipSVC Licences
echo: [6] Clear Office vNext Licences
echo: ___________________________________________________ echo: ___________________________________________________
echo: echo:
echo: [6] Solution: Office is not genuine banner echo: [7] Rebuild WMI Repository
echo: [0] Exit 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: _______________________________________________________________
echo: echo:
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
choice /C:1234560 /N choice /C:123456789GE0 /N
set _erl=%errorlevel% set _erl=%errorlevel%
if %_erl%==7 exit /b if %_erl%==12 exit /b
if %_erl%==6 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu if %_erl%==11 goto:exportevtlogs
if %_erl%==5 goto:clearvnext 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%==4 goto:retokens
if %_erl%==3 goto:sfcscan if %_erl%==3 goto:sfcscan
if %_erl%==2 goto:dism_rest if %_erl%==2 goto:dism_rest
@ -242,7 +252,7 @@ call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properl
echo: echo:
echo %line% echo %line%
echo: 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 if %errorlevel%==1 goto at_menu
cls cls
@ -260,12 +270,6 @@ echo dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHea
echo: echo:
dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4 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% 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 "%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% 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:
echo %line% echo %line%
echo: 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 if %errorlevel%==1 goto at_menu
cls cls
@ -312,12 +316,6 @@ echo sfc /scannow
echo: echo:
sfc /scannow 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% if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\SFC_CBS_%_time%.txt" %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:
echo %line% echo %line%
echo: 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 if %errorlevel%==1 goto at_menu
cls 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:
echo %line% echo %line%
echo: echo:
@ -362,16 +355,30 @@ call :_color %Magenta% "Clearing Office vNext License"
echo: echo:
setlocal DisableDelayedExpansion setlocal DisableDelayedExpansion
set "_locl=%LocalAppData%\Microsoft\Office\Licenses" set "_Local=%LocalAppData%"
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
call :cleanfolder
set "_locl=%ProgramData%\Microsoft\Office\Licenses" attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul%
call :cleanfolder 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: echo:
for %%# in ( for %%# in (
HKCU\Software\Microsoft\Office\16.0\Common\Licensing HKCU\Software\Microsoft\Office\16.0\Common\Licensing
HKCU\Software\Microsoft\Office\16.0\Common\Identity HKCU\Software\Microsoft\Office\16.0\Registration
) do ( ) do (
reg query %%# %nul% && ( reg query %%# %nul% && (
reg delete %%# /f %nul% && ( reg delete %%# /f %nul% && (
@ -380,32 +387,12 @@ echo Deleted Registry - %%#
echo Failed to Delete - %%# echo Failed to Delete - %%#
) )
) || ( ) || (
echo Already Clean - %%# echo Deleted Registry - %%#
) )
) )
goto :at_back 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 :retokens
@ -432,11 +419,12 @@ call :_color2 %_White% " - " %Red% "Apply it only when it is necessary."
echo: echo:
echo %line% echo %line%
echo: 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 if %errorlevel%==1 goto at_menu
cls cls
:cleanspptoken
echo: echo:
echo %line% echo %line%
echo: echo:
@ -496,7 +484,7 @@ sc qc osppsvc %nul% || (
echo: echo:
call :_color %Magenta% "OSPP based Office is not installed" call :_color %Magenta% "OSPP based Office is not installed"
call :_color %Magenta% "Skipping rebuilding OSPP tokens" call :_color %Magenta% "Skipping rebuilding OSPP tokens"
goto :cleanclipsvc goto :repairoffice
) )
call :_color %Magenta% "Rebuilding OSPP Licensing Tokens" 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 :repairoffice
echo: 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") %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= 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 "%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 "%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 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 set /a counter=0
@ -645,7 +628,7 @@ goto :repairend
echo: echo:
) else ( ) else (
echo: 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..." call :_color %_Yellow% "Press any key to continue..."
echo: echo:
pause >nul pause >nul
@ -691,6 +674,405 @@ echo %line%
echo: echo:
echo: echo:
call :_color %Green% "Finished" 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 :at_done
echo: echo:
echo Press any key to exit... echo Press any key to %_exitmsg%...
pause >nul pause >nul
exit /b exit /b
@ -779,7 +1161,57 @@ del /S /F /Q "%%#*.dat"
) )
exit /b 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 :_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:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -102,13 +105,23 @@ set "_Yellow="Black" "Yellow""
set "nceline=echo: &echo ==== ERROR ==== &echo:" set "nceline=echo: &echo ==== ERROR ==== &echo:"
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
set "line=echo ___________________________________________________________________________________________" set "line=echo ___________________________________________________________________________________________"
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
::======================================================================================================================================== ::========================================================================================================================================
if %winbuild% LSS 10240 ( if %winbuild% LSS 7600 (
%eline% %nceline%
echo Unsupported OS version detected. 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 goto ced_done
) )
@ -151,7 +164,7 @@ goto ced_done
:: Elevate script as admin and pass arguments and preventing loop :: 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 if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
%eline% %eline%
echo This script require administrator privileges. echo This script require administrator privileges.
@ -164,23 +177,39 @@ goto ced_done
cls cls
mode 98, 30 mode 98, 30
call :dk_initial echo:
echo Initializing...
echo:
call :dk_product
call :dk_ckeckwmic
if not defined applist ( :: Show info for potential script stuck scenario
cls
%eline% sc start sppsvc %nul%
echo Not Respoding: !e_wmispp! if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 (
goto ced_done 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 :: Check Windows Edition
set osedition= set osedition=
for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| find /i "Current Edition :"') do set "osedition=%%a" 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%"=="" ( if "%osedition%"=="" (
%eline% %eline%
DISM /English /Online /Get-CurrentEdition %nul% DISM /English /Online /Get-CurrentEdition %nul%
@ -190,10 +219,6 @@ echo OS Edition was not detected properly. Aborting...
goto ced_done goto ced_done
) )
:: Check product name
call :dk_product
:: Check SKU value :: Check SKU value
set osSKU= set osSKU=
@ -213,6 +238,9 @@ echo SKU value was not detected properly. Aborting...
goto ced_done 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 :: Check PowerShell
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( %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 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 :: Get Target editions list
set _target= set _target=
set _dtarget=
set _ptarget=
set _ntarget= 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 goto ced_done
) )
for %%# in ( %_dtarget% %_ptarget% ) do (
echo "!_target!" | find /i " %%# " 1>nul || set "_target=!_target! %%# "
)
if defined _target ( if defined _target (
for %%# in (%_target%) do ( 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 cls
mode 98, 30 mode 98, 30
set inpt= set inpt=
set note=
set counter=0 set counter=0
set verified=0 set verified=0
set targetedition= set targetedition=
%line% %line%
echo: 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% %line%
echo: echo:
for %%A in (%_ntarget%) do ( for %%A in (%_ntarget%) do (
set /a counter+=1 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 echo [!counter!] %%A
)
) else (
echo [!counter!] %%A
)
set targetedition!counter!=%%A set targetedition!counter!=%%A
) )
%line% %line%
echo: echo:
echo [0] Exit echo [0] %_exitmsg%
echo: 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":" call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":"
set /p inpt= set /p inpt=
if "%inpt%"=="" goto cedmenu2 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" ( if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
goto :ced_change_server 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 call :ced_targetSKU %targetedition%
if not defined key if defined targetSKU call :ced_windowskey if not defined key if defined targetSKU call :ced_windowskey
@ -337,7 +411,8 @@ if not defined key (
%eline% %eline%
echo [%targetedition% ^| %winbuild%] echo [%targetedition% ^| %winbuild%]
echo Unable to get product key from pkeyhelper.dll 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 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 :: 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" :: In other cases, editions can be changed instantly with "slmgr /ipk"
:ced_loop
cls cls
if %_changepk%==1 ( if %_changepk%==1 (
echo "%_chan%" | find /i "OEM" >NUL && ( 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. echo Non-OEM keys are required to change from Core to Non-Core Editions.
goto ced_done 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 %%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 ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
if not [%%#]==[] ( if not [%%#]==[] (
%eline% %eline%
echo Internet needs to be disconnected to change edition [%osedition%] to [%targetedition%]
echo Disconnect the Internet and then press any key... echo Disconnect the Internet and then press any key...
pause >nul pause >nul
goto ced_loop goto ced_loop
@ -375,12 +455,20 @@ echo Changing the Current Edition [%osedition%] to [%targetedition%]
echo: echo:
if %_changepk%==1 ( if %_changepk%==1 (
call :dk_color %Green% "You can safely ignore if error appears in the upgrade Window." 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 %_Yellow% "But in that case you must manually reboot the system."
echo: 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." call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
echo: echo:
choice /C:21 /N /M "[1] Continue [2] Exit : " choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : "
if !errorlevel!==1 exit /b 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 :ced_change_server
cls cls
@ -438,7 +554,8 @@ if not defined key (
%eline% %eline%
echo [%targetedition% ^| %winbuild%] echo [%targetedition% ^| %winbuild%]
echo Unable to get product key from pkeyhelper.dll 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 goto ced_done
) )
@ -459,7 +576,7 @@ call :dk_color %Magenta% "Make sure to restart the system."
:ced_done :ced_done
echo: echo:
call :dk_color %_Yellow% "Press any key to exit..." call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
pause >nul pause >nul
exit /b exit /b
@ -509,53 +626,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
) )
exit /b 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 :: 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 :: 1st column = Generic Retail/OEM/MAK/GVLK Key
:: 2nd column = Key Type :: 2nd column = Key Type
:: 3rd column = WMI Edition ID :: 3rd column = WMI Edition ID
@ -644,43 +939,45 @@ exit /b
:changeeditiondata :changeeditiondata
for %%# in ( for %%# in (
44NYX-TKR9D-CCM2D-V6B8F-HQWWR_Volume:MAK_Enterprise 44NYX-TKR9D-CCM2D-V6B8F-HQWWR__Volume:MAK_Enterprise
D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ_____Retail_Starter D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ______Retail_Starter
3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT_Volume:MAK_EnterpriseN 3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__Volume:MAK_EnterpriseN
3NFXW-2T27M-2BDW6-4GHRV-68XRX_____Retail_StarterN 3NFXW-2T27M-2BDW6-4GHRV-68XRX______Retail_StarterN
VK7JG-NPHTM-C97JM-9MPGT-3V66T_____Retail_Professional VK7JG-NPHTM-C97JM-9MPGT-3V66T______Retail_Professional
2B87N-8KFHP-DKV6R-Y2C8J-PKCKT_____Retail_ProfessionalN 2B87N-8KFHP-DKV6R-Y2C8J-PKCKT______Retail_ProfessionalN
4CPRK-NM3K3-X6XXQ-RXX86-WXCHW_____Retail_CoreN 4CPRK-NM3K3-X6XXQ-RXX86-WXCHW______Retail_CoreN
N2434-X9D7W-8PF6X-8DV9T-8TYMD_____Retail_CoreCountrySpecific N2434-X9D7W-8PF6X-8DV9T-8TYMD______Retail_CoreCountrySpecific
BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_____Retail_CoreSingleLanguage BT79Q-G7N6G-PGBYW-4YWX6-6F4BT______Retail_CoreSingleLanguage
YTMG3-N6DKC-DKB77-7M9GH-8HVX7_____Retail_Core YTMG3-N6DKC-DKB77-7M9GH-8HVX7______Retail_Core
XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_OEM:NONSLP_PPIPro XKCNC-J26Q9-KFHD2-FKTHY-KD72Y__OEM:NONSLP_PPIPro
YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_____Retail_Education YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY______Retail_Education
84NGF-MHBT6-FXBX8-QWJK7-DRR8H_____Retail_EducationN 84NGF-MHBT6-FXBX8-QWJK7-DRR8H______Retail_EducationN
KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_Volume:MAK_EnterpriseS_2021 KCNVH-YKWX8-GJJB9-H9FDT-6F7W2__Volume:MAK_EnterpriseS_VB
VBX36-N7DDY-M9H62-83BMJ-CPR42_Volume:MAK_EnterpriseS_2019 VBX36-N7DDY-M9H62-83BMJ-CPR42__Volume:MAK_EnterpriseS_RS5
PN3KR-JXM7T-46HM4-MCQGK-7XPJQ_Volume:MAK_EnterpriseS_2016 PN3KR-JXM7T-46HM4-MCQGK-7XPJQ__Volume:MAK_EnterpriseS_RS1
DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY_Volume:MAK_EnterpriseS_2015 DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY__Volume:MAK_EnterpriseS_TH
RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_Volume:MAK_EnterpriseSN_2021 RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT__Volume:MAK_EnterpriseSN_VB
M33WV-NHY3C-R7FPM-BQGPT-239PG_Volume:MAK_EnterpriseSN_2019 M33WV-NHY3C-R7FPM-BQGPT-239PG__Volume:MAK_EnterpriseSN_RS5
2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_Volume:MAK_EnterpriseSN_2016 2DBW3-N2PJG-MVHW3-G7TDK-9HKR4__Volume:MAK_EnterpriseSN_RS1
NTX6B-BRYC2-K6786-F6MVQ-M7V2X_Volume:MAK_EnterpriseSN_2015 NTX6B-BRYC2-K6786-F6MVQ-M7V2X__Volume:MAK_EnterpriseSN_TH
G3KNM-CHG6T-R36X3-9QDG6-8M8K9_____Retail_ProfessionalSingleLanguage G3KNM-CHG6T-R36X3-9QDG6-8M8K9______Retail_ProfessionalSingleLanguage
HNGCC-Y38KG-QVK8D-WMWRK-X86VK_____Retail_ProfessionalCountrySpecific HNGCC-Y38KG-QVK8D-WMWRK-X86VK______Retail_ProfessionalCountrySpecific
DXG7C-N36C4-C4HTG-X4T3X-2YV77_____Retail_ProfessionalWorkstation DXG7C-N36C4-C4HTG-X4T3X-2YV77______Retail_ProfessionalWorkstation
WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_____Retail_ProfessionalWorkstationN WYPNQ-8C467-V2W6J-TX4WX-WT2RQ______Retail_ProfessionalWorkstationN
8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_____Retail_ProfessionalEducation 8PTT6-RNW4C-6V7J2-C2D3X-MHBPB______Retail_ProfessionalEducation
GJTYN-HDMQY-FRR76-HVGC7-QPF8P_____Retail_ProfessionalEducationN GJTYN-HDMQY-FRR76-HVGC7-QPF8P______Retail_ProfessionalEducationN
C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC_Volume:MAK_EnterpriseG C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC__Volume:MAK_EnterpriseG
46PN6-R9BK9-CVHKB-HWQ9V-MBJY8_Volume:MAK_EnterpriseGN 46PN6-R9BK9-CVHKB-HWQ9V-MBJY8__Volume:MAK_EnterpriseGN
NJCF7-PW8QT-3324D-688JX-2YV66_____Retail_ServerRdsh NJCF7-PW8QT-3324D-688JX-2YV66______Retail_ServerRdsh
V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_____Retail_Cloud V3WVW-N2PV2-CGWC3-34QGF-VMJ2C______Retail_Cloud
NH9J3-68WK7-6FB93-4K3DF-DJ4F6_____Retail_CloudN NH9J3-68WK7-6FB93-4K3DF-DJ4F6______Retail_CloudN
2HN6V-HGTM8-6C97C-RK67V-JQPFD_____Retail_CloudE 2HN6V-HGTM8-6C97C-RK67V-JQPFD______Retail_CloudE
XQQYW-NFFMW-XJPBH-K8732-CKFFD_____OEM:DM_IoTEnterprise XQQYW-NFFMW-XJPBH-K8732-CKFFD______OEM:DM_IoTEnterprise
QPM6N-7J2WJ-P88HH-P3YRH-YY74H_OEM:NONSLP_IoTEnterpriseS QPM6N-7J2WJ-P88HH-P3YRH-YY74H__OEM:NONSLP_IoTEnterpriseS_VB
K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_____Retail_CloudEditionN KBN8V-HFGQ4-MGXVD-347P6-PDQGT_Volume:GVLK_IoTEnterpriseS_NI
KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_____Retail_CloudEdition K9VKN-3BGWV-Y624W-MCRMQ-BHDCD______Retail_CloudEditionN
KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W______Retail_CloudEdition
MPB3G-XNBR7-CC43M-FG64B-F9GBK______Retail_IoTEnterpriseSK
) do ( ) do (
for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C ( for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
@ -689,7 +986,7 @@ set 4th=%%D
if not defined 4th ( if not defined 4th (
set "key=%%A" & set "_chan=%%B" set "key=%%A" & set "_chan=%%B"
) else ( ) 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 :changeeditionserverdata
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) 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 :: 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:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )

@ -72,8 +72,7 @@ if not %errorlevel%==0 (
echo: echo:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -362,7 +361,7 @@ exit /b
function PrintModePerPridFromRegistry function PrintModePerPridFromRegistry
{ {
$vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" $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) If ($vNextPrids -Eq $null)
{ {
Write-Host "No registry keys found." Write-Host "No registry keys found."
@ -457,15 +456,20 @@ function PrintLicensesInformation
$license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License
$decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json
$licenseType = $decodedLicense.LicenseType $licenseType = $decodedLicense.LicenseType
$userId = $decodedLicense.Metadata.UserId If ($null -Ne $decodedLicense.ExpiresOn)
$identitiesRegkey = Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\${userId}*" -ErrorAction Ignore {
$expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48)
}
Else
{
$expiry = New-Object DateTime
}
$licenseState = $null $licenseState = $null
If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter)) If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter))
{ {
$licenseState = "RFM" $licenseState = "RFM"
} }
ElseIf (($decodedLicense.ExpiresOn -Eq $null) -Or ElseIf ((Get-Date) -Lt (Get-Date $expiry))
((Get-Date) -Lt (Get-Date $decodedLicense.ExpiresOn)))
{ {
$licenseState = "Licensed" $licenseState = "Licensed"
} }
@ -483,11 +487,11 @@ function PrintLicensesInformation
Acid = $decodedLicense.Acid; Acid = $decodedLicense.Acid;
LicenseState = $licenseState; LicenseState = $licenseState;
EntitlementStatus = $decodedLicense.Status; EntitlementStatus = $decodedLicense.Status;
EntitlementExpiration = $decodedLicense.ExpiresOn;
ReasonCode = $decodedLicense.ReasonCode; ReasonCode = $decodedLicense.ReasonCode;
NotBefore = $decodedLicense.Metadata.NotBefore; NotBefore = $decodedLicense.Metadata.NotBefore;
NotAfter = $decodedLicense.Metadata.NotAfter; NotAfter = $decodedLicense.Metadata.NotAfter;
NextRenewal = $decodedLicense.Metadata.RenewAfter; NextRenewal = $decodedLicense.Metadata.RenewAfter;
Expiration = $decodedLicense.ExpiresOn;
TenantId = $decodedLicense.Metadata.TenantId; TenantId = $decodedLicense.Metadata.TenantId;
} | ConvertTo-Json } | ConvertTo-Json
} }
@ -502,11 +506,11 @@ function PrintLicensesInformation
DeviceId = $decodedLicense.Metadata.DeviceId; DeviceId = $decodedLicense.Metadata.DeviceId;
LicenseState = $licenseState; LicenseState = $licenseState;
EntitlementStatus = $decodedLicense.Status; EntitlementStatus = $decodedLicense.Status;
EntitlementExpiration = $decodedLicense.ExpiresOn;
ReasonCode = $decodedLicense.ReasonCode; ReasonCode = $decodedLicense.ReasonCode;
NotBefore = $decodedLicense.Metadata.NotBefore; NotBefore = $decodedLicense.Metadata.NotBefore;
NotAfter = $decodedLicense.Metadata.NotAfter; NotAfter = $decodedLicense.Metadata.NotAfter;
NextRenewal = $decodedLicense.Metadata.RenewAfter; NextRenewal = $decodedLicense.Metadata.RenewAfter;
Expiration = $decodedLicense.ExpiresOn;
TenantId = $decodedLicense.Metadata.TenantId; TenantId = $decodedLicense.Metadata.TenantId;
} | ConvertTo-Json } | ConvertTo-Json
} }

@ -55,8 +55,7 @@ if not %errorlevel%==0 (
echo: echo:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -114,22 +113,12 @@ goto done2
::======================================================================================================================================== ::========================================================================================================================================
:: Check desktop location :: Fix for the special characters limitation in path name
set desktop= 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" 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 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" set "_work=%~dp0"
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
@ -137,6 +126,7 @@ set "_batf=%~f0"
set "_batp=%_batf:'=''%" set "_batp=%_batf:'=''%"
set "_pdesk=%desktop:'=''%" set "_pdesk=%desktop:'=''%"
set _PSarg="""%~f0""" -el %_args%
set "_ttemp=%temp%" set "_ttemp=%temp%"
set "_dir=%desktop%\$OEM$\$$\Setup\Scripts" 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 && ( echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
if /i not "!_work!"=="!_ttemp!" ( if /i not "!_work!"=="!_ttemp!" (
%eline% %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 mode 66, 26
if exist "!desktop!\$OEM$\" ( if exist "!desktop!\$OEM$\" (
@ -178,8 +180,6 @@ goto done2
set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd
set KMS38_Activation.cmd=HWID-KMS38_Activation\KMS38_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 Activate.cmd=Online_KMS_Activation\Activate.cmd
set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe
@ -191,8 +191,6 @@ set _nofile=
for %%# in ( for %%# in (
%HWID_Activation.cmd% %HWID_Activation.cmd%
%KMS38_Activation.cmd% %KMS38_Activation.cmd%
%ClipUp.exe%
%gatherosstate.exe%
%Activate.cmd% %Activate.cmd%
%cleanosppx64.exe% %cleanosppx64.exe%
%cleanosppx86.exe% %cleanosppx86.exe%
@ -229,11 +227,11 @@ echo:
echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^) echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
echo: echo:
echo: [6] Exit echo: [0] Exit
echo: ________________________________________________________ echo: ________________________________________________________
echo: echo:
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6]" call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,0]"
choice /C:123456 /N choice /C:123450 /N
set _erl=%errorlevel% set _erl=%errorlevel%
if %_erl%==6 exit /b if %_erl%==6 exit /b
@ -249,14 +247,18 @@ goto :Menu
:hwid :hwid
cls cls
call :prep md "!desktop!\$OEM$\$$\Setup\Scripts"
call :hwidprep pushd "!_work!"
call :pop_d copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
popd
call :export hwid_setup 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 if defined _error goto errorfound
set "_oem=HWID"
set oem=HWID
goto done goto done
:hwid_setup: :hwid_setup:
@ -264,7 +266,7 @@ goto done
fltmc >nul || exit /b fltmc >nul || exit /b
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
cd \ cd \
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
@ -275,14 +277,18 @@ cd \
:kms38 :kms38
cls cls
call :prep md "!desktop!\$OEM$\$$\Setup\Scripts"
call :kms38prep pushd "!_work!"
call :pop_d copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
popd
call :export kms38_setup 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 if defined _error goto errorfound
set "_oem=KMS38"
set oem=KMS38
goto done goto done
:kms38_setup: :kms38_setup:
@ -290,7 +296,7 @@ goto done
fltmc >nul || exit /b fltmc >nul || exit /b
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
cd \ cd \
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
@ -301,14 +307,22 @@ cd \
:kms :kms
cls cls
call :prep md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
call :kmsprep pushd "!_work!"
call :pop_d 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 :export kms_setup
call :kmsprep2
if defined _kerror goto errorfound set _error=
set "_oem=Online KMS" 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 goto done
:kms_setup: :kms_setup:
@ -316,8 +330,7 @@ goto done
fltmc >nul || exit /b fltmc >nul || exit /b
start /b /wait cmd /c "%~dp0Activate.cmd" /rat start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-WindowsOffice
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
cd \ cd \
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
@ -328,17 +341,24 @@ cd \
:hwid_kms :hwid_kms
cls cls
call :prep md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
call :hwidprep pushd "!_work!"
call :kmsprep copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
call :pop_d 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 :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 _error goto errorfound
if defined _kerror goto errorfound
set "_oem=HWID [Windows] + Online KMS [Office]" set oem=HWID [Windows] + Online KMS [Office]
goto done goto done
:hwid_kms_setup: :hwid_kms_setup:
@ -346,10 +366,9 @@ goto done
fltmc >nul || exit /b 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" /KMS-ActAndRenewalTask /KMS-Office
start /b /wait cmd /c "%~dp0Activate.cmd" /o
cd \ cd \
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
@ -360,17 +379,24 @@ cd \
:kms38_kms :kms38_kms
cls cls
call :prep md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
call :kms38prep pushd "!_work!"
call :kmsprep copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
call :pop_d 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 :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 _error goto errorfound
if defined _kerror goto errorfound
set "_oem=KMS38 [Windows] + Online KMS [Office]" set oem=KMS38 [Windows] + Online KMS [Office]
goto done goto done
:kms38_kms_setup: :kms38_kms_setup:
@ -378,10 +404,9 @@ goto done
fltmc >nul || exit /b 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" /KMS-ActAndRenewalTask /KMS-Office
start /b /wait cmd /c "%~dp0Activate.cmd" /o
cd \ cd \
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
@ -397,11 +422,16 @@ goto :done2
:done :done
echo _______________________________________________________ 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." 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 :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 :: Extract the text from batch script without character and file encoding issue
:export :export

@ -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.
=================================================================================

@ -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:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -69,7 +68,7 @@ popd
cls cls
color 07 color 07
title Install Windows Retail/OEM/MAK Key title Install Windows HWID Key
set _args= set _args=
set _elev= set _elev=
@ -80,7 +79,7 @@ if defined _args set _args=%_args:"=%
if defined _args ( if defined _args (
for %%A in (%_args%) do ( for %%A in (%_args%) do (
if /i "%%A"=="-el" set _elev=1 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 "nceline=echo: &echo ==== ERROR ==== &echo:"
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
set "line=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 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:#"=="" ( for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
%nceline% %nceline%
echo Unable to find powershell.exe in the system. 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 :: 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 if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
%eline% %eline%
echo This script require administrator privileges. echo This script require administrator privileges.
@ -172,13 +178,11 @@ goto ins_done
cls cls
mode 98, 30 mode 98, 30
echo:
call :dk_initial echo Initializing...
:: Check product name
cls
call :dk_product call :dk_product
call :dk_ckeckwmic
call :dk_actids
::======================================================================================================================================== ::========================================================================================================================================
@ -206,34 +210,23 @@ goto ins_done
:: Detect key :: Detect key
set key= set key=
set pkey= set channel=
set _chan= set actidnotfound=
if defined applist call :hwiddata attempt1 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
if not defined key call :hwiddata attempt2
set pkey= if defined applist call :hwidkey key attempt1
if not defined key call :dk_hwidkey %nul% if not defined key call :hwidkey key attempt2
if not defined key ( if not defined key (
%eline% %eline%
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
echo PowerShell is not responding properly. echo Unable to find this product in the HWID supported product list.
echo: echo Make sure you are using updated version of the script.
) echo https://massgrave.dev
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.
)
goto ins_done goto ins_done
) )
if defined key call :dk_pkeychannel %key%
if defined pkeychannel set _chan=%pkeychannel% Key
::======================================================================================================================================== ::========================================================================================================================================
if %_unattended%==1 goto insertkey if %_unattended%==1 goto insertkey
@ -241,7 +234,7 @@ if %_unattended%==1 goto insertkey
cls cls
%line% %line%
echo: echo:
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan% echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %channel% Key
echo [%key%] echo [%key%]
%line% %line%
echo: echo:
@ -250,10 +243,9 @@ echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
echo Restart the system to resolve it echo Restart the system to resolve it
echo: echo:
) )
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit" call :dk_color %_Green% "Press [1] to Continue or [0] to %_exitmsg%"
choice /C:21 /N choice /C:01 /N
if %errorlevel%==1 exit /b if %errorlevel%==1 exit /b
cls
::======================================================================================================================================== ::========================================================================================================================================
@ -270,20 +262,17 @@ set error_code=%errorlevel%
cmd /c exit /b %error_code% cmd /c exit /b %error_code%
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" 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 ( if %error_code% EQU 0 (
call :dk_refresh call :dk_refresh
echo:
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
echo Installing %_chan% [%key%]
echo:
call :dk_color %Green% "[Successful]" call :dk_color %Green% "[Successful]"
) else ( ) else (
%eline%
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
echo Installing %_chan% [%key%]
echo:
call :dk_color %Red% "[Unsuccessful] %error_code%" 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% %line%
@ -293,7 +282,7 @@ if not defined applist echo Not Respoding: %e_wmispp%
echo: echo:
if %_unattended%==1 timeout /t 2 & exit /b 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 pause >nul
exit /b exit /b
@ -343,93 +332,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
) )
exit /b 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 :dk_color
@ -446,76 +348,77 @@ exit /b
:: 1st column = Activation ID :: 1st column = Activation ID
:: 2nd column = Generic Retail/OEM/MAK Key :: 2nd column = Generic Retail/OEM/MAK Key
:: 3rd column = SKU ID :: 3rd column = SKU ID
:: 4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working :: 4th column = Key Type
:: 5th column = Key Type :: 5th column = WMI Edition ID
:: 6th column = WMI Edition ID :: 6th column = Version name incase same Edition ID is used in different OS versions with different key
:: 7th column = Version name incase same Edition ID is used in different OS versions with different key
:: Separator = _ :: Separator = _
:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
:hwidkey
:hwiddata
for %%# in ( for %%# in (
8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_Enterprise 8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_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_Volume:MAK_EnterpriseN
c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN 4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_____Retail_Professional
211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN 9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_____Retail_ProfessionalN
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_____Retail_CoreN
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN 1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_____Retail_CoreCountrySpecific
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN 3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_____Retail_CoreSingleLanguage
1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific 2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_____Retail_Core
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage 2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_OEM:NONSLP_PPIPro
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_____Retail_Education
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_____Retail_EducationN
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_Volume:MAK_EnterpriseS_VB
c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_OEM:NONSLP_EnterpriseS_RS5
cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021 706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_OEM:NONSLP_EnterpriseS_RS1
d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019 faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_OEM:NONSLP_EnterpriseS_TH
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016 2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_Volume:MAK_EnterpriseSN_VB
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_EnterpriseS_2015 e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_Volume:MAK_EnterpriseSN_RS5
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021 3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_Volume:MAK_EnterpriseSN_RS1
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019 60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_Volume:MAK_EnterpriseSN_TH
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016 eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_____Retail_ProfessionalWorkstation
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015 89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_____Retail_ProfessionalWorkstationN
a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage 62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_____Retail_ProfessionalEducation
f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific 13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_____Retail_ProfessionalEducationN
eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_____Retail_ServerRdsh
89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_____Retail_Cloud
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_____Retail_CloudN
13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN 8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_____OEM:DM_IoTEnterprise
1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_OEM:NONSLP_IoTEnterpriseS_VB
8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_EnterpriseGN d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_____Retail_CloudEditionN
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh 92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_____Retail_CloudEdition
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_205_OEM:NONSLP_IoTEnterpriseSK
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
) do ( ) 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 && ( echo "!applist!" | find /i "%%A" 1>nul && (
set key=%%B set key=%%B
set channel=%%D
) )
) )
if %1==attempt2 if not defined key ( REM Detect key attempt 2
set 7th=%%G
if not defined 7th ( if "%2"=="attempt2" if not defined key (
if %winbuild% GTR 19044 call :dk_hwidkey %nul% set actidnotfound=1
if not defined key set key=%%B set 6th=%%F
if not defined 6th (
set key=%%B
set channel=%%D
) else ( ) else (
echo "%winos%" | find /i "%%G" 1>nul && ( echo "%branch%" | find /i "%%F" 1>nul && (
if %winbuild% GTR 19044 call :dk_hwidkey %nul% set key=%%B
if not defined key set key=%%B set channel=%%D
) )
) )
) )
)
) )
) )
exit /b exit /b

@ -61,8 +61,7 @@ if not %errorlevel%==0 (
echo: echo:
echo Error: This is not a correct file. It has LF line ending issue. echo Error: This is not a correct file. It has LF line ending issue.
echo: echo:
echo Press any key to exit... ping 127.0.0.1 -n 6 > nul
pause >nul
popd popd
exit /b exit /b
) )
@ -74,13 +73,15 @@ cls
color 07 color 07
title Online KMS Activation title Online KMS Activation
:: You are not supposed to edit anything below this.
set WMI_VBS=0 set WMI_VBS=0
set _Debug=0 set _Debug=0
set Silent=0 set Silent=0
set Logger=0 set Logger=0
set AutoR2V=1 set AutoR2V=1
set SkipKMS38=1 set SkipKMS38=1
set vNextOverride=1
set ActWindows=1 set ActWindows=1
set ActOffice=1 set ActOffice=1
@ -90,6 +91,7 @@ set _elev=
set _renetask= set _renetask=
set _renacttask= set _renacttask=
set _unattended= set _unattended=
set _unattendedact=
set _args=%* set _args=%*
if defined _args set _args=%_args:"=% if defined _args set _args=%_args:"=%
@ -99,14 +101,15 @@ if "%_args%"=="-el" set _unattended=
for %%A in (%_args%) do ( for %%A in (%_args%) do (
if /i "%%A"=="-el" (set _elev=1 if /i "%%A"=="-el" (set _elev=1
) else if /i "%%A"=="/rt" (set _renetask=1 ) else if /i "%%A"=="/KMS-RenewalTask" (set _renetask=1
) else if /i "%%A"=="/rat" (set _renacttask=1 ) else if /i "%%A"=="/KMS-ActAndRenewalTask" (set _renacttask=1
) else if /i "%%A"=="/uni" (set _uni=1 ) else if /i "%%A"=="/KMS-Uninstall" (set _uni=1
) else if /i "%%A"=="/w" (set ActWindows=1&set ActOffice=0 ) else if /i "%%A"=="/KMS-Windows" (set ActWindows=1&set ActOffice=0&set _unattendedact=1
) else if /i "%%A"=="/o" (set ActWindows=0&set ActOffice=1 ) else if /i "%%A"=="/KMS-Office" (set ActWindows=0&set ActOffice=1&set _unattendedact=1
) else if /i "%%A"=="/wo" (set ActWindows=1&set ActOffice=1 ) else if /i "%%A"=="/KMS-WindowsOffice" (set ActWindows=1&set ActOffice=1&set _unattendedact=1
) else if /i "%%A"=="/d" (set _Debug=1 ) else if /i "%%A"=="/KMS-KeepvNext" (set vNextOverride=0
) else if /i "%%A"=="/l" (set Logger=1&set Silent=1 ) 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 _PSarg="""%~f0""" -el %_args%
set "_ttemp=%temp%" set "_ttemp=%temp%"
set "_Local=%LocalAppData%"
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
@ -177,7 +181,7 @@ goto Done
:: Elevate script as admin and pass arguments and preventing loop :: 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 if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
%nceline% %nceline%
echo This script require administrator privileges. 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:#"=="" ( for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
%nceline% %nceline%
echo Unable to find wmic.exe in the system. 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 || ( wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul || (
%nceline% %nceline%
echo wmic.exe is not responding in the system. echo wmic.exe is not responding in the system.
echo Check this page for help https://massgrave.dev/troubleshoot
echo Aborting... echo Aborting...
goto Done 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) 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 ( if %_WSH% EQU 0 (
%nceline% reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
echo Windows Script Host is disabled. reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
echo It is required for this script to work. if defined notx86 reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul%
echo Aborting...
goto Done
) )
::======================================================================================================================================== ::========================================================================================================================================
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 _uni goto _Complete_Uninstall
if defined _renacttask set ActTask=1&goto:RenTask if defined _renetask set ActTask=&call:RenTask&timeout /t 2
if defined _renetask set ActTask=&goto:RenTask 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 :_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= set _tskinstalled=
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && (
set _tskinstalled=1 set _tskinstalled=1
@ -251,6 +267,7 @@ set _oldtsk=1
if defined _unattended ( if defined _unattended (
call :Activation_Start call :Activation_Start
timeout /t 2
goto Done goto Done
) )
@ -265,15 +282,9 @@ echo.
echo. echo.
echo. ______________________________________________________________ echo. ______________________________________________________________
echo. echo.
if %_Debug%==0 (
echo. [1] Activate - Windows echo. [1] Activate - Windows
echo. [2] Activate - Office echo. [2] Activate - Office
echo. [3] Activate - All 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. echo.
if defined _tskinstalled call :_color2 %_White% " [4] Install Auto-Renewal " %_Green% "[Installed]" 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]" 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. [5] Uninstall
echo. _______________________________________________ echo. _______________________________________________
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. echo.
echo. [7] %_exitmsg% echo. [0] %_exitmsg%
echo. ______________________________________________________________ echo. ______________________________________________________________
echo. echo.
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7]" call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,0]"
choice /C:1234567 /N choice /C:12345670 /N
set _el=%errorlevel% 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%==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%==5 call:_Complete_Uninstall&cls&goto _KMS_Menu
if %_el%==4 set ActTask=&call:RenTask&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%) 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 "_Null=1>nul 2>nul"
set KMS_Port=1688 set KMS_Port=1688
if %_Debug% EQU 1 set _unattended=1 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 "_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 "_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 "_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 "_mO14c=Detected Office 2010 C2R Retail is not supported by this script"
set "_mO14m=Detected Office 2010 MSI Retail is not supported by KMS_VL_ALL" set "_mO14m=Detected Office 2010 MSI Retail is not supported by this script"
set "_mO15m=Detected Office 2013 MSI Retail is not supported by KMS_VL_ALL" set "_mO15m=Detected Office 2013 MSI Retail is not supported by this script"
set "_mO16m=Detected Office 2016 MSI Retail is not supported by KMS_VL_ALL" set "_mO16m=Detected Office 2016 MSI Retail is not supported by this script"
set "_mOuwp=Detected Office 365/2016 UWP is not supported by KMS_VL_ALL" 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 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 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 set LR16Ids=%LV16Ids%,Professional,HomeBusiness,HomeStudent,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud
@ -647,7 +678,7 @@ if %ActWindows% EQU 0 (
echo.&echo %_winos% %nKMS% echo.&echo %_winos% %nKMS%
if defined _eval echo %nEval% if defined _eval echo %nEval%
) else ( ) 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 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)) 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_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 Off1ce=1
set _sC2R=sppoff set _sC2R=sppoff
set _fC2R=ReturnSPP 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 call set /a prr_off21+=1
find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_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 call set /a prr_off21+=1
find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_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 call set /a prr_off19+=1
find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_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 call set /a prr_off19+=1
find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_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_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 %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 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 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 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) 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%" 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 find /i "Office16MondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off16=1
) )
set run_off15=0 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 %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%)
) )
if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( 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 %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%) 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 if not %xOS%==x86 if exist "%ProgramFiles(x86)%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1
exit /b 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 :insKey
set S_OK=1 set S_OK=1
echo. echo.
@ -1609,22 +1657,6 @@ echo Error: %_sps% WMI version is not detected
call :CheckWS call :CheckWS
goto :%_fC2R% 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 _Retail=0
set "_ocq=ApplicationID='%_oApp%' AND LicenseStatus='1' AND PartialProductKey is not NULL" 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" 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 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 for %%a in (%_Suites%) do set _%%a=0
echo. echo.
echo Microsoft Office is activated with a subscription. echo Microsoft Office is activated with a vNext license.
) )
if %sub_proj% EQU 1 ( if %sub_proj% EQU 1 (
for %%a in (%_PrjSKU%) do set _%%a=0 for %%a in (%_PrjSKU%) do set _%%a=0
echo. 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 for %%a in (%_VisSKU%) do set _%%a=0
echo. 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 ( for %%a in (%_RetIds%,ProPlus) do if !_%%a! EQU 1 (
@ -2980,25 +3012,45 @@ exit /b
:_errorinfo :_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 call :CheckFR
if !server_num! GTR %max_servers% ( set _intcon=
ping -n 1 one.one.one.one 1>nul || ping -n 1 resolver1.opendns.com 1>nul || ( for %%a in (dns.msftncsi.com licensing.mp.microsoft.com) do (
call :_color %_Red% "Unable to test KMS servers due to restricted or no Internet." for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _intcon=1)
echo. )
%msg1%
exit /b 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 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 exit /b
::======================================================================================================================================== ::========================================================================================================================================
@ -3078,7 +3130,7 @@ if %winbuild% GEQ 9600 (
%nul% reg query "HKLM\%SPPk%\%_wApp%" && ( %nul% reg query "HKLM\%SPPk%\%_wApp%" && (
set error_=9 set error_=9
echo Failed to completely clear KMS Cache. 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. echo Cleared KMS Cache successfully.
) )
@ -3158,7 +3210,7 @@ call :_color %Green% "Online KMS Complete Uninstall was done successfully."
echo __________________________________________________________________________________________ echo __________________________________________________________________________________________
) )
if defined _unattended exit /b if defined _unattended timeout /t 2 & exit /b
echo. echo.
call :_color %_Yellow% "Press any key to go back..." call :_color %_Yellow% "Press any key to go back..."
@ -3942,7 +3994,7 @@ if not [%KMS_IP%]==[!KMS_IP!] exit /b
goto :_taskgetserv goto :_taskgetserv
) )
:: Ver:1.6 :: Ver:1.7
::======================================================================================================================================== ::========================================================================================================================================
:_extracttask: :_extracttask: