mirror of
https://github.com/massgravel/Microsoft-Activation-Scripts.git
synced 2024-11-27 10:48:33 +01:00
Compare commits
4 commits
306372d5a2
...
a04c389280
Author | SHA1 | Date | |
---|---|---|---|
|
a04c389280 | ||
|
b3d7156f13 | ||
|
51735d8e0f | ||
|
e81490b89c |
15 changed files with 5152 additions and 1942 deletions
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,7 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: massgrave[.]dev
|
:: Homepage: mass grave[.]dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
@ -26,6 +26,13 @@ set _NoEditionChange=0
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -33,6 +40,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f 1>nul
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -49,22 +60,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -94,21 +117,25 @@ for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
set winbuild=1
|
set "nul1=1>nul"
|
||||||
|
set "nul2=2>nul"
|
||||||
|
set "nul6=2^>nul"
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
|
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
set "Red="41;97m""
|
set "Red="41;97m""
|
||||||
set "Gray="100;97m""
|
set "Gray="100;97m""
|
||||||
set "Green="42;97m""
|
set "Green="42;97m""
|
||||||
set "Magenta="45;97m""
|
set "Blue="44;97m""
|
||||||
set "_White="40;37m""
|
set "_White="40;37m""
|
||||||
set "_Green="40;92m""
|
set "_Green="40;92m""
|
||||||
set "_Yellow="40;93m""
|
set "_Yellow="40;93m""
|
||||||
|
@ -116,7 +143,7 @@ set "_Yellow="40;93m""
|
||||||
set "Red="Red" "white""
|
set "Red="Red" "white""
|
||||||
set "Gray="Darkgray" "white""
|
set "Gray="Darkgray" "white""
|
||||||
set "Green="DarkGreen" "white""
|
set "Green="DarkGreen" "white""
|
||||||
set "Magenta="Darkmagenta" "white""
|
set "Blue="Blue" "white""
|
||||||
set "_White="Black" "Gray""
|
set "_White="Black" "Gray""
|
||||||
set "_Green="Black" "Green""
|
set "_Green="Black" "Green""
|
||||||
set "_Yellow="Black" "Yellow""
|
set "_Yellow="Black" "Yellow""
|
||||||
|
@ -124,13 +151,19 @@ 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:"
|
||||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
if %~z0 GEQ 200000 (
|
||||||
|
set "_exitmsg=Go back"
|
||||||
|
set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
|
||||||
|
) else (
|
||||||
|
set "_exitmsg=Exit"
|
||||||
|
set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
|
||||||
|
)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
if %winbuild% LSS 10240 (
|
||||||
%eline%
|
%eline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo HWID Activation is supported only for Windows 10/11.
|
echo HWID Activation is supported only for Windows 10/11.
|
||||||
echo Use Online KMS Activation option.
|
echo Use Online KMS Activation option.
|
||||||
goto dk_done
|
goto dk_done
|
||||||
|
@ -167,7 +200,7 @@ setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%eline%
|
||||||
echo Script is launched from the temp folder,
|
echo Script is launched from the temp folder,
|
||||||
|
@ -182,8 +215,8 @@ goto dk_done
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
%nul1% fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%eline%
|
%eline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -192,10 +225,29 @@ goto dk_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
if %_unattended%==1 set quedit=1
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode 102, 34
|
mode 108, 34
|
||||||
title HWID Activation
|
title HWID Activation
|
||||||
|
|
||||||
|
:: Start Windows update service at the beginning and in later checks as well, because in some normal conditions one kick is not enough
|
||||||
|
|
||||||
|
sc start wuauserv %nul%
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
echo Initializing...
|
echo Initializing...
|
||||||
call :dk_product
|
call :dk_product
|
||||||
|
@ -235,7 +287,7 @@ cls
|
||||||
:: Check Evaluation version
|
:: Check Evaluation version
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find /i "Eval" 1>nul && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && (
|
||||||
%eline%
|
%eline%
|
||||||
echo [%winos% ^| %winbuild%]
|
echo [%winos% ^| %winbuild%]
|
||||||
echo:
|
echo:
|
||||||
|
@ -243,7 +295,7 @@ echo Evaluation Editions cannot be activated.
|
||||||
echo You need to install full version of %winos%
|
echo You need to install full version of %winos%
|
||||||
echo:
|
echo:
|
||||||
echo Download it from here,
|
echo Download it from here,
|
||||||
echo https://massgrave.dev/genuine-installation-media.html
|
echo https://%mas%/genuine-installation-media.html
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -253,14 +305,23 @@ goto dk_done
|
||||||
:: Check SKU value / Check in multiple places to find Edition change corruption
|
:: Check SKU value / Check in multiple places to find Edition change corruption
|
||||||
|
|
||||||
set osSKU=
|
set osSKU=
|
||||||
set regSKU=
|
set slcSKU=
|
||||||
set wmiSKU=
|
set wmiSKU=
|
||||||
|
set regSKU=
|
||||||
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo)
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3);
|
||||||
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%d1% $Sku = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformationDWORD('%info%', [ref]$Sku); $Sku
|
||||||
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set slcSKU=%%s)
|
||||||
|
if "%slcSKU%"=="0" set slcSKU=
|
||||||
|
if 1%slcSKU% NEQ +1%slcSKU% set slcSKU=
|
||||||
|
|
||||||
set osSKU=%wmiSKU%
|
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn %nul6%') do set "regSKU=%%a"
|
||||||
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
|
||||||
|
set osSKU=%slcSKU%
|
||||||
|
if not defined osSKU set osSKU=%wmiSKU%
|
||||||
if not defined osSKU set osSKU=%regSKU%
|
if not defined osSKU set osSKU=%regSKU%
|
||||||
|
|
||||||
if not defined osSKU (
|
if not defined osSKU (
|
||||||
|
@ -276,7 +337,8 @@ set error=
|
||||||
cls
|
cls
|
||||||
echo:
|
echo:
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
||||||
echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%]
|
for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if "%%j"=="" (set fullbuild=%%i) else (set fullbuild=%%i.%%j)
|
||||||
|
echo Checking OS Info [%winos% ^| %fullbuild% ^| %arch%]
|
||||||
|
|
||||||
:: Check Internet connection
|
:: Check Internet connection
|
||||||
|
|
||||||
|
@ -302,8 +364,8 @@ call :dk_color %Red% "Checking Internet Connection [Not Connected]"
|
||||||
:: Check Windows Script Host
|
:: Check Windows Script Host
|
||||||
|
|
||||||
set _WSH=1
|
set _WSH=1
|
||||||
reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
|
reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled %nul2% | find /i "0x0" %nul1% && (set _WSH=0)
|
||||||
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 %nul2% | find /i "0x0" %nul1% && (set _WSH=0)
|
||||||
|
|
||||||
if %_WSH% EQU 0 (
|
if %_WSH% EQU 0 (
|
||||||
reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
|
reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
|
||||||
|
@ -331,24 +393,29 @@ call :dk_errorcheck
|
||||||
:: Check Windows updates and store app blockers
|
:: Check Windows updates and store app blockers
|
||||||
|
|
||||||
set updatesblock=
|
set updatesblock=
|
||||||
echo: %serv_ste% | findstr /i "wuauserv" %nul% && set updatesblock=1
|
echo: %serv_cor% %serv_ste% | findstr /i "wuauserv" %nul% && set updatesblock=1
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\UsoSvc /v Start 2^>nul') do if /i %%b equ 0x4 set updatesblock=1
|
|
||||||
if exist "%SystemRoot%\System32\WaaSMedicSvc.dll" (
|
sc start UsoSvc %nul%
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc /v Start 2^>nul') do if /i %%b equ 0x4 set updatesblock=1
|
if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 set updatesblock=1
|
||||||
|
|
||||||
|
if %winbuild% GEQ 17134 (
|
||||||
|
sc start WaaSMedicSvc %nul%
|
||||||
|
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 set updatesblock=1
|
||||||
)
|
)
|
||||||
|
|
||||||
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v SettingsPageVisibility 2>nul | find /i "windowsupdate" %nul% && set updatesblock=1
|
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v SettingsPageVisibility %nul2% | find /i "windowsupdate" %nul% && set updatesblock=1
|
||||||
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdateSysprepInProgress %nul% && set updatesblock=1
|
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdateSysprepInProgress %nul% && set updatesblock=1
|
||||||
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /s 2>nul | findstr /i "NoAutoUpdate DisableWindowsUpdateAccess" %nul% && set updatesblock=1
|
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /s %nul2% | findstr /i "NoAutoUpdate DisableWindowsUpdateAccess" %nul% && set updatesblock=1
|
||||||
|
|
||||||
if defined updatesblock (
|
if defined updatesblock (
|
||||||
call :dk_color %Gray% "Checking Windows Update Blockers [Found]"
|
call :dk_color %Gray% "Checking Windows Update Blockers [Found]"
|
||||||
if defined applist echo: %serv_e% | find /i "wuauserv" %nul% && (
|
if defined applist echo: %serv_e% | find /i "wuauserv" %nul% && (
|
||||||
call :dk_color %Magenta% "Windows Update Service [wuauserv] is not working. Enable it incase if you have disabled it."
|
call :dk_color %Blue% "Windows Update is not working. Enable it incase if you have disabled it."
|
||||||
|
reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v WubLock %nul% && call :dk_color %Blue% "Sordum Windows Update Blocker tool has been used to block updates."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps 2>nul | find /i "0x1" %nul% && (
|
reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && (
|
||||||
call :dk_color %Gray% "Checking Store App Blocker [Found]"
|
call :dk_color %Gray% "Checking Store App Blocker [Found]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -359,15 +426,15 @@ call :dk_color %Gray% "Checking Store App Blocker [Found]"
|
||||||
set key=
|
set key=
|
||||||
set altkey=
|
set altkey=
|
||||||
set changekey=
|
set changekey=
|
||||||
set curedition=
|
set altapplist=
|
||||||
set altedition=
|
set altedition=
|
||||||
set notworking=
|
set notworking=
|
||||||
set actidnotfound=
|
|
||||||
|
|
||||||
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 defined applist call :hwiddata key
|
||||||
|
if not defined key (
|
||||||
if defined applist call :hwiddata key attempt1
|
for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1]);"') do (set altapplist=%%a)
|
||||||
if not defined key call :hwiddata key attempt2
|
if defined altapplist call :hwiddata key
|
||||||
|
)
|
||||||
|
|
||||||
if defined notworking call :hwidfallback
|
if defined notworking call :hwidfallback
|
||||||
if not defined key call :hwidfallback
|
if not defined key call :hwidfallback
|
||||||
|
@ -376,10 +443,6 @@ if defined altkey (set key=%altkey%&set changekey=1&set notworking=)
|
||||||
|
|
||||||
if defined notworking if defined notfoundaltactID (
|
if defined notworking if defined notfoundaltactID (
|
||||||
call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]"
|
call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]"
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
|
||||||
call :dk_color %Magenta% "Evaluation Windows Found. Install Full version of %winos%"
|
|
||||||
call :dk_color %Magenta% "Download it from https://massgrave.dev/genuine-installation-media.html"
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if not defined key (
|
if not defined key (
|
||||||
|
@ -387,7 +450,7 @@ if not defined key (
|
||||||
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
||||||
echo Unable to find this product in the supported product list.
|
echo Unable to find this product in the supported product list.
|
||||||
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
|
echo https://%mas%
|
||||||
echo:
|
echo:
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
|
@ -400,7 +463,7 @@ if defined notworking set error=1
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
if defined changekey (
|
if defined changekey (
|
||||||
call :dk_color %Magenta% "[%altedition%] Edition product key will be used to enable HWID activation."
|
call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable HWID activation."
|
||||||
echo:
|
echo:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -417,8 +480,8 @@ echo Installing Generic Product Key [%key%] [Successful]
|
||||||
) else (
|
) else (
|
||||||
call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%"
|
call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%"
|
||||||
if not defined error (
|
if not defined error (
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
if defined altapplist call :dk_color %Red% "Activation ID not found for this key."
|
||||||
if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key. Make sure you are using updated version of MAS."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
set showfix=1
|
set showfix=1
|
||||||
)
|
)
|
||||||
set error=1
|
set error=1
|
||||||
|
@ -428,8 +491,8 @@ set error=1
|
||||||
|
|
||||||
:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries
|
:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries
|
||||||
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name 2^>nul') do set "name=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b"
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation 2^>nul') do set "nation=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b"
|
||||||
|
|
||||||
set regionchange=
|
set regionchange=
|
||||||
if not "%name%"=="US" (
|
if not "%name%"=="US" (
|
||||||
|
@ -448,6 +511,11 @@ call :dk_color %Red% "Changing Windows Region To USA [Failed]"
|
||||||
:: In some cases clipup -v -o method fails and in some cases service restart method fails as well
|
:: In some cases clipup -v -o method fails and in some cases service restart method fails as well
|
||||||
:: To maximize success rate and get better error details, script will install tickets two times (service restart + clipup -v -o)
|
:: To maximize success rate and get better error details, script will install tickets two times (service restart + clipup -v -o)
|
||||||
|
|
||||||
|
if not exist %SystemRoot%\system32\ClipUp.exe (
|
||||||
|
call :dk_color %Red% "Checking ClipUp.exe File [Not found, aborting the process]"
|
||||||
|
goto :dl_final
|
||||||
|
)
|
||||||
|
|
||||||
set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
|
set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
|
||||||
if not exist "%tdir%\" md "%tdir%\" %nul%
|
if not exist "%tdir%\" md "%tdir%\" %nul%
|
||||||
|
|
||||||
|
@ -460,7 +528,7 @@ call :hwiddata ticket
|
||||||
copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
|
copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
|
||||||
|
|
||||||
if not exist "%tdir%\GenuineTicket.xml" (
|
if not exist "%tdir%\GenuineTicket.xml" (
|
||||||
call :dk_color %Red% "Generating GenuineTicket.xml [Failed]"
|
call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]"
|
||||||
echo [%encoded%]
|
echo [%encoded%]
|
||||||
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
||||||
goto :dl_final
|
goto :dl_final
|
||||||
|
@ -488,6 +556,12 @@ clipup -v -o
|
||||||
|
|
||||||
set rebuildinfo=
|
set rebuildinfo=
|
||||||
|
|
||||||
|
if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat (
|
||||||
|
set error=1
|
||||||
|
set rebuildinfo=1
|
||||||
|
call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]"
|
||||||
|
)
|
||||||
|
|
||||||
%_xmlexist% (
|
%_xmlexist% (
|
||||||
set error=1
|
set error=1
|
||||||
set rebuildinfo=1
|
set rebuildinfo=1
|
||||||
|
@ -502,7 +576,7 @@ call :dk_color %Red% "Checking Ticket Migration [Failed]"
|
||||||
|
|
||||||
if defined applist if not defined showfix if defined rebuildinfo (
|
if defined applist if not defined showfix if defined rebuildinfo (
|
||||||
set showfix=1
|
set showfix=1
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
||||||
|
@ -522,6 +596,8 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license.
|
||||||
goto :dl_final
|
goto :dl_final
|
||||||
)
|
)
|
||||||
|
|
||||||
|
::==========================================================================================================================================
|
||||||
|
|
||||||
:: Extended licensing servers tests incase error not found and activation failed
|
:: Extended licensing servers tests incase error not found and activation failed
|
||||||
|
|
||||||
set resfail=
|
set resfail=
|
||||||
|
@ -538,21 +614,23 @@ set "d1=Add-Type -AssemblyName System.Net.Http;"
|
||||||
set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();"
|
set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();"
|
||||||
set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();"
|
set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();"
|
||||||
set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()"
|
set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()"
|
||||||
%psc% "!tls! !d1!" 2>nul | findstr /i "PurchaseFD DeviceAddResponse" 1>nul || set resfail=1
|
%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1
|
||||||
)
|
)
|
||||||
|
|
||||||
if not defined resfail (
|
if not defined resfail (
|
||||||
%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" 1>nul || set resfail=1
|
%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1
|
||||||
)
|
)
|
||||||
|
|
||||||
if defined resfail (
|
if defined resfail (
|
||||||
set error=1
|
set error=1
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]"
|
call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]"
|
||||||
call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/licensing-servers-issue"
|
call :dk_color2 %Blue% "Check this page for help" %_Yellow% " https://%mas%/licensing-servers-issue"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
::==========================================================================================================================================
|
||||||
|
|
||||||
:: Clear store ID related registry to fix activation incase error not found
|
:: Clear store ID related registry to fix activation incase error not found
|
||||||
|
|
||||||
if not defined error (
|
if not defined error (
|
||||||
|
@ -573,17 +651,30 @@ call :dk_act
|
||||||
call :dk_checkperm
|
call :dk_checkperm
|
||||||
)
|
)
|
||||||
|
|
||||||
|
REM Check Internet related error codes
|
||||||
|
|
||||||
|
if not defined error if not defined _perm (
|
||||||
|
echo "%error_code%" | findstr /i "0x80072e 0x80072f" %nul% && (
|
||||||
|
set error=1
|
||||||
|
echo:
|
||||||
|
call :dk_color %Red% "Checking Internet Issues [Found] [%error_code%]"
|
||||||
|
call :dk_color2 %Blue% "Check this page for help" %_Yellow% " https://%mas%/licensing-servers-issue"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
::==========================================================================================================================================
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
if defined _perm (
|
if defined _perm (
|
||||||
call :dk_color %Green% "%winos% is permanently activated with a digital license."
|
call :dk_color %Green% "%winos% is permanently activated with a digital license."
|
||||||
) else (
|
) else (
|
||||||
call :dk_color %Red% "Activation Failed %error_code%"
|
call :dk_color %Red% "Activation Failed %error_code%"
|
||||||
if defined notworking (
|
if defined notworking (
|
||||||
call :dk_color %Magenta% "At the time of writing this, HWID Activation was not supported for this product."
|
call :dk_color %Blue% "At the time of writing this, HWID Activation was not supported for this product."
|
||||||
call :dk_color %Magenta% "Use KMS38 Activation option."
|
call :dk_color %Blue% "Use KMS38 Activation option."
|
||||||
) else (
|
) else (
|
||||||
if not defined error call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
if not defined error call :dk_color %Blue% "%_fixmsg%"
|
||||||
call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot"
|
call :dk_color2 %Blue% "Check this page for help" %_Yellow% " https://%mas%/troubleshoot"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -612,8 +703,8 @@ goto :dk_done
|
||||||
|
|
||||||
:dk_checkperm
|
:dk_checkperm
|
||||||
|
|
||||||
if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name /value 2>nul | findstr /i "Windows" 1>nul && set _perm=1||set _perm=
|
if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm=
|
||||||
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name | %% {echo ('Name='+$_)}" 2>nul | findstr /i "Windows" 1>nul && set _perm=1||set _perm=
|
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm=
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:: Refresh license status
|
:: Refresh license status
|
||||||
|
@ -642,18 +733,49 @@ exit /b
|
||||||
:dk_actids
|
:dk_actids
|
||||||
|
|
||||||
set applist=
|
set applist=
|
||||||
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" %nul6%')"
|
||||||
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')"
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:: Get Activation IDs from licensing files if not found through WMI
|
||||||
|
|
||||||
|
:getactivationid:
|
||||||
|
$folderPath = "$env:windir\System32\spp\tokens\skus"
|
||||||
|
$files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms"
|
||||||
|
$guids = @()
|
||||||
|
foreach ($file in $files) {
|
||||||
|
$content = Get-Content -Path $file.FullName -Raw
|
||||||
|
$matches = [regex]::Matches($content, 'name="productSkuId">\{([0-9a-fA-F\-]+)\}')
|
||||||
|
foreach ($match in $matches) {
|
||||||
|
$guids += $match.Groups[1].Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$guids = $guids | Select-Object -Unique
|
||||||
|
$guidsString = $guids -join " "
|
||||||
|
$guidsString
|
||||||
|
:getactivationid:
|
||||||
|
|
||||||
|
:: Get SvcRestartTask info
|
||||||
|
|
||||||
|
:gettaskinfo:
|
||||||
|
$task = Get-ScheduledTask | Where-Object { $_.TaskName -eq 'SvcRestartTask' -and $_.TaskPath -eq '\Microsoft\Windows\SoftwareProtectionPlatform\' }
|
||||||
|
$info = $task | Get-ScheduledTaskInfo
|
||||||
|
if ($info.LastRunTime -match 99) {
|
||||||
|
$task | Start-ScheduledTask
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
$info = $task | Get-ScheduledTaskInfo
|
||||||
|
}
|
||||||
|
"$($task.State) $($info.LastTaskResult) $($info.LastRunTime)"
|
||||||
|
:gettaskinfo:
|
||||||
|
|
||||||
:: Check wmic.exe
|
:: Check wmic.exe
|
||||||
|
|
||||||
:dk_ckeckwmic
|
:dk_ckeckwmic
|
||||||
|
|
||||||
set _wmic=0
|
set _wmic=0
|
||||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -668,8 +790,8 @@ set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::Brandi
|
||||||
|
|
||||||
set winos=
|
set winos=
|
||||||
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
||||||
echo "%winos%" | find /i "Windows" 1>nul || (
|
echo "%winos%" | find /i "Windows" %nul1% || (
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %nul6%') do set "winos=%%b"
|
||||||
if %winbuild% GEQ 22000 (
|
if %winbuild% GEQ 22000 (
|
||||||
set winos=!winos:Windows 10=Windows 11!
|
set winos=!winos:Windows 10=Windows 11!
|
||||||
)
|
)
|
||||||
|
@ -689,17 +811,33 @@ exit /b
|
||||||
|
|
||||||
:dk_errorcheck
|
:dk_errorcheck
|
||||||
|
|
||||||
|
set showfix=
|
||||||
|
|
||||||
|
:: Check corrupt services
|
||||||
|
|
||||||
|
set serv_cor=
|
||||||
|
for %%# in (%_serv%) do (
|
||||||
|
set _corrupt=
|
||||||
|
sc start %%# %nul%
|
||||||
|
if !errorlevel! EQU 1060 set _corrupt=1
|
||||||
|
sc query %%# %nul% || set _corrupt=1
|
||||||
|
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt (reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1)
|
||||||
|
if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#"))
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined serv_cor (
|
||||||
|
set error=1
|
||||||
|
call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]"
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Check disabled services
|
:: Check disabled services
|
||||||
|
|
||||||
set serv_ste=
|
set serv_ste=
|
||||||
for %%# in (%_serv%) do (
|
for %%# in (%_serv%) do (
|
||||||
set serv_dis=
|
|
||||||
reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v ImagePath %nul% || set serv_dis=1
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1
|
|
||||||
sc start %%# %nul%
|
sc start %%# %nul%
|
||||||
if !errorlevel! EQU 1058 set serv_dis=1
|
if !errorlevel! EQU 1058 (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
|
||||||
sc query %%# %nul% || set serv_dis=1
|
|
||||||
if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Change disabled services startup type to default
|
:: Change disabled services startup type to default
|
||||||
|
@ -742,7 +880,7 @@ set errorcode=
|
||||||
set checkerror=
|
set checkerror=
|
||||||
net start %%# /y %nul%
|
net start %%# /y %nul%
|
||||||
set errorcode=!errorlevel!
|
set errorcode=!errorlevel!
|
||||||
sc query %%# | find /i "4 RUNNING" %nul% || set checkerror=1
|
sc query %%# | find /i "RUNNING" %nul% || set checkerror=1
|
||||||
|
|
||||||
sc start %%# %nul%
|
sc start %%# %nul%
|
||||||
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1)
|
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1)
|
||||||
|
@ -753,7 +891,8 @@ if defined serv_e (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Starting Services [Failed] [%serv_e%]"
|
call :dk_color %Red% "Starting Services [Failed] [%serv_e%]"
|
||||||
echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && (
|
echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && (
|
||||||
call :dk_color %Magenta% "Restart the system to fix disabled service error 1058."
|
call :dk_color %Blue% "Restart the system to fix disabled service error 1058."
|
||||||
|
set showfix=1
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -763,61 +902,51 @@ call :dk_color %Magenta% "Restart the system to fix disabled service error 1058.
|
||||||
|
|
||||||
if defined safeboot_option (
|
if defined safeboot_option (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Boot Mode " %Magenta% "[System is running in safe mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Boot Mode " %Blue% "[System is running in safe mode. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" 2>nul | find /i "IMAGE_STATE_COMPLETE" 1>nul || (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" %nul2% | find /i "IMAGE_STATE_COMPLETE" %nul1% || (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Audit Mode " %Magenta% "[System is running in Audit mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Audit Mode " %Blue% "[IMAGE_STATE_COMPLETE status not found. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking WinPE " %Magenta% "[System is running in WinPE mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking WinPE " %Blue% "[System is running in WinPE mode. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
|
%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || (
|
||||||
call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking Powershell [Not Responding]"
|
call :dk_color %Red% "Checking Powershell [Not Responding]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
set wmifailed=
|
|
||||||
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
|
|
||||||
set wmifailed=1
|
|
||||||
call :dk_color %Red% "Checking WMI [Not Responding] %_wmic%"
|
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix WMI option."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if not "%regSKU%"=="%wmiSKU%" (
|
|
||||||
call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
DISM /English /Online /Get-CurrentEdition %nul%
|
DISM /English /Online /Get-CurrentEdition %nul%
|
||||||
set error_code=%errorlevel%
|
set dism_error=%errorlevel%
|
||||||
cmd /c exit /b %error_code%
|
cmd /c exit /b %dism_error%
|
||||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
if %dism_error% NEQ 0 set "dism_error=[0x%=ExitCode%]"
|
||||||
if %error_code% NEQ 0 (
|
if %dism_error% NEQ 0 (
|
||||||
call :dk_color %Red% "Checking DISM [Not Responding] %error_code%"
|
call :dk_color %Red% "Checking DISM [Not Responding] %dism_error%"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]"
|
call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]"
|
||||||
|
if /i %dism_error%==[0x800F0805] (
|
||||||
|
for %%# in (4 125 126 188 191 205) do if "%osSKU%"=="%%#" (
|
||||||
|
call :dk_color %Blue% "Evaluation Windows can not be activated and different License install may lead to errors."
|
||||||
|
call :dk_color %Blue% "It is recommended to install full version of %winos%."
|
||||||
|
call :dk_color %Blue% "You can download it from https://%mas%/genuine-installation-media.html"
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -831,21 +960,49 @@ call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
|
||||||
|
call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
set wmifailed=
|
||||||
|
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1%
|
||||||
|
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1%
|
||||||
|
|
||||||
|
if %errorlevel% NEQ 0 set wmifailed=1
|
||||||
|
echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants
|
||||||
|
if defined wmifailed (
|
||||||
|
set error=1
|
||||||
|
call :dk_color %Red% "Checking WMI [Not Responding]"
|
||||||
|
call :dk_color %Blue% "In MAS, Goto Troubleshoot and run Fix WMI option."
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||||
|
set /a "sum/=3"
|
||||||
|
if not defined officeact if not "%sum%"=="%slcSKU%" (
|
||||||
|
call :dk_color %Red% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
|
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Rearm " %Magenta% "[System Restart Is Required]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking ClipSVC " %Magenta% "[System Restart Is Required]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" 2^>nul') do if /i %%b NEQ 0x0 (
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 (
|
||||||
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul%
|
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul%
|
||||||
call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found, Changing To 0]"
|
call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]"
|
||||||
net stop sppsvc /y %nul%
|
net stop sppsvc /y %nul%
|
||||||
net start sppsvc /y %nul%
|
net start sppsvc /y %nul%
|
||||||
set error=1
|
set error=1
|
||||||
|
@ -854,7 +1011,24 @@ set error=1
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || (
|
||||||
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]"
|
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]"
|
||||||
|
call :dk_color %Blue% "Possibly Caused By Gaming Spoofers. Help: https://%mas%/troubleshoot"
|
||||||
set error=1
|
set error=1
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
set tokenstore=
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b"
|
||||||
|
if not exist "%tokenstore%\" (
|
||||||
|
set error=1
|
||||||
|
REM This code creates token folder only if it's missing and sets default permission for it
|
||||||
|
mkdir "%tokenstore%" %nul%
|
||||||
|
set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';"
|
||||||
|
set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;"
|
||||||
|
set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);"
|
||||||
|
set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;"
|
||||||
|
%psc% "!d!" %nul%
|
||||||
|
call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creating Now] [%tokenstore%\]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -872,44 +1046,43 @@ call :dk_color %Red% "Checking Activation IDs [Not Found]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
set tokenstore=
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore 2^>nul') do call set "tokenstore=%%b"
|
|
||||||
if not exist "%tokenstore%\" (
|
|
||||||
set error=1
|
|
||||||
call :dk_color %Red% "Checking SPP Token Folder [Not Found] [%tokenstore%\]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]"
|
call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat (
|
|
||||||
set error=1
|
|
||||||
call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if not exist %SystemRoot%\system32\sppsvc.exe (
|
if not exist %SystemRoot%\system32\sppsvc.exe (
|
||||||
set error=1
|
set error=1
|
||||||
|
set showfix=1
|
||||||
call :dk_color %Red% "Checking sppsvc.exe File [Not Found]"
|
call :dk_color %Red% "Checking sppsvc.exe File [Not Found]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
:: Below checks are performed if required services are not disabled + slmgr /dlv errorlevel is not Zero + Rearm restart is not required + WMI is working fine
|
set task=
|
||||||
|
set taskerror=
|
||||||
|
if not defined wmifailed if not defined officeact (
|
||||||
|
for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':gettaskinfo\:.*';iex ($f[1]);"') do (set task=%%a)
|
||||||
|
echo "!task!" | find /i "Ready 0 " %nul% || set taskerror=1
|
||||||
|
echo "!task!" | find "99" %nul% && set taskerror=1
|
||||||
|
if defined taskerror (
|
||||||
|
call :dk_color %Gray% "Checking SvcRestartTask Last Run [Issues Found, !task!]"
|
||||||
|
call :dk_color %Gray% "Windows may face issues in keeping activation. Help: https://%mas%/troubleshoot"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
:: Below checks are performed if required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before
|
||||||
|
|
||||||
set showfix=
|
|
||||||
set wpaerror=
|
set wpaerror=
|
||||||
set permerror=
|
set permerror=
|
||||||
if not defined serv_cste if /i not %error_code%==0 if /i not %error_code%==0xC004D302 if not defined wmifailed (
|
if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix (
|
||||||
|
|
||||||
REM This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems.
|
REM This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems.
|
||||||
|
|
||||||
if %winbuild% GEQ 14393 (
|
if %winbuild% GEQ 14393 (
|
||||||
set /a count=0
|
set /a count=0
|
||||||
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" 2^>nul') do set /a count+=1
|
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" %nul6%') do set /a count+=1
|
||||||
for /L %%# in (1,1,!count!) do (
|
for /L %%# in (1,1,!count!) do (
|
||||||
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
||||||
)
|
)
|
||||||
|
@ -931,8 +1104,8 @@ if !errorlevel!==2 set permerror=1
|
||||||
if defined permerror call :dk_color %Red% "Checking SPP Permissions [Error Found]"
|
if defined permerror call :dk_color %Red% "Checking SPP Permissions [Error Found]"
|
||||||
|
|
||||||
set showfix=1
|
set showfix=1
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
if not defined permerror call :dk_color %Magenta% "If activation still fails then run Fix WPA Registry option."
|
if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
@ -964,7 +1137,7 @@ exit /b
|
||||||
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 %_exitmsg%..."
|
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
||||||
pause >nul
|
pause %nul1%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -973,10 +1146,10 @@ exit /b
|
||||||
:: 2nd column = Generic Retail/OEM/MAK Key
|
:: 2nd column = Generic Retail/OEM/MAK Key
|
||||||
:: 3rd column = SKU ID
|
:: 3rd column = SKU ID
|
||||||
:: 4th column = Key part number
|
:: 4th column = Key part number
|
||||||
:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check https://massgrave.dev/hwid.html#Manual_Activation to see how it's generated)
|
:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check mass grave[.]dev/hwid.html#Manual_Activation to see how it's generated)
|
||||||
:: 6th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
|
:: 6th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
|
||||||
:: 7th column = Key Type
|
:: 7th column = Key Type
|
||||||
:: 8th column = WMI Edition ID
|
:: 8th column = WMI Edition ID (For reference only)
|
||||||
:: 9th column = Version name incase same Edition ID is used in different OS versions with different key
|
:: 9th column = Version name incase same Edition ID is used in different OS versions with different key
|
||||||
:: Separator = _
|
:: Separator = _
|
||||||
|
|
||||||
|
@ -996,14 +1169,17 @@ f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CP%f%RK-NM%f%3K3-X6X%f%XQ-RX%f%X86-WX%f%CH
|
||||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKC%f%NC-J2%f%6Q9-KFH%f%D2-FK%f%THY-KD%f%72Y_119_X19-99606_gtywgqIP3j+bliKdunuseeZWtsOzWhj+DmSBq7nqeNarHutgbWEwvcRiGo+nwxONt9Ak/VyuO76ZWH/db3iRVTk1y61vFv15gVlOy1ovLjVHBvmPVdQXIne2N+pIMb0eBhZWHRX63mYdkZRZ0wg/+bj4xsjJv+qLpWhVCzNMge4_0_OEM:NONSLP_PPIPro
|
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKC%f%NC-J2%f%6Q9-KFH%f%D2-FK%f%THY-KD%f%72Y_119_X19-99606_gtywgqIP3j+bliKdunuseeZWtsOzWhj+DmSBq7nqeNarHutgbWEwvcRiGo+nwxONt9Ak/VyuO76ZWH/db3iRVTk1y61vFv15gVlOy1ovLjVHBvmPVdQXIne2N+pIMb0eBhZWHRX63mYdkZRZ0wg/+bj4xsjJv+qLpWhVCzNMge4_0_OEM:NONSLP_PPIPro
|
||||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNM%f%GQ-8R%f%YV3-4PG%f%Q3-C8%f%XTP-7C%f%FBY_121_X19-98886_VuBmoSUdF63Cvwm9wNlc2yhD2tP9B72iVVWFNcbAwDGXF6o06oNMsIJ0VqGJDdBzZjVGw2wHokMabxZNDyIl90CO7trwgV8S0lLJVLymxyUaE3ThvN3YUsi9Q3H+5Kr0RpsojCWb+UQd/GY4bSXfyStXFylj6im7yv0db/ZWGbw_0_____Retail_Education
|
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNM%f%GQ-8R%f%YV3-4PG%f%Q3-C8%f%XTP-7C%f%FBY_121_X19-98886_VuBmoSUdF63Cvwm9wNlc2yhD2tP9B72iVVWFNcbAwDGXF6o06oNMsIJ0VqGJDdBzZjVGw2wHokMabxZNDyIl90CO7trwgV8S0lLJVLymxyUaE3ThvN3YUsi9Q3H+5Kr0RpsojCWb+UQd/GY4bSXfyStXFylj6im7yv0db/ZWGbw_0_____Retail_Education
|
||||||
c5198a66-e435-4432-89cf-ec777c9d0352_84N%f%GF-MH%f%BT6-FXB%f%X8-QW%f%JK7-DR%f%R8H_122_X19-98892_jQ6S2bbNoVrp/zvi8BEUwCf7fge1nAdspcjXyTeTySUiR+hXPiKQEWgyLqAdZ5Or+X2JGT/LZN1/eZ9P+REmzG/WQotZ+fyyPguoSsES+d312RkfmQoI5gVanEkGjZSU4YohREM/Vyf9MOO7dbH9MMEpFm2mje6OnhyJo2gux0g_0_____Retail_EducationN
|
c5198a66-e435-4432-89cf-ec777c9d0352_84N%f%GF-MH%f%BT6-FXB%f%X8-QW%f%JK7-DR%f%R8H_122_X19-98892_jQ6S2bbNoVrp/zvi8BEUwCf7fge1nAdspcjXyTeTySUiR+hXPiKQEWgyLqAdZ5Or+X2JGT/LZN1/eZ9P+REmzG/WQotZ+fyyPguoSsES+d312RkfmQoI5gVanEkGjZSU4YohREM/Vyf9MOO7dbH9MMEpFm2mje6OnhyJo2gux0g_0_____Retail_EducationN
|
||||||
|
f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJB%f%47-8P%f%N2T-MCG%f%DY-JT%f%Y3D-CB%f%CPV_125_X23-50331_Txrh+25Ej9T5ZZXUNxSh/t9ZV18K112m3pOtVVwAeXk4rqjovoYEKcR4DZxUrQ85tNnqSJ+mLlCfnHa9ghb7OTLCaba+d+LA8HBrFfG0g1Ya1gBBL3ZsACHBRPdDiXOGl8uil+5EkOx2sKX941S5fnNK/278XBFRm2NKwfJ7hhI_1_Volume:MAK_EnterpriseS_Ge
|
||||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCN%f%VH-YK%f%WX8-GJJ%f%B9-H9%f%FDT-6F%f%7W2_125_X22-66075_wJ/BPDFz+13PVJtBqBo+E4LCm3LoMVALCQUun9kXGBULr7V8FQ5nKUudUGHDLNNVIIicdw9Uh26BKAt0/hnE7BpBkzwdi4qAdZgKXQ1t06Ek4+zXmoT225NvpaHsuhDkE687TtCB1ZWvAulA8G9ehE3HTJSoNm4wCFOQyIQQtqQ_1_Volume:MAK_EnterpriseS_VB
|
cce9d2de-98ee-4ce2-8113-222620c64a27_KCN%f%VH-YK%f%WX8-GJJ%f%B9-H9%f%FDT-6F%f%7W2_125_X22-66075_wJ/BPDFz+13PVJtBqBo+E4LCm3LoMVALCQUun9kXGBULr7V8FQ5nKUudUGHDLNNVIIicdw9Uh26BKAt0/hnE7BpBkzwdi4qAdZgKXQ1t06Ek4+zXmoT225NvpaHsuhDkE687TtCB1ZWvAulA8G9ehE3HTJSoNm4wCFOQyIQQtqQ_1_Volume:MAK_EnterpriseS_VB
|
||||||
d06934ee-5448-4fd1-964a-cd077618aa06_43T%f%BQ-NH%f%92J-XKT%f%M7-KT%f%3KK-P3%f%9PB_125_X21-83233_V+y0SFmAnGwRwgNz+0sO0mj+XxSjbdRDpom1Iqx2BJcsf96Q5ittJOcMhKiNswyKuq5suM5vy60tA/AUdb1mrnnrnXfmz7nFam/BIOOfa18GA7vd1aNFufhpmCiMWxoGSewH/T1pnCZrsvGYIj//qC7aiQVKYBngO7UYWGaytgc_0_OEM:NONSLP_EnterpriseS_RS5
|
d06934ee-5448-4fd1-964a-cd077618aa06_43T%f%BQ-NH%f%92J-XKT%f%M7-KT%f%3KK-P3%f%9PB_125_X21-83233_V+y0SFmAnGwRwgNz+0sO0mj+XxSjbdRDpom1Iqx2BJcsf96Q5ittJOcMhKiNswyKuq5suM5vy60tA/AUdb1mrnnrnXfmz7nFam/BIOOfa18GA7vd1aNFufhpmCiMWxoGSewH/T1pnCZrsvGYIj//qC7aiQVKYBngO7UYWGaytgc_0_OEM:NONSLP_EnterpriseS_RS5
|
||||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK9%f%6Y-D9%f%CD8-W44%f%CQ-R8%f%YTK-DY%f%JWX_125_X21-05035_U2DIv+LAhSGz0rNbTiMQYaP3M41+0+ZioF7vh0COeeJSIruDFCZ3Li7ZM3dSleg6QTCxG04uZ3i3r1bCZv0+WAfU9rG+3BqLAwKlJS/31rETeRWvrxB1UK4mTMHwAJc9txDAc15ureqF+2b9pIIpwLljmFer6fI7z0iI6I/ZuTU_0_OEM:NONSLP_EnterpriseS_RS1
|
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK9%f%6Y-D9%f%CD8-W44%f%CQ-R8%f%YTK-DY%f%JWX_125_X21-05035_U2DIv+LAhSGz0rNbTiMQYaP3M41+0+ZioF7vh0COeeJSIruDFCZ3Li7ZM3dSleg6QTCxG04uZ3i3r1bCZv0+WAfU9rG+3BqLAwKlJS/31rETeRWvrxB1UK4mTMHwAJc9txDAc15ureqF+2b9pIIpwLljmFer6fI7z0iI6I/ZuTU_0_OEM:NONSLP_EnterpriseS_RS1
|
||||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN%f%7H-PF%f%93Q-4GG%f%P8-M8%f%RF3-MD%f%WWW_125_X19-99617_0frpwr4N/wBVRA/nOvAMqkxmRj6Vv9mA+jVNtnurAL1TjkPN/y+6YVUd5MP/Y4As4kddHoHiZXI+2siKHJsaV95ppXoHKR8d7FRVitr1F+82TbB7OVvdCclGrRZymnq25HvtSC3BROHt7ZXTgSCWMyB7MlbLiqHiTymOj5OMX1g_0_OEM:NONSLP_EnterpriseS_TH
|
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN%f%7H-PF%f%93Q-4GG%f%P8-M8%f%RF3-MD%f%WWW_125_X19-99617_0frpwr4N/wBVRA/nOvAMqkxmRj6Vv9mA+jVNtnurAL1TjkPN/y+6YVUd5MP/Y4As4kddHoHiZXI+2siKHJsaV95ppXoHKR8d7FRVitr1F+82TbB7OVvdCclGrRZymnq25HvtSC3BROHt7ZXTgSCWMyB7MlbLiqHiTymOj5OMX1g_0_OEM:NONSLP_EnterpriseS_TH
|
||||||
|
837766ff-61c5-427d-87c3-a2acbd44767a_XFC%f%77-XN%f%RXM-2Q3%f%6W-FC%f%M9T-YH%f%DJ9_126_X23-50304_fIijy15jUocqsDIBLyz5/6FKqkNU1uoYYTqqnbBnk5bPUHKzjIbMGldJEjNgd7lKnHG9qhIjl0q1OHyTna4eY0ydD/b9MfLtD2hmfVvG7gJL8PNaZDa0MuGorxbQilR3nczXmeL/5gsvw5Q/uCfSY5p4UuPnjasKV8eITIPfu1k_1_Volume:MAK_EnterpriseSN_Ge
|
||||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQF%f%NW-9T%f%PM3-JQ7%f%3T-QV%f%4VQ-DV%f%9PT_126_X22-66108_UeA6O2iIW6zFMJzLMCQjVA7gUHOGRTiFB6LPrgjhgfJEXSZnDjxw8wsR+tp+JQWeaQDsVt06c2byH3z7Ft2wNk8n3gcXUknIjlcCckNjw05WDI64/wCqz+gtf1RajMEoV/mODpBx7rdLtCg03FyV7Z9LOib4/WLSmnxjDPKMG7s_1_Volume:MAK_EnterpriseSN_VB
|
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQF%f%NW-9T%f%PM3-JQ7%f%3T-QV%f%4VQ-DV%f%9PT_126_X22-66108_UeA6O2iIW6zFMJzLMCQjVA7gUHOGRTiFB6LPrgjhgfJEXSZnDjxw8wsR+tp+JQWeaQDsVt06c2byH3z7Ft2wNk8n3gcXUknIjlcCckNjw05WDI64/wCqz+gtf1RajMEoV/mODpBx7rdLtCg03FyV7Z9LOib4/WLSmnxjDPKMG7s_1_Volume:MAK_EnterpriseSN_VB
|
||||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33%f%WV-NH%f%Y3C-R7F%f%PM-BQ%f%GPT-23%f%9PG_126_X21-83264_NtP6sMWmOTCdABAbgIZfxZzRs8zaqzfaabLeFXQJvfJvQPLQPk2UxMliASJG+7YwwbTD8pyhUoQqUYrlCzJZ6jDSDyUTJkXgo9akR4fBOg6Z5wn5fW8NGAMDcLND5d9XxHl0gWH/HZNIs/GZaPJsCVVqPr7X8bk/y0DeIofxICU_1_Volume:MAK_EnterpriseSN_RS5
|
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33%f%WV-NH%f%Y3C-R7F%f%PM-BQ%f%GPT-23%f%9PG_126_X21-83264_NtP6sMWmOTCdABAbgIZfxZzRs8zaqzfaabLeFXQJvfJvQPLQPk2UxMliASJG+7YwwbTD8pyhUoQqUYrlCzJZ6jDSDyUTJkXgo9akR4fBOg6Z5wn5fW8NGAMDcLND5d9XxHl0gWH/HZNIs/GZaPJsCVVqPr7X8bk/y0DeIofxICU_1_Volume:MAK_EnterpriseSN_RS5
|
||||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DB%f%W3-N2%f%PJG-MVH%f%W3-G7%f%TDK-9H%f%KR4_126_X21-04921_WeNSkuiC3iyNT9tDqlj6KvM17UYMsYjEelyyMEyPEXSAbYA08lYtYJjCzxSE9T30p9dxqPIuj370OwHhAxG8a51/HoLNWR0grj08HmdOXUA8Ap4clEivxKM0zRvwPR6L2M2HQP0nN54c9It7ikzweJ0X2HHOb58oEw9LbMeUM/Y_0_Volume:MAK_EnterpriseSN_RS1
|
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DB%f%W3-N2%f%PJG-MVH%f%W3-G7%f%TDK-9H%f%KR4_126_X21-04921_WeNSkuiC3iyNT9tDqlj6KvM17UYMsYjEelyyMEyPEXSAbYA08lYtYJjCzxSE9T30p9dxqPIuj370OwHhAxG8a51/HoLNWR0grj08HmdOXUA8Ap4clEivxKM0zRvwPR6L2M2HQP0nN54c9It7ikzweJ0X2HHOb58oEw9LbMeUM/Y_0_Volume:MAK_EnterpriseSN_RS1
|
||||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX%f%6B-BR%f%YC2-K67%f%86-F6%f%MVQ-M7%f%V2X_126_X19-98770_QLG40WW/TtUqtir9K6FJCQXU1mfn27uutdOunHJ3gXk6v0Mbxaqu9GKqpg5xFzdFiOPb/8Bmk/ylwceXgoaUx1nKcBGb/Bg+jICiNMEYIbGyMuYiHb0iJeVbjbBLLfWuAAuUPftfnKPH3dAu1YvhaS5nv7a5wICrXdJWeVNpBxk_0_Volume:MAK_EnterpriseSN_TH
|
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX%f%6B-BR%f%YC2-K67%f%86-F6%f%MVQ-M7%f%V2X_126_X19-98770_QLG40WW/TtUqtir9K6FJCQXU1mfn27uutdOunHJ3gXk6v0Mbxaqu9GKqpg5xFzdFiOPb/8Bmk/ylwceXgoaUx1nKcBGb/Bg+jICiNMEYIbGyMuYiHb0iJeVbjbBLLfWuAAuUPftfnKPH3dAu1YvhaS5nv7a5wICrXdJWeVNpBxk_0_Volume:MAK_EnterpriseSN_TH
|
||||||
|
01eb852c-424d-4060-94b8-c10d799d7364_3XP%f%6D-CR%f%ND4-DRY%f%M2-GM%f%84D-4G%f%G8Y_139_X23-37869_bpWJRMPuEeHIx4X+imsfTHaUXtdSGX9/+kuFDpkJ0rIQXKBf+pprkICUG/FJVciv60VXAMaQPBgn4zGfpfVTvJ0DTPxdRcS4WltLnz5L3fG6jXPjI5lArAFWlx7m93ch1zINoxbroU3inMo5JjsJaMZt01Gae6Of4k9DrgYC8U0_1_____Retail_ProfessionalCountrySpecific_Zn
|
||||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG%f%7C-N3%f%6C4-C4H%f%TG-X4%f%T3X-2Y%f%V77_161_X21-43626_vHO/5UEtrsDzGC30A2Ya5DYXlNMs7hVYiLvM7X31xkaFMxogbiy3ZDxBbjRku3VXyW+TYsFX/D/wdJgFmMrhsNrObkxqzYMMRjx+BpwOx2PspKpS2RyzovyRl8v93SvHB5IyoO2/3pm2YqJDK1hXLhms6+DDPuiofQt36q47reQ_0_____Retail_ProfessionalWorkstation
|
eb6d346f-1c60-4643-b960-40ec31596c45_DXG%f%7C-N3%f%6C4-C4H%f%TG-X4%f%T3X-2Y%f%V77_161_X21-43626_vHO/5UEtrsDzGC30A2Ya5DYXlNMs7hVYiLvM7X31xkaFMxogbiy3ZDxBbjRku3VXyW+TYsFX/D/wdJgFmMrhsNrObkxqzYMMRjx+BpwOx2PspKpS2RyzovyRl8v93SvHB5IyoO2/3pm2YqJDK1hXLhms6+DDPuiofQt36q47reQ_0_____Retail_ProfessionalWorkstation
|
||||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYP%f%NQ-8C%f%467-V2W%f%6J-TX%f%4WX-WT%f%2RQ_162_X21-43644_phlxNLr+sk8cCCmAVU3k3XrtD6sFDeoaODc+21soKqePbVQbzPHgokS73ccok6/gDfu/u5UKc7omL8pm2IhIhf70oC+8M/FFp0zRFeC/ZFXdF2tL23oKWI9kZbvcaoZBiqaDGc1bNYi5KAZYaJU8wwqw16ZnohQJZ7QR9cgUfFQ_0_____Retail_ProfessionalWorkstationN
|
89e87510-ba92-45f6-8329-3afa905e3e83_WYP%f%NQ-8C%f%467-V2W%f%6J-TX%f%4WX-WT%f%2RQ_162_X21-43644_phlxNLr+sk8cCCmAVU3k3XrtD6sFDeoaODc+21soKqePbVQbzPHgokS73ccok6/gDfu/u5UKc7omL8pm2IhIhf70oC+8M/FFp0zRFeC/ZFXdF2tL23oKWI9kZbvcaoZBiqaDGc1bNYi5KAZYaJU8wwqw16ZnohQJZ7QR9cgUfFQ_0_____Retail_ProfessionalWorkstationN
|
||||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PT%f%T6-RN%f%W4C-6V7%f%J2-C2%f%D3X-MH%f%BPB_164_X21-04955_Px7QWdfy0esrMzQoydKlmIcGdfV0pQvbnumyrh4evDNF9gpENm8OIfZfljIynury0qZAkw4AG3uGyp+5IxZGIh6U3dz41uNVfEcA9NZ34OEBXMtjEOU1ZbJ8wp8JecQKwlORclvsri9OOi0GbGc0TYRanlci2jJL/3x/gSuWXCs_0_____Retail_ProfessionalEducation
|
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PT%f%T6-RN%f%W4C-6V7%f%J2-C2%f%D3X-MH%f%BPB_164_X21-04955_Px7QWdfy0esrMzQoydKlmIcGdfV0pQvbnumyrh4evDNF9gpENm8OIfZfljIynury0qZAkw4AG3uGyp+5IxZGIh6U3dz41uNVfEcA9NZ34OEBXMtjEOU1ZbJ8wp8JecQKwlORclvsri9OOi0GbGc0TYRanlci2jJL/3x/gSuWXCs_0_____Retail_ProfessionalEducation
|
||||||
|
@ -1013,46 +1189,28 @@ d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3W%f%VW-N2%f%PV2-CGW%f%C3-34%f%QGF-VM%f%J2
|
||||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9%f%J3-68%f%WK7-6FB%f%93-4K%f%3DF-DJ%f%4F6_179_X21-32987_H0qrFdf+FQxcSRJDtEwd8OfwC4iH/25Q01jz3QuB9yhEqB0W1i83u0WDpVK04pvU1EDCCRRI/DhXynbkWpLC0chdTOW4k5jIy+aa0cD3fccz9ChSjVHMzyTg3abEVFAvy9rttUyxcFIOKcINXHTxTRp5cZPwOa393tlJyBiliAo_0_____Retail_CloudN
|
af5c9381-9240-417d-8d35-eb40cd03e484_NH9%f%J3-68%f%WK7-6FB%f%93-4K%f%3DF-DJ%f%4F6_179_X21-32987_H0qrFdf+FQxcSRJDtEwd8OfwC4iH/25Q01jz3QuB9yhEqB0W1i83u0WDpVK04pvU1EDCCRRI/DhXynbkWpLC0chdTOW4k5jIy+aa0cD3fccz9ChSjVHMzyTg3abEVFAvy9rttUyxcFIOKcINXHTxTRp5cZPwOa393tlJyBiliAo_0_____Retail_CloudN
|
||||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQ%f%YW-NF%f%FMW-XJP%f%BH-K8%f%732-CK%f%FFD_188_X21-99378_Bwx3E7qmE6M8UR6+KPqLnnavI6ThNHHUO717RJY9di2YI9rzC3O0LceXOHjshSKwfwxosqFsD/p/inrJmabed1yA/ZWwISyGtAIGTtRgpuSE4TAfW6KEW0v7rcr2wwwDq7DHSuz4QN4odEGe9bvtx4zIZKufQzzN4TN2rd/BJkE_0_____OEM:DM_IoTEnterprise
|
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQ%f%YW-NF%f%FMW-XJP%f%BH-K8%f%732-CK%f%FFD_188_X21-99378_Bwx3E7qmE6M8UR6+KPqLnnavI6ThNHHUO717RJY9di2YI9rzC3O0LceXOHjshSKwfwxosqFsD/p/inrJmabed1yA/ZWwISyGtAIGTtRgpuSE4TAfW6KEW0v7rcr2wwwDq7DHSuz4QN4odEGe9bvtx4zIZKufQzzN4TN2rd/BJkE_0_____OEM:DM_IoTEnterprise
|
||||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J%f%2WJ-P88%f%HH-P3%f%YRH-YY%f%74H_191_X21-99682_lE8qL1p4m68mv9wcxU2sdKZPIccybtOjr+aMAdV+sLHs9wzE26oz5GiSZ3UzpU7yoYrNMqwGkKX6mrCEGRLh+XR2Ricp7ELA1PkzaGm0FLUqaK2GNVQ00i+s6KcA2XRr/gWOhhGTqSCjpSi9cMiqMbftf9Bo/BJVK3ib9xU4OQw_0_OEM:NONSLP_IoTEnterpriseS_VB
|
ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J%f%2WJ-P88%f%HH-P3%f%YRH-YY%f%74H_191_X21-99682_lE8qL1p4m68mv9wcxU2sdKZPIccybtOjr+aMAdV+sLHs9wzE26oz5GiSZ3UzpU7yoYrNMqwGkKX6mrCEGRLh+XR2Ricp7ELA1PkzaGm0FLUqaK2GNVQ00i+s6KcA2XRr/gWOhhGTqSCjpSi9cMiqMbftf9Bo/BJVK3ib9xU4OQw_0_OEM:NONSLP_IoTEnterpriseS_VB
|
||||||
|
6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK%f%42-GY%f%N6Y-VD2%f%2B-BX%f%98W-J8%f%JXD_191_X23-12617_QEqj4TJNDYZnR8WdPp2TYu5UyiJtUmKER75/DuR5L5SZ1Qg/LUff0Nse+iT+cDVld/YA8RS1CxeMF1W/SLuPHqZvEzkPmYxGVy2U1iCbztfonAA2FZ3v76gbroMOr6bqMmeKNkhsUMG5sEz5uYXW0+K7Ke2z5GSMiEQHQN2yDA4_0_OEM:NONSLP_IoTEnterpriseS_Ge
|
||||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9V%f%KN-3B%f%GWV-Y62%f%4W-MC%f%RMQ-BH%f%DCD_202_X22-53884_hPcIn0dF9Dq6zlXd3RxBqVDPDnf5sTasTjUqhD6lGc9IkTc8476NHd1PV1Ds++VO34/dw2H2PWk33LT5Es6PnUi32Ypva4POy4QJo5W3qyduiJiHUOM5GS9yAkKfdHFgUXaUVwopYKq+EwmgxFmEvHYdWgREHgIMyNoKAZQK0Ok_0_____Retail_CloudEditionN
|
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9V%f%KN-3B%f%GWV-Y62%f%4W-MC%f%RMQ-BH%f%DCD_202_X22-53884_hPcIn0dF9Dq6zlXd3RxBqVDPDnf5sTasTjUqhD6lGc9IkTc8476NHd1PV1Ds++VO34/dw2H2PWk33LT5Es6PnUi32Ypva4POy4QJo5W3qyduiJiHUOM5GS9yAkKfdHFgUXaUVwopYKq+EwmgxFmEvHYdWgREHgIMyNoKAZQK0Ok_0_____Retail_CloudEditionN
|
||||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7%f%PN-VR%f%6RX-83W%f%6Y-6D%f%DYQ-T6%f%R4W_203_X22-53847_DCP6QzPj+BD1EEmlBelBt7x9AmvQOfd7kdkUB0b0x6/TNHRnZtdyix3pNX2IDQtJbLnNLc2ZlMmupbZQrtyxe3xl8+xlCnHByXZpzFty9sGzq3MozHHA9u9WsJEf5R7tnFDplNM1UitlTVTAyuCGk83brY4zjmz/52pUQyQHzjI_0_____Retail_CloudEdition
|
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7%f%PN-VR%f%6RX-83W%f%6Y-6D%f%DYQ-T6%f%R4W_203_X22-53847_DCP6QzPj+BD1EEmlBelBt7x9AmvQOfd7kdkUB0b0x6/TNHRnZtdyix3pNX2IDQtJbLnNLc2ZlMmupbZQrtyxe3xl8+xlCnHByXZpzFty9sGzq3MozHHA9u9WsJEf5R7tnFDplNM1UitlTVTAyuCGk83brY4zjmz/52pUQyQHzjI_0_____Retail_CloudEdition
|
||||||
d4f9b41f-205c-405e-8e08-3d16e88e02be_J7N%f%JW-V6%f%KBM-CC8%f%RW-Y2%f%9Y4-HQ%f%2MJ_205_X23-15027_U9eyfIBXrs++lyP6OjHHaF/wjieAxQeSKwzSkGBeTTpyCDcenq8t4cKvqDHnauSZzaVPWNoVcASkMCdlJi3EkR29KSgvx9/K2OB8LVH2PPpqvwjm1ZZdrvLMGhW83A/KRrtN9AOx7bnPC8MNLErnzbRRS9/aOrmp4Uzo8EIVagI_0_OEM:NONSLP_IoTEnterpriseSK
|
d4f9b41f-205c-405e-8e08-3d16e88e02be_J7N%f%JW-V6%f%KBM-CC8%f%RW-Y2%f%9Y4-HQ%f%2MJ_205_X23-15027_U9eyfIBXrs++lyP6OjHHaF/wjieAxQeSKwzSkGBeTTpyCDcenq8t4cKvqDHnauSZzaVPWNoVcASkMCdlJi3EkR29KSgvx9/K2OB8LVH2PPpqvwjm1ZZdrvLMGhW83A/KRrtN9AOx7bnPC8MNLErnzbRRS9/aOrmp4Uzo8EIVagI_0_OEM:NONSLP_IoTEnterpriseSK
|
||||||
) do (
|
) do (
|
||||||
for /f "tokens=1-10 delims=_" %%A in ("%%#") do (
|
for /f "tokens=1-9 delims=_" %%A in ("%%#") do (
|
||||||
|
|
||||||
if %1==key if %osSKU%==%%C (
|
REM Detect key
|
||||||
|
|
||||||
REM Detect key attempt 1
|
if %1==key if %osSKU%==%%C if not defined key (
|
||||||
|
echo "!applist! !altapplist!" | find /i "%%A" %nul1% && (
|
||||||
if "%2"=="attempt1" if not defined key (
|
|
||||||
echo "!applist!" | find /i "%%A" 1>nul && (
|
|
||||||
if %%F==1 set notworking=1
|
if %%F==1 set notworking=1
|
||||||
set key=%%B
|
set key=%%B
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Detect key attempt 2
|
|
||||||
|
|
||||||
if "%2"=="attempt2" if not defined key (
|
|
||||||
set actidnotfound=1
|
|
||||||
set 9th=%%I
|
|
||||||
if not defined 9th (
|
|
||||||
if %%F==1 set notworking=1
|
|
||||||
set key=%%B
|
|
||||||
) else (
|
|
||||||
echo "%branch%" | find /i "%%I" 1>nul && (
|
|
||||||
if %%F==1 set notworking=1
|
|
||||||
set key=%%B
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Generate ticket
|
REM Generate ticket
|
||||||
|
|
||||||
if %1==ticket if "%key%"=="%%B" (
|
if %1==ticket if "%key%"=="%%B" (
|
||||||
set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;DownlevelGenuineState=1;$([char]0)"
|
set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;DownlevelGenuineState=1;$([char]0)"
|
||||||
for /f "tokens=* delims=" %%i in ('%psc% [conv%f%ert]::ToBas%f%e64String([Text.En%f%coding]::Uni%f%code.GetBytes("""!string!"""^)^)') do set "encoded=%%i"
|
for /f "tokens=* delims=" %%i in ('%psc% [conv%f%ert]::ToBas%f%e64String([Text.En%f%coding]::Uni%f%code.GetBytes("""!string!"""^)^)') do set "encoded=%%i"
|
||||||
echo "!encoded!" | find "AAAA" 1>nul || exit /b
|
echo "!encoded!" | find "AAAA" %nul1% || exit /b
|
||||||
|
|
||||||
<nul set /p "=<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0"><version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">%%E=</signature></signatures></genuineProperties></genuineAuthorization>" >"%tdir%\GenuineTicket"
|
<nul set /p "=<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0"><version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">%%E=</signature></signatures></genuineProperties></genuineAuthorization>" >"%tdir%\GenuineTicket"
|
||||||
)
|
)
|
||||||
|
@ -1065,8 +1223,6 @@ exit /b
|
||||||
|
|
||||||
:: Below code is used to get alternate edition name and key if current edition doesn't support HWID activation
|
:: Below code is used to get alternate edition name and key if current edition doesn't support HWID activation
|
||||||
|
|
||||||
:: ProfessionalCountrySpecific won't be converted because it's not a good idea to change CountrySpecific editions
|
|
||||||
|
|
||||||
:: 1st column = Current SKU ID
|
:: 1st column = Current SKU ID
|
||||||
:: 2nd column = Current Edition Name
|
:: 2nd column = Current Edition Name
|
||||||
:: 3rd column = Current Edition Activation ID
|
:: 3rd column = Current Edition Activation ID
|
||||||
|
@ -1082,15 +1238,16 @@ set notfoundaltactID=
|
||||||
if %_NoEditionChange%==1 exit /b
|
if %_NoEditionChange%==1 exit /b
|
||||||
|
|
||||||
for %%# in (
|
for %%# in (
|
||||||
125_EnterpriseS-2021___________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J2%f%WJ-P8%f%8HH-P3Y%f%RH-YY%f%74H_IoTEnterpriseS-2021
|
125_EnterpriseS-2021_______________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J2%f%WJ-P8%f%8HH-P3Y%f%RH-YY%f%74H_IoTEnterpriseS-2021
|
||||||
191_IoTEnterpriseS-Win11_______59eb965c-9150-42b7-a0ec-22151b9897c5_d4f9b41f-205c-405e-8e08-3d16e88e02be_J7N%f%JW-V6K%f%BM-CC%f%8RW-Y29%f%Y4-HQ%f%2MJ_IoTEnterpriseSK-Win11
|
125_EnterpriseS-2024_______________f6e29426-a256-4316-88bf-cc5b0f95ec0c_6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK%f%42-GYN%f%6Y-VD%f%22B-BX9%f%8W-J8%f%JXD_IoTEnterpriseS-2024
|
||||||
138_ProfessionalSingleLanguage_a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T_Professional
|
138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T_Professional
|
||||||
|
139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T_Professional
|
||||||
|
139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T_Professional
|
||||||
) do (
|
) do (
|
||||||
for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A (
|
for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A (
|
||||||
echo "!applist!" | find /i "%%C" 1>nul && (
|
echo "!applist! !altapplist!" | find /i "%%C" %nul1% && (
|
||||||
echo "!applist!" | find /i "%%D" 1>nul && (
|
echo "!applist!" | find /i "%%D" %nul1% && (
|
||||||
set altkey=%%E
|
set altkey=%%E
|
||||||
set curedition=%%B
|
|
||||||
set altedition=%%F
|
set altedition=%%F
|
||||||
) || (
|
) || (
|
||||||
set altedition=%%F
|
set altedition=%%F
|
||||||
|
@ -1102,3 +1259,4 @@ set notfoundaltactID=1
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: massgrave[.]dev
|
:: Homepage: mass grave[.]dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
@ -29,6 +29,13 @@ set _NoEditionChange=0
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -36,6 +43,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f 1>nul
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -52,22 +63,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -98,21 +121,25 @@ for %%A in (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
set winbuild=1
|
set "nul1=1>nul"
|
||||||
|
set "nul2=2>nul"
|
||||||
|
set "nul6=2^>nul"
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
|
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
set "Red="41;97m""
|
set "Red="41;97m""
|
||||||
set "Gray="100;97m""
|
set "Gray="100;97m""
|
||||||
set "Green="42;97m""
|
set "Green="42;97m""
|
||||||
set "Magenta="45;97m""
|
set "Blue="44;97m""
|
||||||
set "_White="40;37m""
|
set "_White="40;37m""
|
||||||
set "_Green="40;92m""
|
set "_Green="40;92m""
|
||||||
set "_Yellow="40;93m""
|
set "_Yellow="40;93m""
|
||||||
|
@ -120,7 +147,7 @@ set "_Yellow="40;93m""
|
||||||
set "Red="Red" "white""
|
set "Red="Red" "white""
|
||||||
set "Gray="Darkgray" "white""
|
set "Gray="Darkgray" "white""
|
||||||
set "Green="DarkGreen" "white""
|
set "Green="DarkGreen" "white""
|
||||||
set "Magenta="Darkmagenta" "white""
|
set "Blue="Blue" "white""
|
||||||
set "_White="Black" "Gray""
|
set "_White="Black" "Gray""
|
||||||
set "_Green="Black" "Green""
|
set "_Green="Black" "Green""
|
||||||
set "_Yellow="Black" "Yellow""
|
set "_Yellow="Black" "Yellow""
|
||||||
|
@ -129,14 +156,21 @@ set "_Yellow="Black" "Yellow""
|
||||||
set _k38=
|
set _k38=
|
||||||
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:"
|
||||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
if %~z0 GEQ 200000 (
|
||||||
|
set "_exitmsg=Go back"
|
||||||
|
set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
|
||||||
|
) else (
|
||||||
|
set "_exitmsg=Exit"
|
||||||
|
set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
|
||||||
|
)
|
||||||
|
|
||||||
set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f"
|
set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f"
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %winbuild% LSS 14393 (
|
if %winbuild% LSS 14393 (
|
||||||
%eline%
|
%eline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo KMS38 Activation is supported for Windows 10/11/Server, build 14393 and later.
|
echo KMS38 Activation is supported for Windows 10/11/Server, build 14393 and later.
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
|
@ -165,7 +199,7 @@ setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%eline%
|
||||||
echo Script is launched from the temp folder,
|
echo Script is launched from the temp folder,
|
||||||
|
@ -180,8 +214,8 @@ goto dk_done
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
%nul1% fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%eline%
|
%eline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -190,6 +224,21 @@ goto dk_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
if %_unattended%==1 set quedit=1
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %_rem%==1 goto :k_uninstall
|
if %_rem%==1 goto :k_uninstall
|
||||||
|
|
||||||
:k_menu
|
:k_menu
|
||||||
|
@ -227,7 +276,7 @@ goto :k_menu
|
||||||
:k_menu2
|
:k_menu2
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode 102, 33
|
mode 108, 34
|
||||||
title KMS38 Activation
|
title KMS38 Activation
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
|
@ -276,7 +325,7 @@ if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1
|
||||||
|
|
||||||
if defined _eval (
|
if defined _eval (
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find /i "Eval" 1>nul && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && (
|
||||||
%eline%
|
%eline%
|
||||||
echo [%winos% ^| %winbuild%]
|
echo [%winos% ^| %winbuild%]
|
||||||
if defined _evalserv (
|
if defined _evalserv (
|
||||||
|
@ -288,7 +337,7 @@ echo Evaluation Editions cannot be activated.
|
||||||
echo You need to install full version of %winos%
|
echo You need to install full version of %winos%
|
||||||
echo:
|
echo:
|
||||||
echo Download it from here,
|
echo Download it from here,
|
||||||
echo https://massgrave.dev/genuine-installation-media.html
|
echo https://%mas%/genuine-installation-media.html
|
||||||
)
|
)
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
|
@ -307,7 +356,7 @@ if not exist "!_work!\clipup.exe" (
|
||||||
echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] version.
|
echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] version.
|
||||||
echo It's required for KMS38 Activation.
|
echo It's required for KMS38 Activation.
|
||||||
echo Check below page on how to activate it.
|
echo Check below page on how to activate it.
|
||||||
echo https://massgrave.dev/kms38.html
|
echo https://%mas%/kms38.html
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -317,14 +366,23 @@ goto dk_done
|
||||||
:: Check SKU value / Check in multiple places to find Edition change corruption
|
:: Check SKU value / Check in multiple places to find Edition change corruption
|
||||||
|
|
||||||
set osSKU=
|
set osSKU=
|
||||||
set regSKU=
|
set slcSKU=
|
||||||
set wmiSKU=
|
set wmiSKU=
|
||||||
|
set regSKU=
|
||||||
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo)
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3);
|
||||||
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%d1% $Sku = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformationDWORD('%info%', [ref]$Sku); $Sku
|
||||||
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set slcSKU=%%s)
|
||||||
|
if "%slcSKU%"=="0" set slcSKU=
|
||||||
|
if 1%slcSKU% NEQ +1%slcSKU% set slcSKU=
|
||||||
|
|
||||||
set osSKU=%wmiSKU%
|
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn %nul6%') do set "regSKU=%%a"
|
||||||
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
|
||||||
|
set osSKU=%slcSKU%
|
||||||
|
if not defined osSKU set osSKU=%wmiSKU%
|
||||||
if not defined osSKU set osSKU=%regSKU%
|
if not defined osSKU set osSKU=%regSKU%
|
||||||
|
|
||||||
if not defined osSKU (
|
if not defined osSKU (
|
||||||
|
@ -340,15 +398,16 @@ set error=
|
||||||
cls
|
cls
|
||||||
echo:
|
echo:
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
||||||
echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%]
|
for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if "%%j"=="" (set fullbuild=%%i) else (set fullbuild=%%i.%%j)
|
||||||
|
echo Checking OS Info [%winos% ^| %fullbuild% ^| %arch%]
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Check Windows Script Host
|
:: Check Windows Script Host
|
||||||
|
|
||||||
set _WSH=1
|
set _WSH=1
|
||||||
reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
|
reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled %nul2% | find /i "0x0" %nul1% && (set _WSH=0)
|
||||||
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 %nul2% | find /i "0x0" %nul1% && (set _WSH=0)
|
||||||
|
|
||||||
if %_WSH% EQU 0 (
|
if %_WSH% EQU 0 (
|
||||||
reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
|
reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
|
||||||
|
@ -384,7 +443,6 @@ set key=
|
||||||
set pkey=
|
set pkey=
|
||||||
set altkey=
|
set altkey=
|
||||||
set changekey=
|
set changekey=
|
||||||
set curedition=
|
|
||||||
set altedition=
|
set altedition=
|
||||||
|
|
||||||
if defined applist call :kms38data getkey
|
if defined applist call :kms38data getkey
|
||||||
|
@ -394,6 +452,14 @@ if defined applist if not defined key call :kms38fallback
|
||||||
|
|
||||||
if defined altkey (set key=%altkey%&set changekey=1)
|
if defined altkey (set key=%altkey%&set changekey=1)
|
||||||
|
|
||||||
|
set /a UBR=0
|
||||||
|
if %osSKU%==191 if defined altkey if defined altedition (
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR 2^>nul') do if not errorlevel 1 set /a UBR=%%b
|
||||||
|
if %winbuild% GEQ 19044 if !UBR! LSS 2788 (
|
||||||
|
call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if not defined key if defined notfoundaltactID (
|
if not defined key if defined notfoundaltactID (
|
||||||
call :dk_color %Red% "Checking Alternate Edition For KMS38 [%altedition% Activation ID Not Found]"
|
call :dk_color %Red% "Checking Alternate Edition For KMS38 [%altedition% Activation ID Not Found]"
|
||||||
)
|
)
|
||||||
|
@ -403,7 +469,7 @@ if not defined key if not defined _gvlk (
|
||||||
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
||||||
echo Unable to find this product in the supported product list.
|
echo Unable to find this product in the supported product list.
|
||||||
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
|
echo https://%mas%
|
||||||
echo:
|
echo:
|
||||||
goto dk_done
|
goto dk_done
|
||||||
)
|
)
|
||||||
|
@ -414,14 +480,14 @@ goto dk_done
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
if defined changekey (
|
if defined changekey (
|
||||||
call :dk_color %Magenta% "[%altedition%] Edition product key will be used to enable KMS38 activation."
|
call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable KMS38 activation."
|
||||||
echo:
|
echo:
|
||||||
)
|
)
|
||||||
|
|
||||||
set _partial=
|
set _partial=
|
||||||
if not defined key (
|
if not defined key (
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get PartialProductKey /value 2^>nul') do set "_partial=%%#"
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get PartialProductKey /value %nul6%') do set "_partial=%%#"
|
||||||
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" 2^>nul') do set "_partial=%%#"
|
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#"
|
||||||
call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK]
|
call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -440,7 +506,7 @@ echo Installing KMS Client Setup Key [%key%] [Successful]
|
||||||
) else (
|
) else (
|
||||||
call :dk_color %Red% "Installing KMS Client Setup Key [%key%] [Failed] !error_code!"
|
call :dk_color %Red% "Installing KMS Client Setup Key [%key%] [Failed] !error_code!"
|
||||||
if not defined error (
|
if not defined error (
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
set showfix=1
|
set showfix=1
|
||||||
)
|
)
|
||||||
set error=1
|
set error=1
|
||||||
|
@ -452,8 +518,8 @@ set error=1
|
||||||
:: Check activation ID for setting specific KMS host
|
:: Check activation ID for setting specific KMS host
|
||||||
|
|
||||||
set app=
|
set app=
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get ID /VALUE" 2^>nul') do call set "app=%%a"
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get ID /VALUE" %nul6%') do call set "app=%%a"
|
||||||
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL').Get()).ID | %% {echo ('ID='+$_)}" 2^>nul') do call set "app=%%a"
|
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL').Get()).ID | %% {echo ('ID='+$_)}" %nul6%') do call set "app=%%a"
|
||||||
|
|
||||||
if not defined app (
|
if not defined app (
|
||||||
call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..."
|
call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..."
|
||||||
|
@ -509,6 +575,11 @@ goto :k_final
|
||||||
:: In some cases clipup -v -o method fails and in some cases service restart method fails as well
|
:: In some cases clipup -v -o method fails and in some cases service restart method fails as well
|
||||||
:: To maximize success rate and get better error details, script will install tickets two times (service restart + clipup -v -o)
|
:: To maximize success rate and get better error details, script will install tickets two times (service restart + clipup -v -o)
|
||||||
|
|
||||||
|
if not exist %SystemRoot%\system32\ClipUp.exe (
|
||||||
|
call :dk_color %Red% "Checking ClipUp.exe File [Not found, aborting the process]"
|
||||||
|
goto :k_final
|
||||||
|
)
|
||||||
|
|
||||||
set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
|
set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
|
||||||
if not exist "%tdir%\" md "%tdir%\" %nul%
|
if not exist "%tdir%\" md "%tdir%\" %nul%
|
||||||
|
|
||||||
|
@ -518,7 +589,7 @@ if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q
|
||||||
|
|
||||||
:: Signature value is as it is, it's not encoded
|
:: Signature value is as it is, it's not encoded
|
||||||
:: Session ID is in Base64 encoded format. It's decoded value is "OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;GVLKExp=2038-01-19T03:14:07Z;DownlevelGenuineState=1;"
|
:: Session ID is in Base64 encoded format. It's decoded value is "OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;GVLKExp=2038-01-19T03:14:07Z;DownlevelGenuineState=1;"
|
||||||
:: Check https://massgrave.dev/kms38.html#Manual_Activation to see how it's generated
|
:: Check mass grave[.]dev/kms38.html#Manual_Activation to see how it's generated
|
||||||
|
|
||||||
set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA="
|
set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA="
|
||||||
set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA"
|
set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA"
|
||||||
|
@ -527,7 +598,7 @@ set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAV
|
||||||
copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
|
copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
|
||||||
|
|
||||||
if not exist "%tdir%\GenuineTicket.xml" (
|
if not exist "%tdir%\GenuineTicket.xml" (
|
||||||
call :dk_color %Red% "Generating GenuineTicket.xml [Failed]"
|
call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]"
|
||||||
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
||||||
goto :k_final
|
goto :k_final
|
||||||
) else (
|
) else (
|
||||||
|
@ -542,10 +613,10 @@ net stop sppsvc /y %nul%
|
||||||
net stop sppsvc /y %nul%
|
net stop sppsvc /y %nul%
|
||||||
net stop sppsvc /y %nul%
|
net stop sppsvc /y %nul%
|
||||||
|
|
||||||
sc query sppsvc | find /i "1 STOPPED" %nul% && (
|
sc query sppsvc | find /i "STOPPED" %nul% && (
|
||||||
echo Stopping sppsvc Service [Successful]
|
echo Stopping sppsvc Service [Successful]
|
||||||
) || (
|
) || (
|
||||||
call :dk_color %Red% "Stopping sppsvc Service [Failed]"
|
call :dk_color %Gray% "Stopping sppsvc Service [Failed]"
|
||||||
)
|
)
|
||||||
|
|
||||||
%_xmlexist% (
|
%_xmlexist% (
|
||||||
|
@ -566,6 +637,12 @@ clipup -v -o
|
||||||
|
|
||||||
set rebuildinfo=
|
set rebuildinfo=
|
||||||
|
|
||||||
|
if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat (
|
||||||
|
set error=1
|
||||||
|
set rebuildinfo=1
|
||||||
|
call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]"
|
||||||
|
)
|
||||||
|
|
||||||
%_xmlexist% (
|
%_xmlexist% (
|
||||||
set error=1
|
set error=1
|
||||||
set rebuildinfo=1
|
set rebuildinfo=1
|
||||||
|
@ -580,7 +657,7 @@ call :dk_color %Red% "Checking Ticket Migration [Failed]"
|
||||||
|
|
||||||
if defined applist if not defined showfix if defined rebuildinfo (
|
if defined applist if not defined showfix if defined rebuildinfo (
|
||||||
set showfix=1
|
set showfix=1
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
||||||
|
@ -619,8 +696,8 @@ goto :k_final
|
||||||
)
|
)
|
||||||
|
|
||||||
call :dk_color %Red% "Activation Failed"
|
call :dk_color %Red% "Activation Failed"
|
||||||
if not defined error call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
if not defined error call :dk_color %Blue% "%_fixmsg%"
|
||||||
call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot"
|
call :dk_color2 %Blue% "Check this page for help" %_Yellow% " https://%mas%/troubleshoot"
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
@ -645,9 +722,9 @@ if defined _k38 (
|
||||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([ScriptBlock]::Create($f[1])) -protect;"
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([ScriptBlock]::Create($f[1])) -protect;"
|
||||||
%nul% reg delete "HKLM\%specific_kms%" /f
|
%nul% reg delete "HKLM\%specific_kms%" /f
|
||||||
%nul% reg query "HKLM\%specific_kms%" && (
|
%nul% reg query "HKLM\%specific_kms%" && (
|
||||||
call :dk_color %Magenta% "Protect KMS38 By KMS [Successful] [Locked A Registry Key]"
|
call :dk_color %Blue% "Protect KMS38 From KMS [Successful] [Locked A Registry Key]"
|
||||||
) || (
|
) || (
|
||||||
call :dk_color %Red% "Protect KMS38 By KMS [Failed To Lock A Registry Key]"
|
call :dk_color %Red% "Protect KMS38 From KMS [Failed To Lock A Registry Key]"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -731,7 +808,7 @@ $key.SetAccessControl($acl)
|
||||||
:k_actinfo
|
:k_actinfo
|
||||||
|
|
||||||
set xpr=
|
set xpr=
|
||||||
for /f "tokens=* delims=" %%# in ('%psc% "$([DateTime]::Now.addMinutes(%gpr%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "xpr=%%#"
|
for /f "tokens=* delims=" %%# in ('%psc% "$([DateTime]::Now.addMinutes(%gpr%)).ToString('yyyy-MM-dd HH:mm:ss')" %nul6%') do set "xpr=%%#"
|
||||||
call :dk_color %Green% "%winos% is activated till !xpr!"
|
call :dk_color %Green% "%winos% is activated till !xpr!"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -740,8 +817,8 @@ exit /b
|
||||||
:k_checkexp
|
:k_checkexp
|
||||||
|
|
||||||
set gpr=0
|
set gpr=0
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get GracePeriodRemaining /VALUE" 2^>nul') do set "gpr=%%#"
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get GracePeriodRemaining /VALUE" %nul6%') do set "gpr=%%#"
|
||||||
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" 2^>nul') do set "gpr=%%#"
|
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" %nul6%') do set "gpr=%%#"
|
||||||
if %gpr% GTR 259200 (set _k38=1) else (set _k38=)
|
if %gpr% GTR 259200 (set _k38=1) else (set _k38=)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -749,8 +826,8 @@ exit /b
|
||||||
|
|
||||||
:dk_checkperm
|
:dk_checkperm
|
||||||
|
|
||||||
if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name /value 2>nul | findstr /i "Windows" 1>nul && set _perm=1||set _perm=
|
if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm=
|
||||||
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name | %% {echo ('Name='+$_)}" 2>nul | findstr /i "Windows" 1>nul && set _perm=1||set _perm=
|
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm=
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:: Refresh license status
|
:: Refresh license status
|
||||||
|
@ -765,8 +842,8 @@ exit /b
|
||||||
|
|
||||||
:dk_channel
|
:dk_channel
|
||||||
|
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get ProductKeyChannel /value 2^>nul') do set "_channel=%%#"
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get ProductKeyChannel /value %nul6%') do set "_channel=%%#"
|
||||||
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT ProductKeyChannel FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).ProductKeyChannel | %% {echo ('ProductKeyChannel='+$_)}" 2^>nul') do set "_channel=%%#"
|
if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT ProductKeyChannel FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).ProductKeyChannel | %% {echo ('ProductKeyChannel='+$_)}" %nul6%') do set "_channel=%%#"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:: Get Windows Activation IDs
|
:: Get Windows Activation IDs
|
||||||
|
@ -774,18 +851,31 @@ exit /b
|
||||||
:dk_actids
|
:dk_actids
|
||||||
|
|
||||||
set applist=
|
set applist=
|
||||||
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" %nul6%')"
|
||||||
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')"
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:: Get SvcRestartTask info
|
||||||
|
|
||||||
|
:gettaskinfo:
|
||||||
|
$task = Get-ScheduledTask | Where-Object { $_.TaskName -eq 'SvcRestartTask' -and $_.TaskPath -eq '\Microsoft\Windows\SoftwareProtectionPlatform\' }
|
||||||
|
$info = $task | Get-ScheduledTaskInfo
|
||||||
|
if ($info.LastRunTime -match 99) {
|
||||||
|
$task | Start-ScheduledTask
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
$info = $task | Get-ScheduledTaskInfo
|
||||||
|
}
|
||||||
|
"$($task.State) $($info.LastTaskResult) $($info.LastRunTime)"
|
||||||
|
:gettaskinfo:
|
||||||
|
|
||||||
:: Check wmic.exe
|
:: Check wmic.exe
|
||||||
|
|
||||||
:dk_ckeckwmic
|
:dk_ckeckwmic
|
||||||
|
|
||||||
set _wmic=0
|
set _wmic=0
|
||||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -800,8 +890,8 @@ set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::Brandi
|
||||||
|
|
||||||
set winos=
|
set winos=
|
||||||
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
||||||
echo "%winos%" | find /i "Windows" 1>nul || (
|
echo "%winos%" | find /i "Windows" %nul1% || (
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %nul6%') do set "winos=%%b"
|
||||||
if %winbuild% GEQ 22000 (
|
if %winbuild% GEQ 22000 (
|
||||||
set winos=!winos:Windows 10=Windows 11!
|
set winos=!winos:Windows 10=Windows 11!
|
||||||
)
|
)
|
||||||
|
@ -866,17 +956,33 @@ exit /b
|
||||||
|
|
||||||
:dk_errorcheck
|
:dk_errorcheck
|
||||||
|
|
||||||
|
set showfix=
|
||||||
|
|
||||||
|
:: Check corrupt services
|
||||||
|
|
||||||
|
set serv_cor=
|
||||||
|
for %%# in (%_serv%) do (
|
||||||
|
set _corrupt=
|
||||||
|
sc start %%# %nul%
|
||||||
|
if !errorlevel! EQU 1060 set _corrupt=1
|
||||||
|
sc query %%# %nul% || set _corrupt=1
|
||||||
|
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt (reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1)
|
||||||
|
if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#"))
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined serv_cor (
|
||||||
|
set error=1
|
||||||
|
call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]"
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Check disabled services
|
:: Check disabled services
|
||||||
|
|
||||||
set serv_ste=
|
set serv_ste=
|
||||||
for %%# in (%_serv%) do (
|
for %%# in (%_serv%) do (
|
||||||
set serv_dis=
|
|
||||||
reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v ImagePath %nul% || set serv_dis=1
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1
|
|
||||||
sc start %%# %nul%
|
sc start %%# %nul%
|
||||||
if !errorlevel! EQU 1058 set serv_dis=1
|
if !errorlevel! EQU 1058 (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
|
||||||
sc query %%# %nul% || set serv_dis=1
|
|
||||||
if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Change disabled services startup type to default
|
:: Change disabled services startup type to default
|
||||||
|
@ -919,7 +1025,7 @@ set errorcode=
|
||||||
set checkerror=
|
set checkerror=
|
||||||
net start %%# /y %nul%
|
net start %%# /y %nul%
|
||||||
set errorcode=!errorlevel!
|
set errorcode=!errorlevel!
|
||||||
sc query %%# | find /i "4 RUNNING" %nul% || set checkerror=1
|
sc query %%# | find /i "RUNNING" %nul% || set checkerror=1
|
||||||
|
|
||||||
sc start %%# %nul%
|
sc start %%# %nul%
|
||||||
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1)
|
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1)
|
||||||
|
@ -930,7 +1036,8 @@ if defined serv_e (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Starting Services [Failed] [%serv_e%]"
|
call :dk_color %Red% "Starting Services [Failed] [%serv_e%]"
|
||||||
echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && (
|
echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && (
|
||||||
call :dk_color %Magenta% "Restart the system to fix disabled service error 1058."
|
call :dk_color %Blue% "Restart the system to fix disabled service error 1058."
|
||||||
|
set showfix=1
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -940,61 +1047,51 @@ call :dk_color %Magenta% "Restart the system to fix disabled service error 1058.
|
||||||
|
|
||||||
if defined safeboot_option (
|
if defined safeboot_option (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Boot Mode " %Magenta% "[System is running in safe mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Boot Mode " %Blue% "[System is running in safe mode. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" 2>nul | find /i "IMAGE_STATE_COMPLETE" 1>nul || (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" %nul2% | find /i "IMAGE_STATE_COMPLETE" %nul1% || (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Audit Mode " %Magenta% "[System is running in Audit mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Audit Mode " %Blue% "[IMAGE_STATE_COMPLETE status not found. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking WinPE " %Magenta% "[System is running in WinPE mode. Run in normal mode.]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking WinPE " %Blue% "[System is running in WinPE mode. Run in normal mode.]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
|
%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || (
|
||||||
call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking Powershell [Not Responding]"
|
call :dk_color %Red% "Checking Powershell [Not Responding]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
set wmifailed=
|
|
||||||
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
|
|
||||||
set wmifailed=1
|
|
||||||
call :dk_color %Red% "Checking WMI [Not Responding] %_wmic%"
|
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix WMI option."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if not "%regSKU%"=="%wmiSKU%" (
|
|
||||||
call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
DISM /English /Online /Get-CurrentEdition %nul%
|
DISM /English /Online /Get-CurrentEdition %nul%
|
||||||
set error_code=%errorlevel%
|
set dism_error=%errorlevel%
|
||||||
cmd /c exit /b %error_code%
|
cmd /c exit /b %dism_error%
|
||||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
if %dism_error% NEQ 0 set "dism_error=[0x%=ExitCode%]"
|
||||||
if %error_code% NEQ 0 (
|
if %dism_error% NEQ 0 (
|
||||||
call :dk_color %Red% "Checking DISM [Not Responding] %error_code%"
|
call :dk_color %Red% "Checking DISM [Not Responding] %dism_error%"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]"
|
call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]"
|
||||||
|
if /i %dism_error%==[0x800F0805] (
|
||||||
|
for %%# in (4 125 126 188 191 205) do if "%osSKU%"=="%%#" (
|
||||||
|
call :dk_color %Blue% "Evaluation Windows can not be activated and different License install may lead to errors."
|
||||||
|
call :dk_color %Blue% "It is recommended to install full version of %winos%."
|
||||||
|
call :dk_color %Blue% "You can download it from https://%mas%/genuine-installation-media.html"
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1008,21 +1105,49 @@ call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
|
||||||
|
call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
set wmifailed=
|
||||||
|
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1%
|
||||||
|
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1%
|
||||||
|
|
||||||
|
if %errorlevel% NEQ 0 set wmifailed=1
|
||||||
|
echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants
|
||||||
|
if defined wmifailed (
|
||||||
|
set error=1
|
||||||
|
call :dk_color %Red% "Checking WMI [Not Responding]"
|
||||||
|
call :dk_color %Blue% "In MAS, Goto Troubleshoot and run Fix WMI option."
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||||
|
set /a "sum/=3"
|
||||||
|
if not defined officeact if not "%sum%"=="%slcSKU%" (
|
||||||
|
call :dk_color %Red% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
|
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking Rearm " %Magenta% "[System Restart Is Required]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color2 %Red% "Checking ClipSVC " %Magenta% "[System Restart Is Required]"
|
set showfix=1
|
||||||
|
call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" 2^>nul') do if /i %%b NEQ 0x0 (
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 (
|
||||||
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul%
|
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul%
|
||||||
call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found, Changing To 0]"
|
call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]"
|
||||||
net stop sppsvc /y %nul%
|
net stop sppsvc /y %nul%
|
||||||
net start sppsvc /y %nul%
|
net start sppsvc /y %nul%
|
||||||
set error=1
|
set error=1
|
||||||
|
@ -1031,7 +1156,24 @@ set error=1
|
||||||
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || (
|
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || (
|
||||||
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]"
|
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]"
|
||||||
|
call :dk_color %Blue% "Possibly Caused By Gaming Spoofers. Help: https://%mas%/troubleshoot"
|
||||||
set error=1
|
set error=1
|
||||||
|
set showfix=1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
set tokenstore=
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b"
|
||||||
|
if not exist "%tokenstore%\" (
|
||||||
|
set error=1
|
||||||
|
REM This code creates token folder only if it's missing and sets default permission for it
|
||||||
|
mkdir "%tokenstore%" %nul%
|
||||||
|
set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';"
|
||||||
|
set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;"
|
||||||
|
set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);"
|
||||||
|
set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;"
|
||||||
|
%psc% "!d!" %nul%
|
||||||
|
call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creating Now] [%tokenstore%\]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1049,44 +1191,43 @@ call :dk_color %Red% "Checking Activation IDs [Not Found]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
set tokenstore=
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore 2^>nul') do call set "tokenstore=%%b"
|
|
||||||
if not exist "%tokenstore%\" (
|
|
||||||
set error=1
|
|
||||||
call :dk_color %Red% "Checking SPP Token Folder [Not Found] [%tokenstore%\]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||||
set error=1
|
set error=1
|
||||||
call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]"
|
call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat (
|
|
||||||
set error=1
|
|
||||||
call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if not exist %SystemRoot%\system32\sppsvc.exe (
|
if not exist %SystemRoot%\system32\sppsvc.exe (
|
||||||
set error=1
|
set error=1
|
||||||
|
set showfix=1
|
||||||
call :dk_color %Red% "Checking sppsvc.exe File [Not Found]"
|
call :dk_color %Red% "Checking sppsvc.exe File [Not Found]"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
:: Below checks are performed if required services are not disabled + slmgr /dlv errorlevel is not Zero + Rearm restart is not required + WMI is working fine
|
set task=
|
||||||
|
set taskerror=
|
||||||
|
if not defined wmifailed if not defined officeact (
|
||||||
|
for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':gettaskinfo\:.*';iex ($f[1]);"') do (set task=%%a)
|
||||||
|
echo "!task!" | find /i "Ready 0 " %nul% || set taskerror=1
|
||||||
|
echo "!task!" | find "99" %nul% && set taskerror=1
|
||||||
|
if defined taskerror (
|
||||||
|
call :dk_color %Gray% "Checking SvcRestartTask Last Run [Issues Found, !task!]"
|
||||||
|
call :dk_color %Gray% "Windows may face issues in keeping activation. Help: https://%mas%/troubleshoot"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
:: Below checks are performed if required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before
|
||||||
|
|
||||||
set showfix=
|
|
||||||
set wpaerror=
|
set wpaerror=
|
||||||
set permerror=
|
set permerror=
|
||||||
if not defined serv_cste if /i not %error_code%==0 if /i not %error_code%==0xC004D302 if not defined wmifailed (
|
if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix (
|
||||||
|
|
||||||
REM This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems.
|
REM This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems.
|
||||||
|
|
||||||
if %winbuild% GEQ 14393 (
|
if %winbuild% GEQ 14393 (
|
||||||
set /a count=0
|
set /a count=0
|
||||||
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" 2^>nul') do set /a count+=1
|
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" %nul6%') do set /a count+=1
|
||||||
for /L %%# in (1,1,!count!) do (
|
for /L %%# in (1,1,!count!) do (
|
||||||
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
||||||
)
|
)
|
||||||
|
@ -1108,8 +1249,8 @@ if !errorlevel!==2 set permerror=1
|
||||||
if defined permerror call :dk_color %Red% "Checking SPP Permissions [Error Found]"
|
if defined permerror call :dk_color %Red% "Checking SPP Permissions [Error Found]"
|
||||||
|
|
||||||
set showfix=1
|
set showfix=1
|
||||||
call :dk_color %Magenta% "In MAS, Goto Troubleshoot and run Fix Licensing option."
|
call :dk_color %Blue% "%_fixmsg%"
|
||||||
if not defined permerror call :dk_color %Magenta% "If activation still fails then run Fix WPA Registry option."
|
if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b
|
exit /b
|
||||||
|
@ -1141,7 +1282,7 @@ exit /b
|
||||||
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 %_exitmsg%..."
|
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
||||||
pause >nul
|
pause %nul1%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -1178,10 +1319,10 @@ cd918a57-a41b-4c82-8dce-1a538e221a83_7HN%f%RX-D7%f%KGG-3K4%f%RQ-4W%f%PJ4-YT%f%DF
|
||||||
43d9af6e-5e86-4be8-a797-d072a046896c_K9F%f%YF-G6%f%NCK-73M%f%32-XM%f%VPY-F9%f%DRR_120_ServerARM64_RS4
|
43d9af6e-5e86-4be8-a797-d072a046896c_K9F%f%YF-G6%f%NCK-73M%f%32-XM%f%VPY-F9%f%DRR_120_ServerARM64_RS4
|
||||||
e0c42288-980c-4788-a014-c080d2e1926e_NW6%f%C2-QM%f%PVW-D7K%f%KK-3G%f%KT6-VC%f%FB2_121_Education
|
e0c42288-980c-4788-a014-c080d2e1926e_NW6%f%C2-QM%f%PVW-D7K%f%KK-3G%f%KT6-VC%f%FB2_121_Education
|
||||||
3c102355-d027-42c6-ad23-2e7ef8a02585_2WH%f%4N-8Q%f%GBV-H22%f%JP-CT%f%43Q-MD%f%WWJ_122_EducationN
|
3c102355-d027-42c6-ad23-2e7ef8a02585_2WH%f%4N-8Q%f%GBV-H22%f%JP-CT%f%43Q-MD%f%WWJ_122_EducationN
|
||||||
32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7X%f%TQ-FN%f%8P6-TTK%f%YV-9D%f%4CC-J4%f%62D_125_EnterpriseS_RS5,VB
|
32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7X%f%TQ-FN%f%8P6-TTK%f%YV-9D%f%4CC-J4%f%62D_125_EnterpriseS_RS5,VB,Ge
|
||||||
2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCP%f%HK-NF%f%MTC-H88%f%MJ-PF%f%HPY-QJ%f%4BJ_125_EnterpriseS_RS1
|
2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCP%f%HK-NF%f%MTC-H88%f%MJ-PF%f%HPY-QJ%f%4BJ_125_EnterpriseS_RS1
|
||||||
7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNM%f%TR-4C%f%88C-JK8%f%YV-HQ%f%7T2-76%f%DF9_125_EnterpriseS_TH1
|
7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNM%f%TR-4C%f%88C-JK8%f%YV-HQ%f%7T2-76%f%DF9_125_EnterpriseS_TH1
|
||||||
7103a333-b8c8-49cc-93ce-d37c09687f92_92N%f%FX-8D%f%JQP-P6B%f%BQ-TH%f%F9C-7C%f%G2H_126_EnterpriseSN_RS5,VB
|
7103a333-b8c8-49cc-93ce-d37c09687f92_92N%f%FX-8D%f%JQP-P6B%f%BQ-TH%f%F9C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge
|
||||||
9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFF%f%DN-GR%f%T3P-VKW%f%WX-X7%f%T3R-8B%f%639_126_EnterpriseSN_RS1
|
9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFF%f%DN-GR%f%T3P-VKW%f%WX-X7%f%T3R-8B%f%639_126_EnterpriseSN_RS1
|
||||||
87b838b7-41b6-4590-8318-5797951d8529_2F7%f%7B-TN%f%FGY-69Q%f%QF-B8%f%YKP-D6%f%9TJ_126_EnterpriseSN_TH1
|
87b838b7-41b6-4590-8318-5797951d8529_2F7%f%7B-TN%f%FGY-69Q%f%QF-B8%f%YKP-D6%f%9TJ_126_EnterpriseSN_TH1
|
||||||
39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFN%f%D9-D3%f%Y9C-J3K%f%KY-6R%f%PVP-2D%f%PYV_145_ServerDatacenterACor_FE
|
39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFN%f%D9-D3%f%Y9C-J3K%f%KY-6R%f%PVP-2D%f%PYV_145_ServerDatacenterACor_FE
|
||||||
|
@ -1202,13 +1343,13 @@ e38454fb-41a4-4f59-a5dc-25080e354730_44R%f%PN-FT%f%Y23-9VT%f%TB-MP%f%9BX-T8%f%4F
|
||||||
ec868e65-fadf-4759-b23e-93fe37f2cc29_CPW%f%HC-NT%f%2C7-VYW%f%78-DH%f%DB2-PG%f%3GK_175_ServerRdsh_RS5
|
ec868e65-fadf-4759-b23e-93fe37f2cc29_CPW%f%HC-NT%f%2C7-VYW%f%78-DH%f%DB2-PG%f%3GK_175_ServerRdsh_RS5
|
||||||
e4db50ea-bda1-4566-b047-0ca50abc6f07_7NB%f%T4-WG%f%BQX-MP4%f%H7-QX%f%FF8-YP%f%3KX_175_ServerRdsh_RS3
|
e4db50ea-bda1-4566-b047-0ca50abc6f07_7NB%f%T4-WG%f%BQX-MP4%f%H7-QX%f%FF8-YP%f%3KX_175_ServerRdsh_RS3
|
||||||
0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBT%f%WJ-3D%f%R69-3C4%f%V8-C2%f%6MC-GQ%f%9M6_183_CloudE
|
0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBT%f%WJ-3D%f%R69-3C4%f%V8-C2%f%6MC-GQ%f%9M6_183_CloudE
|
||||||
59eb965c-9150-42b7-a0ec-22151b9897c5_KBN%f%8V-HF%f%GQ4-MGX%f%VD-34%f%7P6-PD%f%QGT_191_IoTEnterpriseS_NI
|
59eb965c-9150-42b7-a0ec-22151b9897c5_KBN%f%8V-HF%f%GQ4-MGX%f%VD-34%f%7P6-PD%f%QGT_191_IoTEnterpriseS_VB,NI
|
||||||
d30136fc-cb4b-416e-a23d-87207abc44a9_6XN%f%7V-PC%f%BDC-BDB%f%RH-8D%f%QY7-G6%f%R44_202_CloudEditionN
|
d30136fc-cb4b-416e-a23d-87207abc44a9_6XN%f%7V-PC%f%BDC-BDB%f%RH-8D%f%QY7-G6%f%R44_202_CloudEditionN
|
||||||
ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D%f%7F-N4%f%9CB-WQR%f%8W-TB%f%J73-FM%f%8RX_203_CloudEdition
|
ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D%f%7F-N4%f%9CB-WQR%f%8W-TB%f%J73-FM%f%8RX_203_CloudEdition
|
||||||
19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTB%f%V8-9K%f%7Q8-V27%f%C6-M2%f%BTV-KH%f%MXV_407_ServerTurbine
|
19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTB%f%V8-9K%f%7Q8-V27%f%C6-M2%f%BTV-KH%f%MXV_407_ServerTurbine
|
||||||
) do (
|
) do (
|
||||||
for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
|
for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
|
||||||
if %1==getkey if not defined key echo "!applist!" | find /i "%%A" >nul && set key=%%B
|
if %1==getkey if not defined key echo "!applist!" | find /i "%%A" %nul1% && set key=%%B
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
@ -1216,7 +1357,6 @@ exit /b
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Below code is used to get alternate edition name and key if current edition doesn't support KMS38 activation
|
:: Below code is used to get alternate edition name and key if current edition doesn't support KMS38 activation
|
||||||
:: ProfessionalCountrySpecific won't be converted because it's not a good idea to change CountrySpecific editions
|
|
||||||
|
|
||||||
:: 1st column = Current SKU ID
|
:: 1st column = Current SKU ID
|
||||||
:: 2nd column = Current Edition Name
|
:: 2nd column = Current Edition Name
|
||||||
|
@ -1233,16 +1373,17 @@ set notfoundaltactID=
|
||||||
if %_NoEditionChange%==1 exit /b
|
if %_NoEditionChange%==1 exit /b
|
||||||
|
|
||||||
for %%# in (
|
for %%# in (
|
||||||
188_IoTEnterprise_______________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPP%f%R9-FWD%f%CX-D2%f%C8J-H872%f%K-2Y%f%T43_Enterprise
|
188_IoTEnterprise__________________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPP%f%R9-FWD%f%CX-D2%f%C8J-H872%f%K-2Y%f%T43_Enterprise
|
||||||
191_IoTEnterpriseS-2021_________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7X%f%TQ-FN8%f%P6-TT%f%KYV-9D4C%f%C-J4%f%62D_EnterpriseS-2021
|
191_IoTEnterpriseS-2021____________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7X%f%TQ-FN8%f%P6-TT%f%KYV-9D4C%f%C-J4%f%62D_EnterpriseS-2021
|
||||||
205_IoTEnterpriseSK_____________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN%f%8V-HFG%f%Q4-MG%f%XVD-347P%f%6-PD%f%QGT_IoTEnterpriseS-Win11
|
205_IoTEnterpriseSK________________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN%f%8V-HFG%f%Q4-MG%f%XVD-347P%f%6-PD%f%QGT_IoTEnterpriseS
|
||||||
138_ProfessionalSingleLanguage__a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W26%f%9N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX_Professional
|
138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W26%f%9N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX_Professional
|
||||||
|
139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_2de67392-b7a7-462a-b1ca-108dd189f588_W26%f%9N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX_Professional
|
||||||
|
139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_2de67392-b7a7-462a-b1ca-108dd189f588_W26%f%9N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX_Professional
|
||||||
) do (
|
) do (
|
||||||
for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A (
|
for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A (
|
||||||
echo "!applist!" | find /i "%%C" 1>nul && (
|
echo "!applist!" | find /i "%%C" %nul1% && (
|
||||||
echo "!applist!" | find /i "%%D" 1>nul && (
|
echo "!applist!" | find /i "%%D" %nul1% && (
|
||||||
set altkey=%%E
|
set altkey=%%E
|
||||||
set curedition=%%B
|
|
||||||
set altedition=%%F
|
set altedition=%%F
|
||||||
) || (
|
) || (
|
||||||
set altedition=%%F
|
set altedition=%%F
|
||||||
|
@ -1254,3 +1395,4 @@ set notfoundaltactID=1
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<html>
|
||||||
|
<meta http-equiv="refresh" content="0; url=https://massgrave.dev/ohook.html#Custom_sppcdll_Info">
|
||||||
|
</html>
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -20,9 +20,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -30,6 +36,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f 1>nul
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -46,22 +56,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -96,8 +118,7 @@ set _unattendedact=
|
||||||
set _args=%*
|
set _args=%*
|
||||||
if defined _args set _args=%_args:"=%
|
if defined _args set _args=%_args:"=%
|
||||||
if defined _args (
|
if defined _args (
|
||||||
set _unattended=1
|
echo "%_args%" | find /i "/KMS" >nul && set _unattended=1
|
||||||
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
|
||||||
|
@ -116,9 +137,9 @@ if /i "%%A"=="-el" (set _elev=1
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
set winbuild=1
|
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
|
@ -136,7 +157,7 @@ if %_Debug% EQU 1 set _unattended=1
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
if %winbuild% LSS 7600 (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo Project is supported for Windows 7/8/8.1/10/11 and their Server equivalent.
|
echo Project is supported for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||||
goto Done
|
goto Done
|
||||||
)
|
)
|
||||||
|
@ -182,7 +203,7 @@ goto Done
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
>nul fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%nceline%
|
%nceline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -191,6 +212,21 @@ goto Done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
if defined _unattended set quedit=1
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit 2>nul | find /i "0x0" %nul% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||||
|
|
||||||
:: Check not x86 Windows
|
:: Check not x86 Windows
|
||||||
|
@ -252,7 +288,7 @@ reg query %kNext% /v MigrationToV5Done 2>nul | find /i "0x1" %nul% && call :offi
|
||||||
|
|
||||||
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 && (
|
||||||
find /i "Ver:1.8" %ProgramData%\Activation-Renewal\Activation_task.cmd %nul% && set _tskinstalled=1
|
find /i "Ver:1.9" "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" %nul% && set _tskinstalled=1
|
||||||
)
|
)
|
||||||
|
|
||||||
set _oldtsk=
|
set _oldtsk=
|
||||||
|
@ -382,7 +418,12 @@ set "_log=%~dpn0"
|
||||||
set "_work=%~dp0"
|
set "_work=%~dp0"
|
||||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||||
set _UNC=0
|
set _UNC=0
|
||||||
if "%_work:~0,2%"=="\\" set _UNC=1
|
if "%_work:~0,2%"=="\\" (
|
||||||
|
set _UNC=1
|
||||||
|
) else (
|
||||||
|
net use %~d0 %_Null%
|
||||||
|
if not errorlevel 1 set _UNC=1
|
||||||
|
)
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "_dsk=%%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 "_dsk=%%b"
|
||||||
if exist "%PUBLIC%\Desktop\desktop.ini" set "_dsk=%PUBLIC%\Desktop"
|
if exist "%PUBLIC%\Desktop\desktop.ini" set "_dsk=%PUBLIC%\Desktop"
|
||||||
set "_mO21a=Detected Office 2021 C2R Retail is activated"
|
set "_mO21a=Detected Office 2021 C2R Retail is activated"
|
||||||
|
@ -407,6 +448,8 @@ if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum
|
||||||
set "ESUEditions=ServerDatacenter,ServerDatacenterCore,ServerDatacenterV,ServerDatacenterVCore,ServerStandard,ServerStandardCore,ServerStandardV,ServerStandardVCore,ServerEnterprise,ServerEnterpriseCore,ServerEnterpriseV,ServerEnterpriseVCore"
|
set "ESUEditions=ServerDatacenter,ServerDatacenterCore,ServerDatacenterV,ServerDatacenterVCore,ServerStandard,ServerStandardCore,ServerStandardV,ServerStandardVCore,ServerEnterprise,ServerEnterpriseCore,ServerEnterpriseV,ServerEnterpriseVCore"
|
||||||
)
|
)
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
set UBR=0
|
||||||
|
if %winbuild% GEQ 7601 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR 2^>nul') do if not errorlevel 1 set /a UBR=%%b
|
||||||
set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf""
|
set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf""
|
||||||
set "_csm=cscript.exe //NoLogo //Job:WmiMethod "%~nx0?.wsf""
|
set "_csm=cscript.exe //NoLogo //Job:WmiMethod "%~nx0?.wsf""
|
||||||
set "_csp=cscript.exe //NoLogo //Job:WmiPKey "%~nx0?.wsf""
|
set "_csp=cscript.exe //NoLogo //Job:WmiPKey "%~nx0?.wsf""
|
||||||
|
@ -437,7 +480,7 @@ pushd "!_work!"
|
||||||
|
|
||||||
if not defined _unattended (
|
if not defined _unattended (
|
||||||
mode con cols=98 lines=31
|
mode con cols=98 lines=31
|
||||||
%nul% %psc% "&%_buf%"
|
%psc% "&%_buf%"
|
||||||
title %_title%
|
title %_title%
|
||||||
) else (
|
) else (
|
||||||
title Online KMS Activation
|
title Online KMS Activation
|
||||||
|
@ -608,7 +651,10 @@ IF %winbuild% LSS 14393 (
|
||||||
)
|
)
|
||||||
IF NOT "%EditionWMI%"=="" SET "EditionID=%EditionWMI%"
|
IF NOT "%EditionWMI%"=="" SET "EditionID=%EditionWMI%"
|
||||||
IF /I "%EditionID%"=="IoTEnterprise" SET "EditionID=Enterprise"
|
IF /I "%EditionID%"=="IoTEnterprise" SET "EditionID=Enterprise"
|
||||||
IF /I "%EditionID%"=="IoTEnterpriseS" IF %winbuild% LSS 22610 SET "EditionID=EnterpriseS"
|
IF /I "%EditionID%"=="IoTEnterpriseS" IF %winbuild% LSS 22610 (
|
||||||
|
SET "EditionID=EnterpriseS"
|
||||||
|
IF %winbuild% GEQ 19041 IF %UBR% GEQ 2788 SET "EditionID=IoTEnterpriseS"
|
||||||
|
)
|
||||||
IF /I "%EditionID%"=="ProfessionalSingleLanguage" SET "EditionID=Professional"
|
IF /I "%EditionID%"=="ProfessionalSingleLanguage" SET "EditionID=Professional"
|
||||||
IF /I "%EditionID%"=="ProfessionalCountrySpecific" SET "EditionID=Professional"
|
IF /I "%EditionID%"=="ProfessionalCountrySpecific" SET "EditionID=Professional"
|
||||||
IF /I "%EditionID%"=="EnterpriseG" SET Win10Gov=1
|
IF /I "%EditionID%"=="EnterpriseG" SET Win10Gov=1
|
||||||
|
@ -2220,6 +2266,7 @@ if %_C16Msg% EQU 1 set _CtRMsg=1
|
||||||
if %_C15Msg% EQU 1 set _CtRMsg=1
|
if %_C15Msg% EQU 1 set _CtRMsg=1
|
||||||
if %_Office16% EQU 1 (
|
if %_Office16% EQU 1 (
|
||||||
for %%a in (%_RetIds%,ProPlus) do set "_%%a="
|
for %%a in (%_RetIds%,ProPlus) do set "_%%a="
|
||||||
|
for %%A in (19,21) do call :officeLoc %%A
|
||||||
)
|
)
|
||||||
if %_Office15% EQU 1 (
|
if %_Office15% EQU 1 (
|
||||||
for %%a in (%_R15Ids%,ProPlus) do set "_%%a="
|
for %%a in (%_R15Ids%,ProPlus) do set "_%%a="
|
||||||
|
@ -3314,6 +3361,11 @@ echo Deleting [Folder] %ProgramData%\Activation-Renewal\
|
||||||
rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul%
|
rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul%
|
||||||
)
|
)
|
||||||
|
|
||||||
|
If exist "%ProgramFiles%\Activation-Renewal\" (
|
||||||
|
echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\
|
||||||
|
rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul%
|
||||||
|
)
|
||||||
|
|
||||||
reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (
|
reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (
|
||||||
echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office
|
echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office
|
||||||
Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul%
|
Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul%
|
||||||
|
@ -3321,13 +3373,13 @@ Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul%
|
||||||
|
|
||||||
reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && (set error_=1)
|
reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && (set error_=1)
|
||||||
reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && (set error_=1)
|
reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && (set error_=1)
|
||||||
reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Run_Once" >nul && (set error_=1)
|
reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script" >nul && (set error_=1)
|
||||||
reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Run_Once" >nul && (set error_=1)
|
|
||||||
If exist "%windir%\Online_KMS_Activation_Script\" (set error_=1)
|
If exist "%windir%\Online_KMS_Activation_Script\" (set error_=1)
|
||||||
reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (set error_=1)
|
reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (set error_=1)
|
||||||
if exist "%ProgramData%\Online_KMS_Activation.cmd" (set error_=1)
|
if exist "%ProgramData%\Online_KMS_Activation.cmd" (set error_=1)
|
||||||
if exist "%ProgramData%\Online_KMS_Activation\" (set error_=1)
|
if exist "%ProgramData%\Online_KMS_Activation\" (set error_=1)
|
||||||
if exist "%ProgramData%\Activation-Renewal\" (set error_=1)
|
if exist "%ProgramData%\Activation-Renewal\" (set error_=1)
|
||||||
|
if exist "%ProgramFiles%\Activation-Renewal\" (set error_=1)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:=========================================================================================================================================
|
:=========================================================================================================================================
|
||||||
|
@ -3339,7 +3391,7 @@ mode con cols=91 lines=30
|
||||||
title Install Activation Auto-Renewal
|
title Install Activation Auto-Renewal
|
||||||
|
|
||||||
set error_=
|
set error_=
|
||||||
set "_dest=%ProgramData%\Activation-Renewal"
|
set "_dest=%ProgramFiles%\Activation-Renewal"
|
||||||
set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks"
|
set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks"
|
||||||
|
|
||||||
call :clearstuff %nul%
|
call :clearstuff %nul%
|
||||||
|
@ -3352,7 +3404,7 @@ goto :RenDone
|
||||||
)
|
)
|
||||||
|
|
||||||
if not exist "%_dest%\" md "%_dest%\" %nul%
|
if not exist "%_dest%\" md "%_dest%\" %nul%
|
||||||
set "_temp=%SystemRoot%\Temp\_taskwork"
|
set "_temp=%SystemRoot%\Temp\_taskwork_%Random%"
|
||||||
|
|
||||||
set nil=
|
set nil=
|
||||||
if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul%
|
if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul%
|
||||||
|
@ -3364,7 +3416,7 @@ if defined ActTask (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /r
|
||||||
if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul%
|
if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul%
|
||||||
|
|
||||||
call :createInfo.txt
|
call :createInfo.txt
|
||||||
%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@REM Dummy ' + '%random%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII);"
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@REM Dummy ' + '%random%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII);"
|
||||||
title Install Activation Auto-Renewal
|
title Install Activation Auto-Renewal
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -3445,9 +3497,9 @@ echo Activation-Run_Once [Activation Task - deletes itself once activated]
|
||||||
echo The scheduled tasks runs only if the system is connected to the Internet.
|
echo The scheduled tasks runs only if the system is connected to the Internet.
|
||||||
echo:
|
echo:
|
||||||
echo - Files
|
echo - Files
|
||||||
echo C:\ProgramData\Activation-Renewal\Activation_task.cmd
|
echo C:\Program Files\Activation-Renewal\Activation_task.cmd
|
||||||
echo C:\ProgramData\Activation-Renewal\Info.txt
|
echo C:\Program Files\Activation-Renewal\Info.txt
|
||||||
echo C:\ProgramData\Activation-Renewal\Logs.txt
|
echo C:\Program Files\Activation-Renewal\Logs.txt
|
||||||
echo ______________________________________________________________________________________________
|
echo ______________________________________________________________________________________________
|
||||||
echo:
|
echo:
|
||||||
echo Online KMS Activation Script is a part of 'Microsoft_Activation_Scripts' [MAS] project.
|
echo Online KMS Activation Script is a part of 'Microsoft_Activation_Scripts' [MAS] project.
|
||||||
|
@ -3516,7 +3568,7 @@ exit /b
|
||||||
</Settings>
|
</Settings>
|
||||||
<Actions Context="LocalSystem">
|
<Actions Context="LocalSystem">
|
||||||
<Exec>
|
<Exec>
|
||||||
<Command>%ProgramData%\Activation-Renewal\Activation_task.cmd</Command>
|
<Command>%ProgramFiles%\Activation-Renewal\Activation_task.cmd</Command>
|
||||||
<Arguments>Task</Arguments>
|
<Arguments>Task</Arguments>
|
||||||
</Exec>
|
</Exec>
|
||||||
</Actions>
|
</Actions>
|
||||||
|
@ -3573,7 +3625,7 @@ exit /b
|
||||||
</Settings>
|
</Settings>
|
||||||
<Actions Context="LocalSystem">
|
<Actions Context="LocalSystem">
|
||||||
<Exec>
|
<Exec>
|
||||||
<Command>%ProgramData%\Activation-Renewal\Activation_task.cmd</Command>
|
<Command>%ProgramFiles%\Activation-Renewal\Activation_task.cmd</Command>
|
||||||
<Arguments>Task</Arguments>
|
<Arguments>Task</Arguments>
|
||||||
</Exec>
|
</Exec>
|
||||||
</Actions>
|
</Actions>
|
||||||
|
@ -3586,7 +3638,7 @@ exit /b
|
||||||
|
|
||||||
:RenExport
|
:RenExport
|
||||||
|
|
||||||
%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);"
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -3647,7 +3699,7 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
|
||||||
)
|
)
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
if exist "%ProgramData%\Activation-Renewal\" call :_taskstart>>"%ProgramData%\Activation-Renewal\Logs.txt" & exit
|
if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" & exit
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
@ -4047,7 +4099,7 @@ if not [%KMS_IP%]==[!KMS_IP!] exit /b
|
||||||
goto :_taskgetserv
|
goto :_taskgetserv
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Ver:1.8
|
:: Ver:1.9
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
:_extracttask:
|
:_extracttask:
|
||||||
|
|
||||||
|
@ -4193,3 +4245,4 @@ UninstallLicenses("sppc.dll")
|
||||||
:cleanlicense:
|
:cleanlicense:
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: massgrave.dev
|
:: Homepage: mass grave[.]dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
@ -21,6 +21,13 @@ set _stg=0
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -28,6 +35,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f %nul1%
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -44,22 +55,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -71,24 +94,36 @@ cls
|
||||||
color 07
|
color 07
|
||||||
title Change Windows Edition
|
title Change Windows Edition
|
||||||
|
|
||||||
|
set _args=
|
||||||
set _elev=
|
set _elev=
|
||||||
if /i "%~1"=="-el" set _elev=1
|
|
||||||
|
|
||||||
set winbuild=1
|
set _args=%*
|
||||||
|
if defined _args set _args=%_args:"=%
|
||||||
|
if defined _args (
|
||||||
|
for %%A in (%_args%) do (
|
||||||
|
if /i "%%A"=="-el" set _elev=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
set "nul1=1>nul"
|
||||||
|
set "nul2=2>nul"
|
||||||
|
set "nul6=2^>nul"
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
|
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
set "Red="41;97m""
|
set "Red="41;97m""
|
||||||
set "Gray="100;97m""
|
set "Gray="100;97m""
|
||||||
set "Green="42;97m""
|
set "Green="42;97m""
|
||||||
set "Magenta="45;97m""
|
set "Blue="44;97m""
|
||||||
set "_White="40;37m""
|
set "_White="40;37m""
|
||||||
set "_Green="40;92m""
|
set "_Green="40;92m""
|
||||||
set "_Yellow="40;93m""
|
set "_Yellow="40;93m""
|
||||||
|
@ -96,7 +131,7 @@ set "_Yellow="40;93m""
|
||||||
set "Red="Red" "white""
|
set "Red="Red" "white""
|
||||||
set "Gray="Darkgray" "white""
|
set "Gray="Darkgray" "white""
|
||||||
set "Green="DarkGreen" "white""
|
set "Green="DarkGreen" "white""
|
||||||
set "Magenta="Darkmagenta" "white""
|
set "Blue="Blue" "white""
|
||||||
set "_White="Black" "Gray""
|
set "_White="Black" "Gray""
|
||||||
set "_Green="Black" "Green""
|
set "_Green="Black" "Green""
|
||||||
set "_Yellow="Black" "Yellow""
|
set "_Yellow="Black" "Yellow""
|
||||||
|
@ -111,7 +146,7 @@ if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
if %winbuild% LSS 7600 (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
@ -140,7 +175,7 @@ setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%eline%
|
||||||
echo Script is launched from the temp folder,
|
echo Script is launched from the temp folder,
|
||||||
|
@ -155,8 +190,8 @@ goto ced_done
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
%nul1% fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%eline%
|
%eline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -165,6 +200,20 @@ goto ced_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode 98, 30
|
mode 98, 30
|
||||||
|
|
||||||
|
@ -189,43 +238,41 @@ echo:
|
||||||
:: Check Activation IDs
|
:: Check Activation IDs
|
||||||
|
|
||||||
call :dk_actids
|
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
|
||||||
|
call :dk_actids
|
||||||
if not defined applist (
|
if not defined applist (
|
||||||
%eline%
|
%eline%
|
||||||
echo Activation IDs not found. Aborting...
|
echo Activation IDs not found. Aborting...
|
||||||
echo:
|
echo:
|
||||||
echo Check this page for help. https://massgrave.dev/troubleshoot
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Check Windows Edition
|
|
||||||
|
|
||||||
set osedition=
|
|
||||||
for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| find /i "Current Edition :"') do set "osedition=%%a"
|
|
||||||
|
|
||||||
if "%osedition%"=="" (
|
|
||||||
%eline%
|
|
||||||
DISM /English /Online /Get-CurrentEdition %nul%
|
|
||||||
cmd /c exit /b !errorlevel!
|
|
||||||
echo DISM command failed [Error Code - 0x!=ExitCode!]
|
|
||||||
echo OS Edition was not detected properly. Aborting...
|
|
||||||
echo:
|
|
||||||
echo Check this page for help. https://massgrave.dev/troubleshoot
|
|
||||||
goto ced_done
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Check SKU value
|
:: Check SKU value
|
||||||
|
|
||||||
set osSKU=
|
set osSKU=
|
||||||
set regSKU=
|
set slcSKU=
|
||||||
set wmiSKU=
|
set wmiSKU=
|
||||||
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo)
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3);
|
||||||
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
set d1=%d1% $Sku = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformationDWORD('%info%', [ref]$Sku); $Sku
|
||||||
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set slcSKU=%%s)
|
||||||
|
if "%slcSKU%"=="0" set slcSKU=
|
||||||
|
if 1%slcSKU% NEQ +1%slcSKU% set slcSKU=
|
||||||
|
|
||||||
set osSKU=%wmiSKU%
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
if not defined osSKU set osSKU=%regSKU%
|
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
|
||||||
|
set osSKU=%slcSKU%
|
||||||
|
if not defined osSKU set osSKU=%wmiSKU%
|
||||||
|
|
||||||
if not defined osSKU (
|
if not defined osSKU (
|
||||||
%eline%
|
%eline%
|
||||||
|
@ -233,14 +280,56 @@ echo SKU value was not detected properly. Aborting...
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Check Windows Edition
|
||||||
|
|
||||||
|
set osedition=
|
||||||
|
set dismedition=
|
||||||
|
set dismnotworking=
|
||||||
|
|
||||||
|
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [int], @([String], [int], [int].MakeByRefType(), [String].MakeByRefType()), 1, 3);
|
||||||
|
set d1=%d1% $editionName = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformation('Kernel-EditionName', 0, [ref]0, [ref]$editionName); $editionName
|
||||||
|
if %winbuild% GEQ 14393 for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set osedition=%%s)
|
||||||
|
if "%osedition%"=="0" set osedition=
|
||||||
|
|
||||||
|
if not defined osedition (
|
||||||
|
for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Workaround for a Windows bug in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional
|
||||||
|
|
||||||
|
if %osSKU%==164 set osedition=ProfessionalEducation
|
||||||
|
if %osSKU%==165 set osedition=ProfessionalEducationN
|
||||||
|
|
||||||
|
for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "dismedition=%%a"
|
||||||
|
if not defined dismedition set dismnotworking=1
|
||||||
|
|
||||||
|
if defined dismedition if not defined osedition set osedition=%dismedition%
|
||||||
|
|
||||||
|
if not defined osedition (
|
||||||
|
%eline%
|
||||||
|
DISM /English /Online /Get-CurrentEdition %nul%
|
||||||
|
cmd /c exit /b !errorlevel!
|
||||||
|
echo DISM command failed [Error Code - 0x!=ExitCode!]
|
||||||
|
echo OS Edition was not detected properly. Aborting...
|
||||||
|
echo:
|
||||||
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
set branch=
|
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"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b"
|
||||||
|
|
||||||
:: Check PowerShell
|
:: Check PowerShell
|
||||||
|
|
||||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || (
|
||||||
%eline%
|
%eline%
|
||||||
echo PowerShell is not responding properly. Aborting...
|
echo PowerShell is not responding properly. Aborting...
|
||||||
|
echo:
|
||||||
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -252,15 +341,22 @@ set _target=
|
||||||
set _dtarget=
|
set _dtarget=
|
||||||
set _ptarget=
|
set _ptarget=
|
||||||
set _ntarget=
|
set _ntarget=
|
||||||
|
set _wtarget=
|
||||||
|
|
||||||
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"))
|
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"))
|
if %winbuild% LSS 10240 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 "))
|
||||||
|
|
||||||
|
if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||||
|
call :ced_edilist
|
||||||
|
if /i "%osedition:~0,4%"=="Core" (set "_wtarget= Professional !_wtarget! ")
|
||||||
|
set "_dtarget= %_dtarget% !_wtarget! "
|
||||||
|
)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Block the change to/from CountrySpecific and CloudEdition editions
|
:: Block the change to/from CloudEdition editions
|
||||||
|
|
||||||
for %%# in (99 139 202 203) do if %osSKU%==%%# (
|
for %%# in (202 203) do if %osSKU%==%%# (
|
||||||
%eline%
|
%eline%
|
||||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||||
echo It's not recommended to change this installed edition to any other.
|
echo It's not recommended to change this installed edition to any other.
|
||||||
|
@ -268,8 +364,8 @@ echo Aborting...
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
for %%# in ( %_dtarget% %_ptarget% ) do (
|
for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" (
|
||||||
echo "!_target!" | find /i " %%# " 1>nul || set "_target=!_target! %%# "
|
echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# "
|
||||||
)
|
)
|
||||||
|
|
||||||
if defined _target (
|
if defined _target (
|
||||||
|
@ -281,6 +377,7 @@ echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_n
|
||||||
if not defined _ntarget (
|
if not defined _ntarget (
|
||||||
%line%
|
%line%
|
||||||
echo:
|
echo:
|
||||||
|
if defined dismnotworking call :dk_color %Red% "DISM.exe is not responding."
|
||||||
call :dk_color %Gray% "Target Edition not found."
|
call :dk_color %Gray% "Target Edition not found."
|
||||||
echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition.
|
echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition.
|
||||||
%line%
|
%line%
|
||||||
|
@ -294,7 +391,6 @@ 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=
|
||||||
|
@ -302,21 +398,16 @@ set targetedition=
|
||||||
%line%
|
%line%
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %Gray% "You can change the Edition [%osedition%] [%winbuild%] to one of the following."
|
call :dk_color %Gray% "You can change the Edition [%osedition%] [%winbuild%] to one of the following."
|
||||||
|
if defined dismnotworking (
|
||||||
|
call :dk_color %_Yellow% "Note - DISM.exe is not responding."
|
||||||
|
if /i "%osedition:~0,4%"=="Core" call :dk_color %_Yellow% " - You will see more edition options to choose once its changed to Pro."
|
||||||
|
)
|
||||||
%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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -324,10 +415,6 @@ set targetedition!counter!=%%A
|
||||||
echo:
|
echo:
|
||||||
echo [0] %_exitmsg%
|
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
|
||||||
|
@ -338,71 +425,26 @@ if %verified%==0 goto cedmenu2
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
cls
|
if %winbuild% LSS 10240 goto :cbsmethod
|
||||||
if %winbuild% GEQ 10240 (
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" goto :ced_change_server
|
||||||
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 [Recommended]
|
|
||||||
) else (
|
|
||||||
echo [1] Changepk Method [Recommended]
|
|
||||||
)
|
|
||||||
echo:
|
|
||||||
echo [2] CBS Upgrade Method [Alternative]
|
|
||||||
echo:
|
|
||||||
echo [0] Go back
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
echo Enter a menu option in the Keyboard:
|
|
||||||
choice /C:120 /N
|
|
||||||
set _el=!errorlevel!
|
|
||||||
if !_el!==3 goto :cedmenu2
|
|
||||||
if !_el!==2 goto :cbsmethod
|
|
||||||
if !_el!==1 REM
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
goto :cbsmethod
|
|
||||||
)
|
|
||||||
|
|
||||||
echo "%_ptarget%" | find /i "%targetedition%" 1>nul && (
|
|
||||||
echo "%_dtarget%" | find /i "%targetedition%" 1>nul || (
|
|
||||||
goto :cbsmethod
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
|
||||||
goto :ced_change_server
|
|
||||||
)
|
|
||||||
|
|
||||||
cls
|
cls
|
||||||
|
mode con cols=105 lines=32
|
||||||
|
|
||||||
set key=
|
set key=
|
||||||
set _chan=
|
set _chan=
|
||||||
set _changepk=0
|
set _dismapi=0
|
||||||
|
|
||||||
:: Check if changepk.exe or slmgr.vbs is required for edition upgrade
|
:: Check if DISM Api or slmgr.vbs is required for edition upgrade
|
||||||
|
|
||||||
if not exist "%SystemRoot%\System32\spp\tokens\skus\%targetedition%\" (
|
if not exist "%SystemRoot%\System32\spp\tokens\skus\%targetedition%\" (
|
||||||
set _changepk=1
|
set _dismapi=1
|
||||||
)
|
)
|
||||||
|
|
||||||
if /i "%osedition:~0,4%"=="Core" (
|
|
||||||
if /i not "%targetedition:~0,4%"=="Core" (
|
|
||||||
set _changepk=1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if %_changepk%==1 (
|
|
||||||
set "keyflow=Retail Volume:MAK Volume:GVLK OEM:NONSLP OEM:DM"
|
|
||||||
) else (
|
|
||||||
set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK"
|
set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK"
|
||||||
)
|
|
||||||
|
|
||||||
if not defined key call :ced_targetSKU %targetedition%
|
call :ced_targetSKU %targetedition%
|
||||||
if not defined key if defined targetSKU call :ced_windowskey
|
if defined targetSKU call :ced_windowskey
|
||||||
if defined key if defined pkeychannel set _chan=%pkeychannel%
|
if defined key if defined pkeychannel set _chan=%pkeychannel%
|
||||||
if not defined key call :changeeditiondata
|
if not defined key call :changeeditiondata
|
||||||
|
|
||||||
|
@ -410,57 +452,26 @@ 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:
|
||||||
echo https://massgrave.dev
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
%line%
|
:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" or DISM Api 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"
|
||||||
|
|
||||||
cls
|
cls
|
||||||
if %_changepk%==1 (
|
%line%
|
||||||
echo "%_chan%" | find /i "OEM" >NUL && (
|
|
||||||
%eline%
|
|
||||||
echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack of non OEM keys.
|
|
||||||
echo Non-OEM keys are required to change from Core to Non-Core Editions.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
:ced_loop
|
|
||||||
|
|
||||||
cls
|
|
||||||
if %_changepk%==1 (
|
|
||||||
for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do (
|
|
||||||
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
|
|
||||||
if not [%%#]==[] (
|
|
||||||
%eline%
|
|
||||||
echo Internet needs to be disconnected to change edition [%osedition%] to [%targetedition%]
|
|
||||||
echo Disconnect the Internet and then press any key...
|
|
||||||
pause >nul
|
|
||||||
goto ced_loop
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%]
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
if %_changepk%==1 (
|
if %_dismapi%==1 (
|
||||||
call :dk_color %Magenta% "Notes-"
|
call :dk_color %Blue% "Notes-"
|
||||||
echo:
|
|
||||||
echo - You can safely ignore if error appears in the upgrade Window,
|
|
||||||
echo but in that case you must manually reboot the system.
|
|
||||||
echo:
|
echo:
|
||||||
echo - Save your work before continue, system will auto restart.
|
echo - Save your work before continue, system will auto restart.
|
||||||
echo - You can connect to Internet after the system restart.
|
|
||||||
echo:
|
echo:
|
||||||
echo - You will need to activate with HWID option once the edition is changed.
|
echo - You will need to activate with HWID option once the edition is changed.
|
||||||
echo:
|
echo:
|
||||||
|
@ -470,7 +481,7 @@ if !errorlevel!==1 exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %_changepk%==0 (
|
if %_dismapi%==0 (
|
||||||
echo Installing %_chan% Key [%key%]
|
echo Installing %_chan% Key [%key%]
|
||||||
echo:
|
echo:
|
||||||
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
|
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
|
||||||
|
@ -488,14 +499,19 @@ echo:
|
||||||
call :dk_color %Gray% "Reboot is required to properly change the Edition."
|
call :dk_color %Gray% "Reboot is required to properly change the Edition."
|
||||||
) else (
|
) else (
|
||||||
call :dk_color %Red% "[Unsuccessful] [Error Code: 0x!=ExitCode!]"
|
call :dk_color %Red% "[Unsuccessful] [Error Code: 0x!=ExitCode!]"
|
||||||
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if %_changepk%==1 (
|
if %_dismapi%==1 (
|
||||||
echo:
|
echo:
|
||||||
echo Applying the command with %_chan% Key
|
echo Applying the DISM API method with %_chan% Key %key%
|
||||||
echo start changepk.exe /ProductKey %key%
|
echo:
|
||||||
start changepk.exe /ProductKey %key%
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%;"
|
||||||
|
timeout /t 3 %nul1%
|
||||||
|
echo:
|
||||||
|
call :dk_color %Blue% "Incase of errors, you must restart your system before trying again."
|
||||||
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
)
|
)
|
||||||
%line%
|
%line%
|
||||||
|
|
||||||
|
@ -507,13 +523,12 @@ goto ced_done
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode con cols=105 lines=32
|
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;}"
|
%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 Changing the Current Edition [%osedition%] to [%targetedition%]
|
echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%]
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
|
call :dk_color %Blue% "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:
|
echo:
|
||||||
choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : "
|
choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : "
|
||||||
if %errorlevel%==1 exit /b
|
if %errorlevel%==1 exit /b
|
||||||
|
@ -524,9 +539,11 @@ echo:
|
||||||
|
|
||||||
if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
|
if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
|
||||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;"
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;"
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
|
call :dk_color %Blue% "Incase of errors, you must restart your system before trying again."
|
||||||
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
%line%
|
%line%
|
||||||
|
|
||||||
goto ced_done
|
goto ced_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -535,23 +552,23 @@ goto ced_done
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode con cols=105 lines=32
|
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;}"
|
%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;}"
|
||||||
|
|
||||||
set key=
|
set key=
|
||||||
set pkeychannel=
|
set _chan=
|
||||||
set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM"
|
set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM"
|
||||||
call :changeeditionserverdata
|
|
||||||
|
|
||||||
if not defined key call :ced_targetSKU %targetedition%
|
call :ced_targetSKU %targetedition%
|
||||||
if not defined key if defined targetSKU call :ced_windowskey
|
if defined targetSKU call :ced_windowskey
|
||||||
if defined key if not defined pkeychannel call :dk_pkeychannel %key%
|
if defined key if defined pkeychannel set _chan=%pkeychannel%
|
||||||
|
if not defined key call :changeeditiondata
|
||||||
|
|
||||||
if not defined key (
|
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:
|
||||||
echo https://massgrave.dev
|
echo Check this page for help. https://%mas%/troubleshoot
|
||||||
goto ced_done
|
goto ced_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -559,13 +576,14 @@ goto ced_done
|
||||||
|
|
||||||
cls
|
cls
|
||||||
echo:
|
echo:
|
||||||
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%]
|
||||||
echo:
|
echo:
|
||||||
echo Applying the command with %pkeychannel% Key
|
echo Applying the command with %_chan% Key
|
||||||
echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
||||||
DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
||||||
|
|
||||||
call :dk_color %Magenta% "Make sure to restart the system."
|
call :dk_color %Blue% "You must restart the system at this stage."
|
||||||
|
echo Help: https://%mas%/troubleshoot
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
@ -573,7 +591,7 @@ call :dk_color %Magenta% "Make sure to restart the system."
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
||||||
pause >nul
|
pause %nul1%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -591,18 +609,27 @@ exit /b
|
||||||
:dk_actids
|
:dk_actids
|
||||||
|
|
||||||
set applist=
|
set applist=
|
||||||
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" %nul6%')"
|
||||||
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')"
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:: Get Edition list
|
||||||
|
|
||||||
|
:ced_edilist
|
||||||
|
|
||||||
|
if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get LicenseFamily /VALUE" %nul6%')"
|
||||||
|
if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')"
|
||||||
|
%chkedi% do (call set "_wtarget= !_wtarget! %%a ")
|
||||||
|
exit /b
|
||||||
|
|
||||||
:: Check wmic.exe
|
:: Check wmic.exe
|
||||||
|
|
||||||
:dk_ckeckwmic
|
:dk_ckeckwmic
|
||||||
|
|
||||||
set _wmic=0
|
set _wmic=0
|
||||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -617,8 +644,8 @@ set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::Brandi
|
||||||
|
|
||||||
set winos=
|
set winos=
|
||||||
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
||||||
echo "%winos%" | find /i "Windows" 1>nul || (
|
echo "%winos%" | find /i "Windows" %nul1% || (
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %nul6%') do set "winos=%%b"
|
||||||
if %winbuild% GEQ 22000 (
|
if %winbuild% GEQ 22000 (
|
||||||
set winos=!winos:Windows 10=Windows 11!
|
set winos=!winos:Windows 10=Windows 11!
|
||||||
)
|
)
|
||||||
|
@ -944,59 +971,92 @@ Restart-Computer
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Change edition using DISM API
|
||||||
|
:: Thanks to Alex (aka may, ave9858)
|
||||||
|
|
||||||
|
:dismapi:[
|
||||||
|
param (
|
||||||
|
[Parameter()]
|
||||||
|
[String]$TargetEdition,
|
||||||
|
|
||||||
|
[Parameter()]
|
||||||
|
[String]$Key
|
||||||
|
)
|
||||||
|
|
||||||
|
$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1)
|
||||||
|
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False)
|
||||||
|
$TB = $ModuleBuilder.DefineType(0)
|
||||||
|
|
||||||
|
[void]$TB.DefinePInvokeMethod('DismInitialize', 'DismApi.dll', 22, 1, [int], @([int], [IntPtr], [IntPtr]), 1, 3)
|
||||||
|
[void]$TB.DefinePInvokeMethod('DismOpenSession', 'DismApi.dll', 22, 1, [int], @([String], [IntPtr], [IntPtr], [UInt32].MakeByRefType()), 1, 3)
|
||||||
|
[void]$TB.DefinePInvokeMethod('_DismSetEdition', 'DismApi.dll', 22, 1, [int], @([UInt32], [String], [String], [IntPtr], [IntPtr], [IntPtr]), 1, 3)
|
||||||
|
$Dism = $TB.CreateType()
|
||||||
|
|
||||||
|
[void]$Dism::DismInitialize(2, 0, 0)
|
||||||
|
$Session = 0
|
||||||
|
[void]$Dism::DismOpenSession('DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}', 0, 0, [ref]$Session)
|
||||||
|
if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) {
|
||||||
|
Restart-Computer
|
||||||
|
}
|
||||||
|
:dismapi:]
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: 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
|
||||||
:: 4th column = Version name incase same Edition ID is used in different OS versions with different key
|
:: 4th 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 > Volume:MAK > Volume:GVLK > OEM:NONSLP > OEM:DM
|
:: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible.
|
||||||
:: OEM keys are in last because they can't be used in edition change if "changepk /productkey" method is needed instead of "slmgr /ipk"
|
:: Only RS3 and older version Generic keys are stored here, later ones are extracted from the pkeyhelper.dll itself
|
||||||
:: OEM keys are listed here because we don't have other keys for that edition
|
|
||||||
|
|
||||||
:changeeditiondata
|
:changeeditiondata
|
||||||
|
|
||||||
|
if %winbuild% GTR 17763 exit /b
|
||||||
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
|
||||||
|
|
||||||
set h=
|
set h=
|
||||||
for %%# in (
|
for %%# in (
|
||||||
44N%h%YX-TK%h%R9D-CCM2%h%D-V6%h%B8F-HQ%h%WWR__Volume:MAK_Enterprise
|
XGV%h%PP-NM%h%H47-7TT%h%HJ-W%h%3FW7-8HV%h%2C__OEM:NONSLP_Enterprise
|
||||||
D6R%h%D9-D4%h%N8T-RT9Q%h%X-YW%h%6YT-FC%h%WWJ______Retail_Starter
|
D6R%h%D9-D4%h%N8T-RT9%h%QX-Y%h%W6YT-FCW%h%WJ______Retail_Starter
|
||||||
3V6%h%Q6-NQ%h%XCX-V8YX%h%R-9Q%h%CYV-QP%h%FCT__Volume:MAK_EnterpriseN
|
3V6%h%Q6-NQ%h%XCX-V8Y%h%XR-9%h%QCYV-QPF%h%CT__Volume:MAK_EnterpriseN
|
||||||
3NF%h%XW-2T%h%27M-2BDW%h%6-4G%h%HRV-68%h%XRX______Retail_StarterN
|
3NF%h%XW-2T%h%27M-2BD%h%W6-4%h%GHRV-68X%h%RX______Retail_StarterN
|
||||||
VK7%h%JG-NP%h%HTM-C97J%h%M-9M%h%PGT-3V%h%66T______Retail_Professional
|
VK7%h%JG-NP%h%HTM-C97%h%JM-9%h%MPGT-3V6%h%6T______Retail_Professional
|
||||||
2B8%h%7N-8K%h%FHP-DKV6%h%R-Y2%h%C8J-PK%h%CKT______Retail_ProfessionalN
|
2B8%h%7N-8K%h%FHP-DKV%h%6R-Y%h%2C8J-PKC%h%KT______Retail_ProfessionalN
|
||||||
4CP%h%RK-NM%h%3K3-X6XX%h%Q-RX%h%X86-WX%h%CHW______Retail_CoreN
|
4CP%h%RK-NM%h%3K3-X6X%h%XQ-R%h%XX86-WXC%h%HW______Retail_CoreN
|
||||||
N24%h%34-X9%h%D7W-8PF6%h%X-8D%h%V9T-8T%h%YMD______Retail_CoreCountrySpecific
|
N24%h%34-X9%h%D7W-8PF%h%6X-8%h%DV9T-8TY%h%MD______Retail_CoreCountrySpecific
|
||||||
BT7%h%9Q-G7%h%N6G-PGBY%h%W-4Y%h%WX6-6F%h%4BT______Retail_CoreSingleLanguage
|
BT7%h%9Q-G7%h%N6G-PGB%h%YW-4%h%YWX6-6F4%h%BT______Retail_CoreSingleLanguage
|
||||||
YTM%h%G3-N6%h%DKC-DKB7%h%7-7M%h%9GH-8H%h%VX7______Retail_Core
|
YTM%h%G3-N6%h%DKC-DKB%h%77-7%h%M9GH-8HV%h%X7______Retail_Core
|
||||||
XKC%h%NC-J2%h%6Q9-KFHD%h%2-FK%h%THY-KD%h%72Y__OEM:NONSLP_PPIPro
|
XKC%h%NC-J2%h%6Q9-KFH%h%D2-F%h%KTHY-KD7%h%2Y__OEM:NONSLP_PPIPro
|
||||||
YNM%h%GQ-8R%h%YV3-4PGQ%h%3-C8%h%XTP-7C%h%FBY______Retail_Education
|
YNM%h%GQ-8R%h%YV3-4PG%h%Q3-C%h%8XTP-7CF%h%BY______Retail_Education
|
||||||
84N%h%GF-MH%h%BT6-FXBX%h%8-QW%h%JK7-DR%h%R8H______Retail_EducationN
|
84N%h%GF-MH%h%BT6-FXB%h%X8-Q%h%WJK7-DRR%h%8H______Retail_EducationN
|
||||||
KCN%h%VH-YK%h%WX8-GJJB%h%9-H9%h%FDT-6F%h%7W2__Volume:MAK_EnterpriseS_VB
|
NK9%h%6Y-D9%h%CD8-W44%h%CQ-R%h%8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1
|
||||||
VBX%h%36-N7%h%DDY-M9H6%h%2-83%h%BMJ-CP%h%R42__Volume:MAK_EnterpriseS_RS5
|
FWN%h%7H-PF%h%93Q-4GG%h%P8-M%h%8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH
|
||||||
PN3%h%KR-JX%h%M7T-46HM%h%4-MC%h%QGK-7X%h%PJQ__Volume:MAK_EnterpriseS_RS1
|
2DB%h%W3-N2%h%PJG-MVH%h%W3-G%h%7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1
|
||||||
DVW%h%KN-3G%h%CMV-Q2XF%h%4-DD%h%PGM-VQ%h%WWY__Volume:MAK_EnterpriseS_TH
|
NTX%h%6B-BR%h%YC2-K67%h%86-F%h%6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH
|
||||||
RQF%h%NW-9T%h%PM3-JQ73%h%T-QV%h%4VQ-DV%h%9PT__Volume:MAK_EnterpriseSN_VB
|
G3K%h%NM-CH%h%G6T-R36%h%X3-9%h%QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage
|
||||||
M33%h%WV-NH%h%Y3C-R7FP%h%M-BQ%h%GPT-23%h%9PG__Volume:MAK_EnterpriseSN_RS5
|
HNG%h%CC-Y3%h%8KG-QVK%h%8D-W%h%MWRK-X86%h%VK______Retail_ProfessionalCountrySpecific
|
||||||
2DB%h%W3-N2%h%PJG-MVHW%h%3-G7%h%TDK-9H%h%KR4__Volume:MAK_EnterpriseSN_RS1
|
DXG%h%7C-N3%h%6C4-C4H%h%TG-X%h%4T3X-2YV%h%77______Retail_ProfessionalWorkstation
|
||||||
NTX%h%6B-BR%h%YC2-K678%h%6-F6%h%MVQ-M7%h%V2X__Volume:MAK_EnterpriseSN_TH
|
WYP%h%NQ-8C%h%467-V2W%h%6J-T%h%X4WX-WT2%h%RQ______Retail_ProfessionalWorkstationN
|
||||||
G3K%h%NM-CH%h%G6T-R36X%h%3-9Q%h%DG6-8M%h%8K9______Retail_ProfessionalSingleLanguage
|
8PT%h%T6-RN%h%W4C-6V7%h%J2-C%h%2D3X-MHB%h%PB______Retail_ProfessionalEducation
|
||||||
HNG%h%CC-Y3%h%8KG-QVK8%h%D-WM%h%WRK-X8%h%6VK______Retail_ProfessionalCountrySpecific
|
GJT%h%YN-HD%h%MQY-FRR%h%76-H%h%VGC7-QPF%h%8P______Retail_ProfessionalEducationN
|
||||||
DXG%h%7C-N3%h%6C4-C4HT%h%G-X4%h%T3X-2Y%h%V77______Retail_ProfessionalWorkstation
|
C4N%h%TJ-CX%h%6Q2-VXD%h%MR-X%h%VKGM-F9D%h%JC__Volume:MAK_EnterpriseG
|
||||||
WYP%h%NQ-8C%h%467-V2W6%h%J-TX%h%4WX-WT%h%2RQ______Retail_ProfessionalWorkstationN
|
46P%h%N6-R9%h%BK9-CVH%h%KB-H%h%WQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN
|
||||||
8PT%h%T6-RN%h%W4C-6V7J%h%2-C2%h%D3X-MH%h%BPB______Retail_ProfessionalEducation
|
NJC%h%F7-PW%h%8QT-332%h%4D-6%h%88JX-2YV%h%66______Retail_ServerRdsh
|
||||||
GJT%h%YN-HD%h%MQY-FRR7%h%6-HV%h%GC7-QP%h%F8P______Retail_ProfessionalEducationN
|
V3W%h%VW-N2%h%PV2-CGW%h%C3-3%h%4QGF-VMJ%h%2C______Retail_Cloud
|
||||||
C4N%h%TJ-CX%h%6Q2-VXDM%h%R-XV%h%KGM-F9%h%DJC__Volume:MAK_EnterpriseG
|
NH9%h%J3-68%h%WK7-6FB%h%93-4%h%K3DF-DJ4%h%F6______Retail_CloudN
|
||||||
46P%h%N6-R9%h%BK9-CVHK%h%B-HW%h%Q9V-MB%h%JY8__Volume:MAK_EnterpriseGN
|
2HN%h%6V-HG%h%TM8-6C9%h%7C-R%h%K67V-JQP%h%FD______Retail_CloudE
|
||||||
NJC%h%F7-PW%h%8QT-3324%h%D-68%h%8JX-2Y%h%V66______Retail_ServerRdsh
|
WC2%h%BQ-8N%h%RM3-FDD%h%YY-2%h%BFGV-KHK%h%QY_Volume:GVLK_ServerStandard%Cor%_RS1
|
||||||
V3W%h%VW-N2%h%PV2-CGWC%h%3-34%h%QGF-VM%h%J2C______Retail_Cloud
|
CB7%h%KF-BW%h%N84-R7R%h%2Y-7%h%93K2-8XD%h%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1
|
||||||
NH9%h%J3-68%h%WK7-6FB9%h%3-4K%h%3DF-DJ%h%4F6______Retail_CloudN
|
JCK%h%RF-N3%h%7P4-C2D%h%82-9%h%YXRT-4M6%h%3B_Volume:GVLK_ServerSolution_RS1
|
||||||
2HN%h%6V-HG%h%TM8-6C97%h%C-RK%h%67V-JQ%h%PFD______Retail_CloudE
|
QN4%h%C6-GB%h%JD2-FB4%h%22-G%h%HWJK-GJG%h%2R_Volume:GVLK_ServerCloudStorage_RS1
|
||||||
XQQ%h%YW-NF%h%FMW-XJPB%h%H-K8%h%732-CK%h%FFD______OEM:DM_IoTEnterprise
|
VP3%h%4G-4N%h%PPG-79J%h%TQ-8%h%64T4-R3M%h%QX_Volume:GVLK_ServerAzureCor_RS1
|
||||||
QPM%h%6N-7J%h%2WJ-P88H%h%H-P3%h%YRH-YY%h%74H__OEM:NONSLP_IoTEnterpriseS_VB
|
9JQ%h%NQ-V8%h%HQ6-PKB%h%8H-G%h%GHRY-R62%h%H6______Retail_ServerAzureNano_RS1
|
||||||
KBN%h%8V-HF%h%GQ4-MGXV%h%D-34%h%7P6-PD%h%QGT_Volume:GVLK_IoTEnterpriseS_NI
|
VN8%h%D3-PR%h%82H-DB6%h%BJ-J%h%9P4M-92F%h%6J______Retail_ServerStorageStandard_RS1
|
||||||
K9V%h%KN-3B%h%GWV-Y624%h%W-MC%h%RMQ-BH%h%DCD______Retail_CloudEditionN
|
48T%h%QX-NV%h%K3R-D8Q%h%R3-G%h%THHM-8FH%h%XC______Retail_ServerStorageWorkgroup_RS1
|
||||||
KY7%h%PN-VR%h%6RX-83W6%h%Y-6D%h%DYQ-T6%h%R4W______Retail_CloudEdition
|
2HX%h%DN-KR%h%XHB-GPY%h%C7-Y%h%CKFJ-7FV%h%DG_Volume:GVLK_ServerDatacenterACor_RS3
|
||||||
MPB%h%3G-XN%h%BR7-CC43%h%M-FG%h%64B-F9%h%GBK______Retail_IoTEnterpriseSK
|
PTX%h%N8-JF%h%HJM-4WC%h%78-M%h%PCBR-9W4%h%KR_Volume:GVLK_ServerStandardACor_RS3
|
||||||
) 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 (
|
||||||
|
|
||||||
|
@ -1005,7 +1065,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 "%branch%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
|
echo "%branch%" | find /i "%%D" %nul1% && (set "key=%%A" & set "_chan=%%B")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -1013,30 +1073,4 @@ echo "%branch%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
:changeeditionserverdata
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
|
|
||||||
|
|
||||||
:: Only RS3 and older version keys (GVLK/Generic Retail) are stored here, later ones are extracted from the system itself
|
|
||||||
|
|
||||||
set h=
|
|
||||||
for %%# in (
|
|
||||||
WC2%h%BQ-8N%h%RM3-FDD%h%YY-2B%h%FGV-KHK%h%QY_RS1_ServerStandard%Cor%
|
|
||||||
CB7%h%KF-BW%h%N84-R7R%h%2Y-79%h%3K2-8XD%h%DG_RS1_ServerDatacenter%Cor%
|
|
||||||
JCK%h%RF-N3%h%7P4-C2D%h%82-9Y%h%XRT-4M6%h%3B_RS1_ServerSolution
|
|
||||||
QN4%h%C6-GB%h%JD2-FB4%h%22-GH%h%WJK-GJG%h%2R_RS1_ServerCloudStorage
|
|
||||||
VP3%h%4G-4N%h%PPG-79J%h%TQ-86%h%4T4-R3M%h%QX_RS1_ServerAzureCor
|
|
||||||
9JQ%h%NQ-V8%h%HQ6-PKB%h%8H-GG%h%HRY-R62%h%H6_RS1_ServerAzureNano
|
|
||||||
VN8%h%D3-PR%h%82H-DB6%h%BJ-J9%h%P4M-92F%h%6J_RS1_ServerStorageStandard
|
|
||||||
48T%h%QX-NV%h%K3R-D8Q%h%R3-GT%h%HHM-8FH%h%XC_RS1_ServerStorageWorkgroup
|
|
||||||
2HX%h%DN-KR%h%XHB-GPY%h%C7-YC%h%KFJ-7FV%h%DG_RS3_ServerDatacenterACor
|
|
||||||
PTX%h%N8-JF%h%HJM-4WC%h%78-MP%h%CBR-9W4%h%KR_RS3_ServerStandardACor
|
|
||||||
) do (
|
|
||||||
for /f "tokens=1-3 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
|
|
||||||
echo "%branch%" | find /i "%%B" 1>nul && (set "key=%%A")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
|
@ -39,17 +39,31 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnat
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
set ohook=
|
||||||
|
for %%# in (15 16) do (
|
||||||
|
for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
|
||||||
|
if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set ohook=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
for %%# in (System SystemX86) do (
|
||||||
|
for %%G in ("Office 15" "Office") do (
|
||||||
|
for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
|
||||||
|
if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set ohook=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
set "_bit=64"
|
set "_bit=64"
|
||||||
set "_wow=1"
|
set "_wow=1"
|
||||||
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32"
|
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32"
|
||||||
|
@ -78,6 +92,17 @@ del /f /q slmgr.vbs >nul 2>&1
|
||||||
popd
|
popd
|
||||||
echo %line3%
|
echo %line3%
|
||||||
|
|
||||||
|
if defined ohook (
|
||||||
|
echo.
|
||||||
|
echo.
|
||||||
|
echo %line2%
|
||||||
|
echo *** Office Ohook Activation Status ***
|
||||||
|
echo %line2%
|
||||||
|
echo.
|
||||||
|
powershell "write-host -back 'Black' -fore 'Yellow' 'Office is permanently activated with Ohook activation.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'"
|
||||||
|
echo.
|
||||||
|
)
|
||||||
|
|
||||||
:casVo16
|
:casVo16
|
||||||
set office=
|
set office=
|
||||||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b")
|
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b")
|
||||||
|
@ -231,3 +256,4 @@ echo.
|
||||||
echo Press any key to exit.
|
echo Press any key to exit.
|
||||||
pause >nul
|
pause >nul
|
||||||
exit /b
|
exit /b
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -67,17 +67,31 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnat
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
set ohook=
|
||||||
|
for %%# in (15 16) do (
|
||||||
|
for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
|
||||||
|
if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set ohook=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
for %%# in (System SystemX86) do (
|
||||||
|
for %%G in ("Office 15" "Office") do (
|
||||||
|
for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do (
|
||||||
|
if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set ohook=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
set _cwmi=0
|
set _cwmi=0
|
||||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul && set _cwmi=1
|
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul && set _cwmi=1
|
||||||
|
@ -155,6 +169,17 @@ for /f "tokens=2 delims==" %%# in ('%_qr%') do (
|
||||||
echo.
|
echo.
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if defined ohook (
|
||||||
|
echo.
|
||||||
|
echo.
|
||||||
|
echo %line2%
|
||||||
|
echo *** Office Ohook Activation Status ***
|
||||||
|
echo %line2%
|
||||||
|
echo.
|
||||||
|
powershell "write-host -back 'Black' -fore 'Yellow' 'Office is permanently activated with Ohook activation.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'"
|
||||||
|
echo.
|
||||||
|
)
|
||||||
|
|
||||||
:casWcon
|
:casWcon
|
||||||
set winID=0
|
set winID=0
|
||||||
set verbose=1
|
set verbose=1
|
||||||
|
@ -537,3 +562,4 @@ PrintLicensesInformation -Mode "NUL"
|
||||||
PrintLicensesInformation -Mode "Device"
|
PrintLicensesInformation -Mode "Device"
|
||||||
:vNextDiag:
|
:vNextDiag:
|
||||||
::===================================================
|
::===================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -7,16 +7,22 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: mass grave.dev
|
:: Homepage: mass grave[.]dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -24,6 +30,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f %nul1%
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -40,22 +50,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -67,27 +89,44 @@ cls
|
||||||
color 07
|
color 07
|
||||||
title Extract $OEM$ Folder
|
title Extract $OEM$ Folder
|
||||||
|
|
||||||
set winbuild=1
|
set _args=
|
||||||
|
set _elev=
|
||||||
|
|
||||||
|
set _args=%*
|
||||||
|
if defined _args set _args=%_args:"=%
|
||||||
|
if defined _args (
|
||||||
|
for %%A in (%_args%) do (
|
||||||
|
if /i "%%A"=="-el" set _elev=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
set "nul1=1>nul"
|
||||||
|
set "nul2=2>nul"
|
||||||
|
set "nul6=2^>nul"
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
|
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
set "Red="41;97m""
|
set "Red="41;97m""
|
||||||
|
set "Gray="100;97m""
|
||||||
set "Green="42;97m""
|
set "Green="42;97m""
|
||||||
set "Magenta="45;97m""
|
set "Blue="44;97m""
|
||||||
set "_White="40;37m""
|
set "_White="40;37m""
|
||||||
set "_Green="40;92m""
|
set "_Green="40;92m""
|
||||||
set "_Yellow="40;93m""
|
set "_Yellow="40;93m""
|
||||||
) else (
|
) else (
|
||||||
set "Red="Red" "white""
|
set "Red="Red" "white""
|
||||||
|
set "Gray="Darkgray" "white""
|
||||||
set "Green="DarkGreen" "white""
|
set "Green="DarkGreen" "white""
|
||||||
set "Magenta="Darkmagenta" "white""
|
set "Blue="Blue" "white""
|
||||||
set "_White="Black" "Gray""
|
set "_White="Black" "Gray""
|
||||||
set "_Green="Black" "Green""
|
set "_Green="Black" "Green""
|
||||||
set "_Yellow="Black" "Yellow""
|
set "_Yellow="Black" "Yellow""
|
||||||
|
@ -100,7 +139,7 @@ set "eline=echo: &call :ex_color %Red% "==== ERROR ====" &echo:"
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
if %winbuild% LSS 7600 (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||||
goto done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
@ -115,27 +154,20 @@ goto done2
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
:: Fix for the special characters limitation in path name
|
||||||
|
|
||||||
set desktop=
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
|
||||||
if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
|
||||||
|
|
||||||
set "_work=%~dp0"
|
set "_work=%~dp0"
|
||||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||||
|
|
||||||
set "_batf=%~f0"
|
set "_batf=%~f0"
|
||||||
set "_batp=%_batf:'=''%"
|
set "_batp=%_batf:'=''%"
|
||||||
set "_pdesk=%desktop:'=''%"
|
|
||||||
|
|
||||||
set _PSarg="""%~f0""" -el %_args%
|
set _PSarg="""%~f0""" -el %_args%
|
||||||
set "_ttemp=%temp%"
|
set "_ttemp=%temp%"
|
||||||
|
|
||||||
set "_dir=%desktop%\$OEM$\$$\Setup\Scripts"
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%eline%
|
||||||
echo Script is launched from the temp folder,
|
echo Script is launched from the temp folder,
|
||||||
|
@ -150,8 +182,8 @@ goto done2
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
%nul1% fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%eline%
|
%eline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -160,12 +192,39 @@ goto done2
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
if not exist "!desktop!\" (
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
setlocal DisableDelayedExpansion
|
||||||
|
|
||||||
|
:: Check desktop location
|
||||||
|
|
||||||
|
set desktop=
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
||||||
|
if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
||||||
|
|
||||||
|
set "_pdesk=%desktop:'=''%"
|
||||||
|
set "_dir=%desktop%\$OEM$\$$\Setup\Scripts"
|
||||||
|
|
||||||
|
if exist "!desktop!\" (
|
||||||
%eline%
|
%eline%
|
||||||
echo Desktop location was not detected, aborting...
|
echo Desktop location was not detected, aborting...
|
||||||
goto done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
mode con cols=78 lines=30
|
mode con cols=78 lines=30
|
||||||
|
@ -181,7 +240,9 @@ goto done2
|
||||||
set HWID_Activation.cmd=Activators\HWID_Activation.cmd
|
set HWID_Activation.cmd=Activators\HWID_Activation.cmd
|
||||||
set KMS38_Activation.cmd=Activators\KMS38_Activation.cmd
|
set KMS38_Activation.cmd=Activators\KMS38_Activation.cmd
|
||||||
set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd
|
set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd
|
||||||
|
set Ohook_Activation.cmd=Activators\Ohook_Activation\Ohook_Activation.cmd
|
||||||
|
set sppc32.dll=Activators\Ohook_Activation\BIN\sppc32.dll
|
||||||
|
set sppc64.dll=Activators\Ohook_Activation\BIN\sppc64.dll
|
||||||
pushd "!_work!"
|
pushd "!_work!"
|
||||||
|
|
||||||
set _nofile=
|
set _nofile=
|
||||||
|
@ -189,6 +250,9 @@ for %%# in (
|
||||||
%HWID_Activation.cmd%
|
%HWID_Activation.cmd%
|
||||||
%KMS38_Activation.cmd%
|
%KMS38_Activation.cmd%
|
||||||
%Online_KMS_Activation.cmd%
|
%Online_KMS_Activation.cmd%
|
||||||
|
%Ohook_Activation.cmd%
|
||||||
|
%sppc32.dll%
|
||||||
|
%sppc64.dll%
|
||||||
) do (
|
) do (
|
||||||
if not exist "%%#" set _nofile=1
|
if not exist "%%#" set _nofile=1
|
||||||
)
|
)
|
||||||
|
@ -213,29 +277,38 @@ echo:
|
||||||
echo:
|
echo:
|
||||||
echo:
|
echo:
|
||||||
echo:
|
echo:
|
||||||
echo:
|
|
||||||
echo: Extract $OEM$ folder on the desktop
|
echo: Extract $OEM$ folder on the desktop
|
||||||
echo: ________________________________________________________
|
echo: ________________________________________________________
|
||||||
echo:
|
echo:
|
||||||
echo: [1] HWID
|
echo: [1] HWID
|
||||||
echo: [2] KMS38
|
echo: [2] Ohook
|
||||||
echo: [3] Online KMS
|
echo: [3] KMS38
|
||||||
|
echo: [4] Online KMS
|
||||||
echo:
|
echo:
|
||||||
echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
echo: [5] HWID ^(Windows^) ^+ Ohook ^(Office^)
|
||||||
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
echo: [6] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
|
echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^)
|
||||||
|
echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
|
echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^)
|
||||||
echo:
|
echo:
|
||||||
|
call :ex_color2 %_White% " [R] " %_Green% "ReadMe"
|
||||||
echo: [0] 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,0]"
|
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
|
||||||
choice /C:123450 /N
|
choice /C:123456789R0 /N
|
||||||
set _erl=%errorlevel%
|
set _erl=%errorlevel%
|
||||||
|
|
||||||
if %_erl%==6 exit /b
|
if %_erl%==11 exit /b
|
||||||
if %_erl%==5 goto:kms38_kms
|
if %_erl%==10 start https://%mas%/oem-folder.html &goto :Menu
|
||||||
if %_erl%==4 goto:hwid_kms
|
if %_erl%==9 goto:kms_ohook
|
||||||
if %_erl%==3 goto:kms
|
if %_erl%==8 goto:kms38_kms
|
||||||
if %_erl%==2 goto:kms38
|
if %_erl%==7 goto:kms38_ohook
|
||||||
|
if %_erl%==6 goto:hwid_kms
|
||||||
|
if %_erl%==5 goto:hwid_ohook
|
||||||
|
if %_erl%==4 goto:kms
|
||||||
|
if %_erl%==3 goto:kms38
|
||||||
|
if %_erl%==2 goto:ohook
|
||||||
if %_erl%==1 goto:hwid
|
if %_erl%==1 goto:hwid
|
||||||
goto :Menu
|
goto :Menu
|
||||||
|
|
||||||
|
@ -271,6 +344,40 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:ohook
|
||||||
|
|
||||||
|
cls
|
||||||
|
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||||
|
pushd "!_work!"
|
||||||
|
copy /y /b "%Ohook_Activation.cmd%" "!_dir!\Ohook_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%sppc32.dll%" "!_dir!\BIN\sppc32.dll" %nul%
|
||||||
|
copy /y /b "%sppc64.dll%" "!_dir!\BIN\sppc64.dll" %nul%
|
||||||
|
popd
|
||||||
|
call :export ohook_setup
|
||||||
|
|
||||||
|
set _error=
|
||||||
|
if not exist "!_dir!\Ohook_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc32.dll" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc64.dll" set _error=1
|
||||||
|
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||||
|
if defined _error goto errorfound
|
||||||
|
|
||||||
|
set oem=Ohook
|
||||||
|
goto done
|
||||||
|
|
||||||
|
:ohook_setup:
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Ohook_Activation.cmd" /Ohook
|
||||||
|
|
||||||
|
cd \
|
||||||
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
:ohook_setup:
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:kms38
|
:kms38
|
||||||
|
|
||||||
cls
|
cls
|
||||||
|
@ -331,6 +438,44 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:hwid_ohook
|
||||||
|
|
||||||
|
cls
|
||||||
|
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||||
|
pushd "!_work!"
|
||||||
|
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%Ohook_Activation.cmd%" "!_dir!\Ohook_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%sppc32.dll%" "!_dir!\BIN\sppc32.dll" %nul%
|
||||||
|
copy /y /b "%sppc64.dll%" "!_dir!\BIN\sppc64.dll" %nul%
|
||||||
|
popd
|
||||||
|
call :export hwid_ohook_setup
|
||||||
|
|
||||||
|
set _error=
|
||||||
|
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\Ohook_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc32.dll" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc64.dll" set _error=1
|
||||||
|
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||||
|
if defined _error goto errorfound
|
||||||
|
|
||||||
|
set oem=HWID [Windows] + Ohook [Office]
|
||||||
|
goto done
|
||||||
|
|
||||||
|
:hwid_ohook_setup:
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Ohook_Activation.cmd" /Ohook
|
||||||
|
|
||||||
|
cd \
|
||||||
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
:hwid_ohook_setup:
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:hwid_kms
|
:hwid_kms
|
||||||
|
|
||||||
cls
|
cls
|
||||||
|
@ -365,6 +510,44 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:kms38_ohook
|
||||||
|
|
||||||
|
cls
|
||||||
|
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||||
|
pushd "!_work!"
|
||||||
|
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%Ohook_Activation.cmd%" "!_dir!\Ohook_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%sppc32.dll%" "!_dir!\BIN\sppc32.dll" %nul%
|
||||||
|
copy /y /b "%sppc64.dll%" "!_dir!\BIN\sppc64.dll" %nul%
|
||||||
|
popd
|
||||||
|
call :export kms38_ohook_setup
|
||||||
|
|
||||||
|
set _error=
|
||||||
|
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\Ohook_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc32.dll" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc64.dll" set _error=1
|
||||||
|
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||||
|
if defined _error goto errorfound
|
||||||
|
|
||||||
|
set oem=KMS38 [Windows] + Ohook [Office]
|
||||||
|
goto done
|
||||||
|
|
||||||
|
:kms38_ohook_setup:
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Ohook_Activation.cmd" /Ohook
|
||||||
|
|
||||||
|
cd \
|
||||||
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
:kms38_ohook_setup:
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:kms38_kms
|
:kms38_kms
|
||||||
|
|
||||||
cls
|
cls
|
||||||
|
@ -399,6 +582,44 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:kms_ohook
|
||||||
|
|
||||||
|
cls
|
||||||
|
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||||
|
pushd "!_work!"
|
||||||
|
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%Ohook_Activation.cmd%" "!_dir!\Ohook_Activation.cmd" %nul%
|
||||||
|
copy /y /b "%sppc32.dll%" "!_dir!\BIN\sppc32.dll" %nul%
|
||||||
|
copy /y /b "%sppc64.dll%" "!_dir!\BIN\sppc64.dll" %nul%
|
||||||
|
popd
|
||||||
|
call :export kms_ohook_setup
|
||||||
|
|
||||||
|
set _error=
|
||||||
|
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\Ohook_Activation.cmd" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc32.dll" set _error=1
|
||||||
|
if not exist "!_dir!\BIN\sppc64.dll" set _error=1
|
||||||
|
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||||
|
if defined _error goto errorfound
|
||||||
|
|
||||||
|
set oem=Online KMS [Windows] + Ohook [Office]
|
||||||
|
goto done
|
||||||
|
|
||||||
|
:kms_ohook_setup:
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Windows
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Ohook_Activation.cmd" /Ohook
|
||||||
|
|
||||||
|
cd \
|
||||||
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
:kms_ohook_setup:
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
:errorfound
|
:errorfound
|
||||||
|
|
||||||
%eline%
|
%eline%
|
||||||
|
@ -407,15 +628,14 @@ goto :done2
|
||||||
|
|
||||||
:done
|
:done
|
||||||
|
|
||||||
set -=
|
|
||||||
echo ______________________________________________________________
|
echo ______________________________________________________________
|
||||||
echo:
|
echo:
|
||||||
call :ex_color %Magenta% "%oem%"
|
call :ex_color %Blue% "%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 "%oem%" | find /i "38" %nul% && (
|
echo "%oem%" | find /i "38" %nul% && (
|
||||||
echo:
|
echo:
|
||||||
echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^),
|
echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^),
|
||||||
echo Check this page https://mass%-%grave.dev/oem-folder
|
echo Check this page https://%mas%/oem-folder
|
||||||
)
|
)
|
||||||
echo ______________________________________________________________
|
echo ______________________________________________________________
|
||||||
|
|
||||||
|
@ -423,7 +643,7 @@ echo ______________________________________________________________
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
call :ex_color %_Yellow% "Press any key to exit..."
|
call :ex_color %_Yellow% "Press any key to exit..."
|
||||||
pause >nul
|
pause %nul1%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -432,7 +652,7 @@ exit /b
|
||||||
|
|
||||||
:export
|
:export
|
||||||
|
|
||||||
%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\SetupComplete.cmd',$f[1].Trim(),[System.Text.Encoding]::ASCII);"
|
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\SetupComplete.cmd',$f[1].Trim(),[System.Text.Encoding]::ASCII);"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -456,3 +676,4 @@ if not exist %psc% (echo %~3%~6) else (%psc% write-host -back '%1' -fore '%2' '%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
|
@ -1,439 +0,0 @@
|
||||||
@setlocal DisableDelayedExpansion
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::============================================================================
|
|
||||||
::
|
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
|
||||||
::
|
|
||||||
:: Homepage: massgrave.dev
|
|
||||||
:: Email: windowsaddict@protonmail.com
|
|
||||||
::
|
|
||||||
::============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:: For unattended mode, run the script with "/Insert-HWID-Key" parameter
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
|
||||||
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
for %%# in (%*) do (
|
|
||||||
if /i "%%#"=="r1" set r1=1
|
|
||||||
if /i "%%#"=="r2" set r2=1
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 (
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Check LF line ending
|
|
||||||
|
|
||||||
pushd "%~dp0"
|
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
|
||||||
echo:
|
|
||||||
ping 127.0.0.1 -n 6 > nul
|
|
||||||
popd
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
popd
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
color 07
|
|
||||||
title Install Windows HWID Key
|
|
||||||
|
|
||||||
set _args=
|
|
||||||
set _elev=
|
|
||||||
set _unattended=0
|
|
||||||
|
|
||||||
set _args=%*
|
|
||||||
if defined _args set _args=%_args:"=%
|
|
||||||
if defined _args (
|
|
||||||
for %%A in (%_args%) do (
|
|
||||||
if /i "%%A"=="-el" set _elev=1
|
|
||||||
if /i "%%A"=="/Insert-HWID-Key" set _unattended=1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
set winbuild=1
|
|
||||||
set "nul=>nul 2>&1"
|
|
||||||
set psc=powershell.exe
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
|
|
||||||
set _NCS=1
|
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
|
||||||
set "Red="41;97m""
|
|
||||||
set "Green="42;97m""
|
|
||||||
set "_Green="40;92m""
|
|
||||||
set "_Yellow="40;93m""
|
|
||||||
) else (
|
|
||||||
set "Red="Red" "white""
|
|
||||||
set "Green="DarkGreen" "white""
|
|
||||||
set "_Green="Black" "Green""
|
|
||||||
set "_Yellow="Black" "Yellow""
|
|
||||||
)
|
|
||||||
|
|
||||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
|
||||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
|
||||||
set "line=echo ___________________________________________________________________________________________"
|
|
||||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version detected.
|
|
||||||
echo This option is supported only for Windows 10/11.
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
|
||||||
%eline%
|
|
||||||
echo HWID Activation is not supported for Windows Server.
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
|
|
||||||
%nceline%
|
|
||||||
echo Unable to find powershell.exe in the system.
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
|
||||||
|
|
||||||
set "_work=%~dp0"
|
|
||||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
|
||||||
|
|
||||||
set "_batf=%~f0"
|
|
||||||
set "_batp=%_batf:'=''%"
|
|
||||||
|
|
||||||
set _PSarg="""%~f0""" -el %_args%
|
|
||||||
|
|
||||||
set "_ttemp=%temp%"
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
|
||||||
%eline%
|
|
||||||
echo Script is launched from the temp folder,
|
|
||||||
echo Most likely you are running the script directly from the archive file.
|
|
||||||
echo:
|
|
||||||
echo Extract the archive file and launch the script from the extracted folder.
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 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 admin privileges.
|
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
echo:
|
|
||||||
echo Initializing...
|
|
||||||
call :dk_product
|
|
||||||
call :dk_ckeckwmic
|
|
||||||
call :dk_actids
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Check SKU value / Check in multiple places to find Edition change corruption
|
|
||||||
|
|
||||||
set osSKU=
|
|
||||||
set regSKU=
|
|
||||||
set wmiSKU=
|
|
||||||
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
|
||||||
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
|
||||||
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
|
||||||
|
|
||||||
set osSKU=%wmiSKU%
|
|
||||||
if not defined osSKU set osSKU=%regSKU%
|
|
||||||
|
|
||||||
if not defined osSKU (
|
|
||||||
%eline%
|
|
||||||
echo SKU value was not detected properly. Aborting...
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Detect key
|
|
||||||
|
|
||||||
set key=
|
|
||||||
set channel=
|
|
||||||
set actidnotfound=
|
|
||||||
|
|
||||||
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 defined applist call :hwidkey key attempt1
|
|
||||||
if not defined key call :hwidkey key attempt2
|
|
||||||
|
|
||||||
if not defined key (
|
|
||||||
%eline%
|
|
||||||
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
|
||||||
echo Unable to find this product in the HWID supported product list.
|
|
||||||
echo Make sure you are using updated version of the script.
|
|
||||||
echo https://massgrave.dev
|
|
||||||
goto ins_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
if %_unattended%==1 goto insertkey
|
|
||||||
|
|
||||||
cls
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %channel% Key
|
|
||||||
echo [%key%]
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
if not "%regSKU%"=="%wmiSKU%" (
|
|
||||||
echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
|
|
||||||
echo:
|
|
||||||
)
|
|
||||||
call :dk_color %_Green% "Press [1] to Continue or [0] to %_exitmsg%"
|
|
||||||
choice /C:01 /N
|
|
||||||
if %errorlevel%==1 exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:insertkey
|
|
||||||
|
|
||||||
cls
|
|
||||||
%line%
|
|
||||||
|
|
||||||
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
|
|
||||||
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Version FROM SoftwareLicensingService').Get()).InstallProductKey('%key%')" %nul%
|
|
||||||
if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
|
|
||||||
|
|
||||||
set error_code=%errorlevel%
|
|
||||||
cmd /c exit /b %error_code%
|
|
||||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
|
||||||
echo Installing %channel% [%key%]
|
|
||||||
echo:
|
|
||||||
|
|
||||||
if %error_code% EQU 0 (
|
|
||||||
call :dk_refresh
|
|
||||||
call :dk_color %Green% "[Successful]"
|
|
||||||
) else (
|
|
||||||
call :dk_color %Red% "[Unsuccessful] %error_code%"
|
|
||||||
if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key."
|
|
||||||
echo Check this page for help https://massgrave.dev/troubleshoot
|
|
||||||
)
|
|
||||||
%line%
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:ins_done
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if %_unattended%==1 timeout /t 2 & exit /b
|
|
||||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Refresh license status
|
|
||||||
|
|
||||||
:dk_refresh
|
|
||||||
|
|
||||||
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call RefreshLicenseStatus %nul%
|
|
||||||
if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul%
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:: Get Windows Activation IDs
|
|
||||||
|
|
||||||
:dk_actids
|
|
||||||
|
|
||||||
set applist=
|
|
||||||
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
|
||||||
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:: Check wmic.exe
|
|
||||||
|
|
||||||
:dk_ckeckwmic
|
|
||||||
|
|
||||||
set _wmic=0
|
|
||||||
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
|
||||||
|
|
||||||
:dk_product
|
|
||||||
|
|
||||||
call :dk_reflection
|
|
||||||
|
|
||||||
set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3);
|
|
||||||
set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%')
|
|
||||||
|
|
||||||
set winos=
|
|
||||||
for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s)
|
|
||||||
echo "%winos%" | find /i "Windows" 1>nul || (
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
|
||||||
if %winbuild% GEQ 22000 (
|
|
||||||
set winos=!winos:Windows 10=Windows 11!
|
|
||||||
)
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:: Common lines used in PowerShell reflection code
|
|
||||||
|
|
||||||
:dk_reflection
|
|
||||||
|
|
||||||
set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1);
|
|
||||||
set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False);
|
|
||||||
set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0);
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:dk_color
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
|
||||||
) else (
|
|
||||||
%psc% write-host -back '%1' -fore '%2' '%3'
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 1st column = Activation ID
|
|
||||||
:: 2nd column = Generic Retail/OEM/MAK Key
|
|
||||||
:: 3rd column = SKU ID
|
|
||||||
:: 4th column = Key Type
|
|
||||||
:: 5th column = WMI Edition ID
|
|
||||||
:: 6th column = Version name incase same Edition ID is used in different OS versions with different key
|
|
||||||
:: Separator = _
|
|
||||||
|
|
||||||
|
|
||||||
:hwidkey
|
|
||||||
|
|
||||||
set f=
|
|
||||||
for %%# in (
|
|
||||||
8b351c9c-f398-4515-9900-09df49427262_XGV%f%PP-NM%f%H47-7TTH%f%J-W3F%f%W7-8HV%f%2C___4_OEM:NONSLP_Enterprise
|
|
||||||
c83cef07-6b72-4bbc-a28f-a00386872839_3V6%f%Q6-NQ%f%XCX-V8YX%f%R-9QC%f%YV-QPF%f%CT__27_Volume:MAK_EnterpriseN
|
|
||||||
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NP%f%HTM-C97J%f%M-9MP%f%GT-3V6%f%6T__48_____Retail_Professional
|
|
||||||
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B8%f%7N-8K%f%FHP-DKV6%f%R-Y2C%f%8J-PKC%f%KT__49_____Retail_ProfessionalN
|
|
||||||
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CP%f%RK-NM%f%3K3-X6XX%f%Q-RXX%f%86-WXC%f%HW__98_____Retail_CoreN
|
|
||||||
1d1bac85-7365-4fea-949a-96978ec91ae0_N24%f%34-X9%f%D7W-8PF6%f%X-8DV%f%9T-8TY%f%MD__99_____Retail_CoreCountrySpecific
|
|
||||||
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT7%f%9Q-G7%f%N6G-PGBY%f%W-4YW%f%X6-6F4%f%BT_100_____Retail_CoreSingleLanguage
|
|
||||||
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTM%f%G3-N6%f%DKC-DKB7%f%7-7M9%f%GH-8HV%f%X7_101_____Retail_Core
|
|
||||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKC%f%NC-J2%f%6Q9-KFHD%f%2-FKT%f%HY-KD7%f%2Y_119_OEM:NONSLP_PPIPro
|
|
||||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNM%f%GQ-8R%f%YV3-4PGQ%f%3-C8X%f%TP-7CF%f%BY_121_____Retail_Education
|
|
||||||
c5198a66-e435-4432-89cf-ec777c9d0352_84N%f%GF-MH%f%BT6-FXBX%f%8-QWJ%f%K7-DRR%f%8H_122_____Retail_EducationN
|
|
||||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCN%f%VH-YK%f%WX8-GJJB%f%9-H9F%f%DT-6F7%f%W2_125_Volume:MAK_EnterpriseS_VB
|
|
||||||
d06934ee-5448-4fd1-964a-cd077618aa06_43T%f%BQ-NH%f%92J-XKTM%f%7-KT3%f%KK-P39%f%PB_125_OEM:NONSLP_EnterpriseS_RS5
|
|
||||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK9%f%6Y-D9%f%CD8-W44C%f%Q-R8Y%f%TK-DYJ%f%WX_125_OEM:NONSLP_EnterpriseS_RS1
|
|
||||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN%f%7H-PF%f%93Q-4GGP%f%8-M8R%f%F3-MDW%f%WW_125_OEM:NONSLP_EnterpriseS_TH
|
|
||||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQF%f%NW-9T%f%PM3-JQ73%f%T-QV4%f%VQ-DV9%f%PT_126_Volume:MAK_EnterpriseSN_VB
|
|
||||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33%f%WV-NH%f%Y3C-R7FP%f%M-BQG%f%PT-239%f%PG_126_Volume:MAK_EnterpriseSN_RS5
|
|
||||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DB%f%W3-N2%f%PJG-MVHW%f%3-G7T%f%DK-9HK%f%R4_126_Volume:MAK_EnterpriseSN_RS1
|
|
||||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX%f%6B-BR%f%YC2-K678%f%6-F6M%f%VQ-M7V%f%2X_126_Volume:MAK_EnterpriseSN_TH
|
|
||||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG%f%7C-N3%f%6C4-C4HT%f%G-X4T%f%3X-2YV%f%77_161_____Retail_ProfessionalWorkstation
|
|
||||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYP%f%NQ-8C%f%467-V2W6%f%J-TX4%f%WX-WT2%f%RQ_162_____Retail_ProfessionalWorkstationN
|
|
||||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PT%f%T6-RN%f%W4C-6V7J%f%2-C2D%f%3X-MHB%f%PB_164_____Retail_ProfessionalEducation
|
|
||||||
13a38698-4a49-4b9e-8e83-98fe51110953_GJT%f%YN-HD%f%MQY-FRR7%f%6-HVG%f%C7-QPF%f%8P_165_____Retail_ProfessionalEducationN
|
|
||||||
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJC%f%F7-PW%f%8QT-3324%f%D-688%f%JX-2YV%f%66_175_____Retail_ServerRdsh
|
|
||||||
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3W%f%VW-N2%f%PV2-CGWC%f%3-34Q%f%GF-VMJ%f%2C_178_____Retail_Cloud
|
|
||||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9%f%J3-68%f%WK7-6FB9%f%3-4K3%f%DF-DJ4%f%F6_179_____Retail_CloudN
|
|
||||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQ%f%YW-NF%f%FMW-XJPB%f%H-K87%f%32-CKF%f%FD_188_____OEM:DM_IoTEnterprise
|
|
||||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J%f%2WJ-P88H%f%H-P3Y%f%RH-YY7%f%4H_191_OEM:NONSLP_IoTEnterpriseS_VB
|
|
||||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9V%f%KN-3B%f%GWV-Y624%f%W-MCR%f%MQ-BHD%f%CD_202_____Retail_CloudEditionN
|
|
||||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7%f%PN-VR%f%6RX-83W6%f%Y-6DD%f%YQ-T6R%f%4W_203_____Retail_CloudEdition
|
|
||||||
d4f9b41f-205c-405e-8e08-3d16e88e02be_J7N%f%JW-V6%f%KBM-CC8R%f%W-Y29%f%Y4-HQ2%f%MJ_205_OEM:NONSLP_IoTEnterpriseSK
|
|
||||||
) do (
|
|
||||||
for /f "tokens=1-6 delims=_" %%A in ("%%#") do (
|
|
||||||
|
|
||||||
if %1==key if %osSKU%==%%C (
|
|
||||||
|
|
||||||
REM Detect key attempt 1
|
|
||||||
|
|
||||||
if "%2"=="attempt1" if not defined key (
|
|
||||||
echo "!applist!" | find /i "%%A" 1>nul && (
|
|
||||||
set key=%%B
|
|
||||||
set channel=%%D
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Detect key attempt 2
|
|
||||||
|
|
||||||
if "%2"=="attempt2" if not defined key (
|
|
||||||
set actidnotfound=1
|
|
||||||
set 6th=%%F
|
|
||||||
if not defined 6th (
|
|
||||||
set key=%%B
|
|
||||||
set channel=%%D
|
|
||||||
) else (
|
|
||||||
echo "%branch%" | find /i "%%F" 1>nul && (
|
|
||||||
set key=%%B
|
|
||||||
set channel=%%D
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
|
@ -7,16 +7,22 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: massgrave.dev
|
:: Homepage: mass grave[.]dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
@ -24,6 +30,10 @@ set "_cmdf=%~f0"
|
||||||
for %%# in (%*) do (
|
for %%# in (%*) do (
|
||||||
if /i "%%#"=="r1" set r1=1
|
if /i "%%#"=="r1" set r1=1
|
||||||
if /i "%%#"=="r2" set r2=1
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
if /i "%%#"=="-qedit" (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f %nul1%
|
||||||
|
rem check the code below admin elevation to understand why it's here
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
@ -40,22 +50,34 @@ start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
::========================================================================================================================================
|
||||||
|
|
||||||
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
set "blank="
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
set "mas=mass%blank%grave.dev"
|
||||||
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
|
||||||
|
:: Check if Null service is working, it's important for the batch script
|
||||||
|
|
||||||
|
sc query Null | find /i "RUNNING"
|
||||||
|
if %errorlevel% NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Null service is not running, script may crash...
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo Help - https://%mas%/troubleshoot.html
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
ping 127.0.0.1 -n 10
|
||||||
)
|
)
|
||||||
|
cls
|
||||||
|
|
||||||
:: Check LF line ending
|
:: Check LF line ending
|
||||||
|
|
||||||
pushd "%~dp0"
|
pushd "%~dp0"
|
||||||
>nul findstr /rxc:".*" "%~nx0"
|
>nul findstr /v "$" "%~nx0" && (
|
||||||
if not %errorlevel%==0 (
|
|
||||||
echo:
|
echo:
|
||||||
echo Error: Script either has LF line ending issue, or it failed to read itself.
|
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
|
||||||
echo:
|
echo:
|
||||||
ping 127.0.0.1 -n 6 > nul
|
ping 127.0.0.1 -n 6 >nul
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
@ -67,21 +89,32 @@ cls
|
||||||
color 07
|
color 07
|
||||||
title Troubleshoot
|
title Troubleshoot
|
||||||
|
|
||||||
|
set _args=
|
||||||
set _elev=
|
set _elev=
|
||||||
if /i "%~1"=="-el" set _elev=1
|
|
||||||
|
|
||||||
set winbuild=1
|
set _args=%*
|
||||||
|
if defined _args set _args=%_args:"=%
|
||||||
|
if defined _args (
|
||||||
|
for %%A in (%_args%) do (
|
||||||
|
if /i "%%A"=="-el" set _elev=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
set "nul1=1>nul"
|
||||||
|
set "nul2=2>nul"
|
||||||
|
set "nul6=2^>nul"
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
|
|
||||||
set psc=powershell.exe
|
set psc=powershell.exe
|
||||||
|
set winbuild=1
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
|
||||||
|
|
||||||
call :_colorprep
|
call :_colorprep
|
||||||
|
|
||||||
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=_________________________________________________________________________________________________"
|
||||||
|
@ -91,7 +124,7 @@ if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
if %winbuild% LSS 7600 (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Unsupported OS version detected.
|
echo Unsupported OS version detected [%winbuild%].
|
||||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||||
goto at_done
|
goto at_done
|
||||||
)
|
)
|
||||||
|
@ -120,7 +153,7 @@ setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
|
||||||
if /i not "!_work!"=="!_ttemp!" (
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Script is launched from the temp folder,
|
echo Script is launched from the temp folder,
|
||||||
|
@ -135,8 +168,8 @@ goto at_done
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
>nul fltmc || (
|
%nul1% fltmc || (
|
||||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%nceline%
|
%nceline%
|
||||||
echo This script require admin privileges.
|
echo This script require admin privileges.
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
@ -145,6 +178,20 @@ goto at_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry
|
||||||
|
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
|
||||||
|
|
||||||
|
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1)
|
||||||
|
|
||||||
|
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit (
|
||||||
|
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1%
|
||||||
|
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||||
|
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
setlocal DisableDelayedExpansion
|
setlocal DisableDelayedExpansion
|
||||||
|
|
||||||
:: Check desktop location
|
:: Check desktop location
|
||||||
|
@ -195,12 +242,12 @@ choice /C:1234560 /N
|
||||||
set _erl=%errorlevel%
|
set _erl=%errorlevel%
|
||||||
|
|
||||||
if %_erl%==7 exit /b
|
if %_erl%==7 exit /b
|
||||||
if %_erl%==6 start https://massgrave.dev/fix-wpa-registry.html &goto at_menu
|
if %_erl%==6 start https://%mas%/fix-wpa-registry.html &goto at_menu
|
||||||
if %_erl%==5 goto:retokens
|
if %_erl%==5 goto:retokens
|
||||||
if %_erl%==4 goto:fixwmi
|
if %_erl%==4 goto:fixwmi
|
||||||
if %_erl%==3 goto:sfcscan
|
if %_erl%==3 goto:sfcscan
|
||||||
if %_erl%==2 goto:dism_rest
|
if %_erl%==2 goto:dism_rest
|
||||||
if %_erl%==1 start https://massgrave.dev/troubleshoot.html &goto at_menu
|
if %_erl%==1 start https://%mas%/troubleshoot.html &goto at_menu
|
||||||
goto :at_menu
|
goto :at_menu
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -248,23 +295,29 @@ if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode 110, 30
|
mode 110, 30
|
||||||
echo:
|
|
||||||
|
|
||||||
call :_stopservice TrustedInstaller
|
call :_stopservice TrustedInstaller
|
||||||
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
|
||||||
|
|
||||||
set _time=
|
set _time=
|
||||||
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
||||||
echo:
|
echo:
|
||||||
echo Applying the command,
|
echo Applying the command,
|
||||||
echo dism /english /online /cleanup-image /restorehealth
|
echo dism /english /online /cleanup-image /restorehealth
|
||||||
echo:
|
dism /english /online /cleanup-image /restorehealth
|
||||||
dism /english /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
|
|
||||||
|
call :_stopservice TrustedInstaller
|
||||||
|
|
||||||
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 "%cbs_log%" "!desktop!\AT_Logs\RHealth_CBS_%_time%.txt" %nul%
|
call :compresslog cbs\CBS.log RHealth_CBS %nul%
|
||||||
del /f /q "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" %nul%
|
call :compresslog DISM\dism.log RHealth_DISM %nul%
|
||||||
|
|
||||||
|
if not exist "!desktop!\AT_Logs\RHealth_CBS_%_time%.cab" (
|
||||||
|
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\RHealth_CBS_%_time%.log" %nul%
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "!desktop!\AT_Logs\RHealth_DISM_%_time%.cab" (
|
||||||
|
copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_time%.log" %nul%
|
||||||
|
)
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop."
|
call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop."
|
||||||
|
@ -294,22 +347,24 @@ choice /C:09 /N /M "> [9] Continue [0] Go back : "
|
||||||
if %errorlevel%==1 goto at_menu
|
if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
cls
|
cls
|
||||||
echo:
|
|
||||||
|
|
||||||
call :_stopservice TrustedInstaller
|
call :_stopservice TrustedInstaller
|
||||||
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
|
||||||
|
|
||||||
set _time=
|
set _time=
|
||||||
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
||||||
echo:
|
echo:
|
||||||
echo Applying the command,
|
echo Applying the command,
|
||||||
echo sfc /scannow
|
echo sfc /scannow
|
||||||
echo:
|
|
||||||
sfc /scannow
|
sfc /scannow
|
||||||
|
|
||||||
|
call :_stopservice TrustedInstaller
|
||||||
|
|
||||||
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%
|
call :compresslog cbs\CBS.log SFC_CBS %nul%
|
||||||
|
|
||||||
|
if not exist "!desktop!\AT_Logs\SFC_CBS_%_time%.cab" (
|
||||||
|
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.log" %nul%
|
||||||
|
)
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop."
|
call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop."
|
||||||
|
@ -321,7 +376,7 @@ goto :at_back
|
||||||
|
|
||||||
cls
|
cls
|
||||||
mode con cols=115 lines=32
|
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;}"
|
%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 Licensing ^(ClipSVC ^+ Office vNext ^+ SPP ^+ OSPP^)
|
title Fix Licensing ^(ClipSVC ^+ Office vNext ^+ SPP ^+ OSPP^)
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
|
@ -354,7 +409,7 @@ cls
|
||||||
echo:
|
echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Rebuilding ClipSVC Licences"
|
call :_color %Blue% "Rebuilding ClipSVC Licences"
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
if %winbuild% LSS 10240 (
|
||||||
|
@ -363,7 +418,7 @@ echo Skipping...
|
||||||
goto :cleanvnext
|
goto :cleanvnext
|
||||||
)
|
)
|
||||||
|
|
||||||
%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name" 2>nul | findstr /i "Windows" 1>nul && (
|
%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && (
|
||||||
echo Windows is permanently activated.
|
echo Windows is permanently activated.
|
||||||
echo Skipping rebuilding ClipSVC licences...
|
echo Skipping rebuilding ClipSVC licences...
|
||||||
goto :cleanvnext
|
goto :cleanvnext
|
||||||
|
@ -460,7 +515,7 @@ for %%# in (wlidsvc LicenseManager) do (net stop %%# /y %nul% & net start %%# /y
|
||||||
echo:
|
echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Clearing Office vNext License"
|
call :_color %Blue% "Clearing Office vNext License"
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
setlocal DisableDelayedExpansion
|
setlocal DisableDelayedExpansion
|
||||||
|
@ -515,7 +570,7 @@ echo Not Found Registry - %%#
|
||||||
echo:
|
echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Rebuilding SPP Licensing Tokens"
|
call :_color %Blue% "Rebuilding SPP Licensing Tokens"
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
call :scandat check
|
call :scandat check
|
||||||
|
@ -529,7 +584,7 @@ echo tokens.dat file: [%token%]
|
||||||
if %winbuild% GEQ 14393 (
|
if %winbuild% GEQ 14393 (
|
||||||
set wpaerror=
|
set wpaerror=
|
||||||
set /a count=0
|
set /a count=0
|
||||||
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" 2^>nul') do set /a count+=1
|
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" %nul6%') do set /a count+=1
|
||||||
for /L %%# in (1,1,!count!) do (
|
for /L %%# in (1,1,!count!) do (
|
||||||
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
||||||
)
|
)
|
||||||
|
@ -542,7 +597,7 @@ call :_color %Red% "[Error Found] [Registry Count - !count!]"
|
||||||
)
|
)
|
||||||
|
|
||||||
set tokenstore=
|
set tokenstore=
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore 2^>nul') do call set "tokenstore=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b"
|
||||||
|
|
||||||
:: Check sppsvc permissions and apply fixes
|
:: Check sppsvc permissions and apply fixes
|
||||||
|
|
||||||
|
@ -580,7 +635,7 @@ call :_color %Red% "[Failed To Fix]"
|
||||||
echo [Successfully Fixed]
|
echo [Successfully Fixed]
|
||||||
)
|
)
|
||||||
) else (
|
) else (
|
||||||
echo [Error Not Found]
|
echo [No Error Found]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -624,7 +679,7 @@ echo tokens.dat file was rebuilt successfully.
|
||||||
echo:
|
echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Rebuilding OSPP Licensing Tokens"
|
call :_color %Blue% "Rebuilding OSPP Licensing Tokens"
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
sc qc osppsvc %nul% || (
|
sc qc osppsvc %nul% || (
|
||||||
|
@ -681,7 +736,7 @@ echo tokens.dat file was rebuilt successfully.
|
||||||
echo:
|
echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Repairing Office Licenses"
|
call :_color %Blue% "Repairing Office Licenses"
|
||||||
echo:
|
echo:
|
||||||
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
||||||
|
@ -723,10 +778,7 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
|
||||||
|
|
||||||
set uwp16=
|
set uwp16=
|
||||||
if %winbuild% GEQ 10240 (
|
if %winbuild% GEQ 10240 (
|
||||||
dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set uwp16=Office 16.0 UWP
|
||||||
dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
|
||||||
dir /b "%ProgramFiles(x86)%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
|
||||||
%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" 1>nul && set uwp16=Office 16.0 UWP
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set /a counter=0
|
set /a counter=0
|
||||||
|
@ -774,7 +826,7 @@ echo:
|
||||||
call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] 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 %nul1%
|
||||||
)
|
)
|
||||||
|
|
||||||
if defined uwp16 (
|
if defined uwp16 (
|
||||||
|
@ -843,12 +895,15 @@ goto :at_back
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
echo Checking WMI
|
echo Checking WMI
|
||||||
|
call :checkwmi
|
||||||
|
|
||||||
set error=
|
:: Apply basic fix first and check
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
|
||||||
if %errorlevel% NEQ 0 set error=1
|
if defined error (
|
||||||
winmgmt /verifyrepository %nul%
|
call :_stopservice Winmgmt
|
||||||
if %errorlevel% NEQ 0 set error=1
|
winmgmt /salvagerepository %nul%
|
||||||
|
call :checkwmi
|
||||||
|
)
|
||||||
|
|
||||||
if not defined error (
|
if not defined error (
|
||||||
echo [Working]
|
echo [Working]
|
||||||
|
@ -858,10 +913,16 @@ goto :at_back
|
||||||
|
|
||||||
call :_color %Red% "[Not Responding]"
|
call :_color %Red% "[Not Responding]"
|
||||||
|
|
||||||
|
set _corrupt=
|
||||||
|
sc start Winmgmt %nul%
|
||||||
|
if %errorlevel% EQU 1060 set _corrupt=1
|
||||||
|
sc query Winmgmt %nul% || set _corrupt=1
|
||||||
|
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt (reg query HKLM\SYSTEM\CurrentControlSet\Services\Winmgmt /v %%G %nul% || set _corrupt=1)
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
sc query Winmgmt %nul% || (
|
if defined _corrupt (
|
||||||
%eline%
|
%eline%
|
||||||
echo Winmgmt service is not installed. Aborting...
|
echo Winmgmt service is corrupted. Aborting...
|
||||||
goto :at_back
|
goto :at_back
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -880,12 +941,12 @@ echo Stopping Winmgmt service
|
||||||
call :_stopservice Winmgmt
|
call :_stopservice Winmgmt
|
||||||
call :_stopservice Winmgmt
|
call :_stopservice Winmgmt
|
||||||
call :_stopservice Winmgmt
|
call :_stopservice Winmgmt
|
||||||
sc query Winmgmt | find /i "1 STOPPED" %nul% && (
|
sc query Winmgmt | find /i "STOPPED" %nul% && (
|
||||||
echo [Successful]
|
echo [Successful]
|
||||||
) || (
|
) || (
|
||||||
call :_color %Red% "[Failed]"
|
call :_color %Red% "[Failed]"
|
||||||
echo:
|
echo:
|
||||||
call :_color %Magenta% "Its recommended to select [Restart] option and then apply Fix WMI option again."
|
call :_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again."
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :"
|
choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :"
|
||||||
|
@ -914,8 +975,8 @@ echo [Successful]
|
||||||
call :_color %Red% "[Failed]"
|
call :_color %Red% "[Failed]"
|
||||||
)
|
)
|
||||||
|
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
call :checkwmi
|
||||||
if %errorlevel% EQU 0 (
|
if not defined error (
|
||||||
echo:
|
echo:
|
||||||
echo Checking WMI
|
echo Checking WMI
|
||||||
call :_color %Green% "[Working]"
|
call :_color %Green% "[Working]"
|
||||||
|
@ -928,8 +989,8 @@ call :registerobj %nul%
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
echo Checking WMI
|
echo Checking WMI
|
||||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
call :checkwmi
|
||||||
if %errorlevel% NEQ 0 (
|
if defined error (
|
||||||
call :_color %Red% "[Not Responding]"
|
call :_color %Red% "[Not Responding]"
|
||||||
echo:
|
echo:
|
||||||
echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors.
|
echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors.
|
||||||
|
@ -959,6 +1020,22 @@ winmgmt /salvagerepository
|
||||||
winmgmt /resetrepository
|
winmgmt /resetrepository
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
:checkwmi
|
||||||
|
|
||||||
|
:: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants
|
||||||
|
|
||||||
|
set error=
|
||||||
|
wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1%
|
||||||
|
if %errorlevel% NEQ 0 (set error=1& exit /b)
|
||||||
|
winmgmt /verifyrepository %nul%
|
||||||
|
if %errorlevel% NEQ 0 (set error=1& exit /b)
|
||||||
|
|
||||||
|
cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul%
|
||||||
|
cmd /c exit /b %errorlevel%
|
||||||
|
echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440" %nul1%
|
||||||
|
if %errorlevel% EQU 0 set error=1
|
||||||
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:at_back
|
:at_back
|
||||||
|
@ -967,7 +1044,7 @@ echo:
|
||||||
echo %line%
|
echo %line%
|
||||||
echo:
|
echo:
|
||||||
call :_color %_Yellow% "Press any key to go back..."
|
call :_color %_Yellow% "Press any key to go back..."
|
||||||
pause >nul
|
pause %nul1%
|
||||||
goto :at_menu
|
goto :at_menu
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -976,7 +1053,39 @@ goto :at_menu
|
||||||
|
|
||||||
echo:
|
echo:
|
||||||
echo Press any key to %_exitmsg%...
|
echo Press any key to %_exitmsg%...
|
||||||
pause >nul
|
pause %nul1%
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:compresslog
|
||||||
|
|
||||||
|
:: 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%
|
||||||
|
for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do (
|
||||||
|
echo/"%%~fD" /inf=no;>>%ddf%
|
||||||
|
)
|
||||||
|
makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\AT_Logs\%2_%_time%.cab"
|
||||||
|
del /q /f %ddf%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -1202,3 +1311,4 @@ set "_Yellow="0E""
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
:: Leave empty line below
|
||||||
|
|
13
README.md
13
README.md
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<h1 align="center">Microsoft Activation Scripts (MAS)</h1>
|
<h1 align="center">Microsoft Activation Scripts (MAS)</h1>
|
||||||
|
|
||||||
<p align="center">A Windows and Office activator using HWID / KMS38 / Online KMS activation methods, with a focus on open-source code and fewer antivirus detections.</p>
|
<p align="center">A Windows and Office activator using HWID / Ohook / KMS38 / Online KMS activation methods, with a focus on open-source code and fewer antivirus detections.</p>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
## Download / How to use it?
|
## Download / How to use it?
|
||||||
|
@ -27,8 +27,8 @@
|
||||||
To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches.html)
|
To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches.html)
|
||||||
|
|
||||||
```
|
```
|
||||||
Latest Version: 1.8
|
Latest Version: 2.0
|
||||||
Release date: 16-Mar-2023
|
Release date: 25-Sep-2023
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Troubleshooting / Help](https://massgrave.dev/troubleshoot.html)
|
### [Troubleshooting / Help](https://massgrave.dev/troubleshoot.html)
|
||||||
|
@ -39,17 +39,18 @@ Release date: 16-Mar-2023
|
||||||
[![1.1]][1]
|
[![1.1]][1]
|
||||||
[![1.2]][2]
|
[![1.2]][2]
|
||||||
[![1.3]][3]
|
[![1.3]][3]
|
||||||
|
[![1.4]][4]
|
||||||
|
|
||||||
[1.1]: https://lookimg.com/images/2023/03/21/QTvjcD.png (Chat with us without signup)
|
[1.1]: https://lookimg.com/images/2023/03/21/QTvjcD.png (Chat with us without signup)
|
||||||
[1.2]: https://lookimg.com/images/2023/03/21/QTvLyd.png (Chat with us)
|
[1.2]: https://lookimg.com/images/2023/03/21/QTvLyd.png (Chat with us)
|
||||||
[1.3]: https://lookimg.com/images/2023/03/21/QTvXBJ.png (Follow on twitter)
|
[1.3]: https://lookimg.com/images/2023/03/21/QTvXBJ.png (Follow on twitter)
|
||||||
|
[1.4]: https://lookimg.com/images/2023/05/17/Q0iZ2U.png (Reddit)
|
||||||
|
|
||||||
[1]: https://discord.gg/gjJEfq7ux8
|
[1]: https://discord.gg/gjJEfq7ux8
|
||||||
[2]: https://t.me/Microsoft_Activation_Scripts
|
[2]: https://t.me/Microsoft_Activation_Scripts
|
||||||
[3]: https://twitter.com/massgravel
|
[3]: https://twitter.com/massgravel
|
||||||
|
[4]: https://www.reddit.com/r/MAS_Activator
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Made with Love ❤️
|
<p align="center">Made with Love ❤️</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue