@ -1,15 +1,12 @@
@@ -1,15 +1,12 @@
@ set masver = 2.6
@ setlocal DisableDelayedExpansion
@ echo off
: :============================================================================
: :
: : This script is a part of 'Microsoft-Activation-Scripts' (MAS) project.
: :
: : Homepage: mass grave[.]dev
: : Email: windowsaddict@protonmail .com
: : Email: mas.help@outlook.com
: :
: :============================================================================
@ -17,26 +14,32 @@
@@ -17,26 +14,32 @@
: :========================================================================================================================================
: : Set Path variable, it helps if it is misconfigured in the system
: : Set Environment variables, it helps if they are misconfigured in the system
setlocal EnableExtensions
setlocal DisableDelayedExpansion
set " PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC "
set " PATH= %SystemRoot% \System32; %SystemRoot% \System32\wbem; %SystemRoot% \System32\WindowsPowerShell\v1.0\ "
set " SysPath= %SystemRoot% \System32 "
set " Path= %SystemRoot% \System32; %SystemRoot% ; %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% "
set " SysPath= %SystemRoot% \Sysnative "
set " Path= %SystemRoot% \Sysnative; %SystemRoot% ; %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
: : or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
set " ComSpec= %SysPath% \cmd.exe "
set " PSModulePath= %ProgramFiles% \WindowsPowerShell\Modules; %SysPath% \WindowsPowerShell\v1.0\Modules "
set " _cmdf= %~f0 "
for %% # in ( %* ) do (
if /i " %% # " == " r1 " set r1 = 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
)
)
: : 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
if exist %SystemRoot% \Sysnative\cmd.exe if not defined r1 (
setlocal EnableDelayedExpansion
start %SystemRoot% \Sysnative\cmd.exe /c " " !_cmdf! " %* r1 "
@ -64,10 +67,10 @@ echo:
@@ -64,10 +67,10 @@ echo:
echo Null service is not running, script may crash...
echo :
echo :
echo Help - %mas% troubleshoot.html
echo Help - %mas% troubleshoot
echo :
echo :
ping 127.0.0.1 -n 1 0
ping 127.0.0.1 -n 2 0
)
cls
@ -76,9 +79,13 @@ cls
@@ -76,9 +79,13 @@ cls
pushd " %~dp0 "
> nul findstr /v " $ " " %~nx0 " && (
echo :
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing.
echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
echo :
echo :
echo Help - %mas% troubleshoot
echo :
ping 127.0.0.1 -n 6 > nul
echo :
ping 127.0.0.1 -n 20 > nul
popd
exit /b
)
@ -92,6 +99,7 @@ title Extract $OEM$ Folder %masver%
@@ -92,6 +99,7 @@ title Extract $OEM$ Folder %masver%
set _args =
set _elev =
set _unattended = 0
set _args = %*
if defined _args set _args = %_args:"=%
@ -106,35 +114,7 @@ set "nul2=2>nul"
@@ -106,35 +114,7 @@ set "nul2=2>nul"
set " nul6=2 ^ >nul "
set " nul=>nul 2>&1 "
set psc = powershell.exe
set winbuild = 1
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 %nul2% | find /i " 0x0 " %nul1% && ( set _NCS = 0)
if %_NCS% EQU 1 (
for /F %% a in ( 'echo prompt $E ^| cmd' ) do set " esc= %% a "
set " Red= " 41;97m" "
set " Gray= " 100;97m" "
set " Green= " 42;97m" "
set " Blue= " 44;97m" "
set " _White= " 40;37m" "
set " _Green= " 40;92m" "
set " _Yellow= " 40;93m" "
) else (
set " Red= " Red" " white" "
set " Gray= " Darkgray" " white" "
set " Green= " DarkGreen" " white" "
set " Blue= " Blue" " white" "
set " _White= " Black" " Gray" "
set " _Green= " Black" " Green" "
set " _Yellow= " Black" " Yellow" "
)
set " nceline=echo: &echo ==== ERROR ==== &echo: "
set " eline=echo: &call :ex_color %Red% " ==== ERROR ====" &echo: "
call : dk_setvar
: :========================================================================================================================================
@ -145,12 +125,6 @@ echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equiva
@@ -145,12 +125,6 @@ echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equiva
goto done2
)
for %% # in ( powershell.exe) do @ if " %% ~$PATH:# " == " " (
%nceline%
echo Unable to find powershell.exe in the system.
goto done2
)
: :========================================================================================================================================
: : Fix special characters limitation in path name
@ -162,6 +136,8 @@ set "_batf=%~f0"
@@ -162,6 +136,8 @@ set "_batf=%~f0"
set " _batp= %_batf:'=''% "
set _PSarg = " " " %~f0 " " " -el %_args%
set _PSarg = %_PSarg:'=''%
set " _ttemp= %userprofile% \AppData\Local\Temp "
setlocal EnableDelayedExpansion
@ -181,10 +157,36 @@ goto done2
@@ -181,10 +157,36 @@ goto done2
: :========================================================================================================================================
: : Check PowerShell
REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest:
cmd /c " %psc% " $f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])" " | find /i " FullLanguage " %nul1% || (
%eline%
cmd /c " %psc% " $ExecutionContext.SessionState.LanguageMode" "
echo :
cmd /c " %psc% " $ExecutionContext.SessionState.LanguageMode" " | find /i " FullLanguage " %nul1% && (
echo Failed to run Powershell command but Powershell is working.
call : dk_color %Blue% " Check if your antivirus is blocking the script. "
echo :
set fixes = %fixes% %mas% troubleshoot
call : dk_color2 %Blue% " Help - " %_Yellow% " %mas% troubleshoot "
) || (
echo PowerShell is not working. Aborting...
echo If you have applied restrictions on Powershell then undo those changes.
echo :
set fixes = %fixes% %mas% fix_powershell
call : dk_color2 %Blue% " Help - " %_Yellow% " %mas% fix_powershell "
)
goto done2
)
: :========================================================================================================================================
: : Elevate script as admin and pass arguments and preventing loop
%nul1% fltmc || (
if not defined _elev %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%
echo This script needs admin rights.
echo To do so, right click on this script and select 'Run as administrator'.
@ -193,18 +195,45 @@ goto done2
@@ -193,18 +195,45 @@ goto done2
: :========================================================================================================================================
: : 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
: : Disable QuickEdit and launch from conhost.exe to avoid Terminal app
for %% # in ( %_args% ) do ( if /i " %% # " == " -qedit " set quedit = 1)
if %winbuild% GEQ 17763 (
set terminal = 1
) else (
set terminal =
)
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
: : Check if script is running in Terminal app
set r1 = $TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);
set r2 = %r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128);
set r3 = %r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128);
set d1 = %r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow();
set d2 = %d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero);
if defined terminal (
%psc% " %d2% " %nul2% | find /i " True " %nul1% && set terminal =
)
if %_unattended% == 1 goto : skipQE
for %% # in ( %_args% ) do ( if /i " %% # " == " -qedit " goto : skipQE )
if defined terminal (
set " launchcmd=start conhost.exe %psc% "
) else (
set " launchcmd= %psc% "
)
: : Disable QuickEdit in current session
set " d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); "
set " d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128); "
set " d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128); "
set " d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080); "
%launchcmd% " %d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit' " && ( exit /b) || ( set terminal = 1)
: skipQE
: :========================================================================================================================================
: : Check for updates
@ -219,18 +248,19 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6
@@ -219,18 +248,19 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6
if defined old (
echo ________________________________________________
%eline%
echo You are running outdated version MAS %masver%
echo Version %masver% of MAS is outdated.
echo ________________________________________________
echo :
if not %_unattended% == 1 (
echo [1] Get Latest MAS
echo [0] Continue Anyway
echo :
call : ex _color %_Green% " Enter a menu option in the Keyboard [1,0] : "
call : dk _color %_Green% " Enter a menu option in the Keyboard [1,0] : "
choice /C:10 /N
if !errorlevel! == 2 rem
if !errorlevel! == 1 ( start ht%-% tps://github.com/mass%-% gravel/Microsoft-Acti%-% vation-Scripts & start %mas% & exit /b)
)
cls
)
: :========================================================================================================================================
@ -255,7 +285,7 @@ setlocal EnableDelayedExpansion
@@ -255,7 +285,7 @@ setlocal EnableDelayedExpansion
: :========================================================================================================================================
mode con cols=78 lines= 30
if not defined terminal mode 78, 30
if exist " !desktop! \$OEM$\ " (
echo _____________________________________________________
@ -296,7 +326,7 @@ goto done2
@@ -296,7 +326,7 @@ goto done2
: Menu
cls
mode con cols=78 lines= 30
if not defined terminal mode 78, 30
echo :
echo :
echo :
@ -315,16 +345,16 @@ echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^)
@@ -315,16 +345,16 @@ echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^)
echo : [8] KMS38 ^( Windows^) ^+ Online KMS ^( Office^)
echo : [9] Online KMS ^( Windows^) ^+ Ohook ^( Office^)
echo :
call : ex _color2 %_White% " [R] " %_Green% " ReadMe "
call : dk _color2 %_White% " [R] " %_Green% " ReadMe "
echo : [0] Exit
echo : ________________________________________________________
echo :
call : ex _color2 %_White% " " %_Green% " Enter a menu option in the Keyboard : "
call : dk _color2 %_White% " " %_Green% " Enter a menu option in the Keyboard : "
choice /C:123456789R0 /N
set _erl = %errorlevel%
if %_erl% == 11 exit /b
if %_erl% == 10 start %mas% oem-folder.html & goto : Menu
if %_erl% == 10 start %mas% oem-folder & goto : Menu
if %_erl% == 9 goto : kms_ohook
if %_erl% == 8 goto : kms38_kms
if %_erl% == 7 goto : kms38_ohook
@ -450,7 +480,7 @@ goto done
@@ -450,7 +480,7 @@ goto done
fltmc > nul || exit /b
call " %~dp0 Online_KMS_Activation.cmd " /KMS-ActAndRenewalTask /KMS -WindowsOffice
call " %~dp0 Online_KMS_Activation.cmd " /K-WindowsOffice
cd \
( goto ) 2 > nul & ( if " %~dp0 " == " %SystemRoot% \Setup\Scripts\ " rd /s /q " %~dp0 " )
@ -525,7 +555,7 @@ call "%~dp0HWID_Activation.cmd" /HWID
@@ -525,7 +555,7 @@ call "%~dp0HWID_Activation.cmd" /HWID
endlocal
setlocal
call " %~dp0 Online_KMS_Activation.cmd " /KMS-ActAndRenewalTask /KMS -Office
call " %~dp0 Online_KMS_Activation.cmd " /K-Office
endlocal
cd \
@ -601,7 +631,7 @@ call "%~dp0KMS38_Activation.cmd" /KMS38
@@ -601,7 +631,7 @@ call "%~dp0KMS38_Activation.cmd" /KMS38
endlocal
setlocal
call " %~dp0 Online_KMS_Activation.cmd " /KMS-ActAndRenewalTask /KMS -Office
call " %~dp0 Online_KMS_Activation.cmd " /K-Office
endlocal
cd \
@ -635,7 +665,7 @@ goto done
@@ -635,7 +665,7 @@ goto done
fltmc > nul || exit /b
setlocal
call " %~dp0 Online_KMS_Activation.cmd " /KMS-ActAndRenewalTask /KMS -Windows
call " %~dp0 Online_KMS_Activation.cmd " /K-Windows
endlocal
setlocal
@ -658,8 +688,8 @@ goto :done2
@@ -658,8 +688,8 @@ goto :done2
echo ______________________________________________________________
echo :
call : ex _color %Blue% " %oem% "
call : ex _color %Green% " $OEM$ folder is successfully created on the Desktop. "
call : dk _color %Blue% " %oem% "
call : dk _color %Green% " $OEM$ folder is successfully created on the Desktop. "
echo " %oem% " | find /i " 38 " %nul% && (
echo :
echo To KMS38 activate Server Cor/Acor editions ^( No GUI Versions^) ,
@ -670,8 +700,65 @@ echo ______________________________________________________________
@@ -670,8 +700,65 @@ echo ______________________________________________________________
: done2
echo :
call : ex_color %_Yellow% " Press any key to exit... "
if defined fixes (
call : dk_color2 %Blue% " Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore "
choice /C:10 /N
if !errorlevel! == 1 ( for %% # in ( %fixes% ) do ( start %% #) )
)
if defined terminal (
call : dk_color %_Yellow% " Press 0 key to %_exitmsg% ... "
choice /c 0 /n
) else (
call : dk_color %_Yellow% " Press any key to %_exitmsg% ... "
pause %nul1%
)
exit /b
: :========================================================================================================================================
: : Set variables
: dk_setvar
set psc = powershell.exe
set winbuild = 1
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 %nul2% | find /i " 0x0 " %nul1% && ( set _NCS = 0)
if %_NCS% EQU 1 (
for /F %% a in ( 'echo prompt $E ^| cmd' ) do set " esc= %% a "
set " Red= " 41;97m" "
set " Gray= " 100;97m" "
set " Green= " 42;97m" "
set " Blue= " 44;97m" "
set " _Red= " 40;91m" "
set " _White= " 40;37m" "
set " _Green= " 40;92m" "
set " _Yellow= " 40;93m" "
) else (
set " Red= " Red" " white" "
set " Gray= " Darkgray" " white" "
set " Green= " DarkGreen" " white" "
set " Blue= " Blue" " white" "
set " _Red= " Black" " Red" "
set " _White= " Black" " Gray" "
set " _Green= " Black" " Green" "
set " _Yellow= " Black" " Yellow" "
)
set " nceline=echo: &echo ==== ERROR ==== &echo: "
set " eline=echo: &call :dk_color %Red% " ==== ERROR ====" &echo: "
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. "
)
exit /b
: :========================================================================================================================================
@ -685,7 +772,7 @@ exit /b
@@ -685,7 +772,7 @@ exit /b
: :========================================================================================================================================
: ex _color
: dk _color
if %_NCS% EQU 1 (
echo %esc% [%~1 %~2 %esc% [0m
@ -694,7 +781,7 @@ if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3')
@@ -694,7 +781,7 @@ if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3')
)
exit /b
: ex _color2
: dk _color2
if %_NCS% EQU 1 (
echo %esc% [%~1 %~2 %esc% [%~3 %~4 %esc% [0m