diff --git a/.gitattributes b/.gitattributes index daf18c3..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore +.gitattributes export-ignore diff --git a/LICENSE b/LICENSE index 53d1f3d..f288702 100644 --- a/LICENSE +++ b/LICENSE @@ -672,4 +672,3 @@ may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . - diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_8C3AA7E0.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_8C3AA7E0.cmd index cefeab9..05a9402 100644 --- a/MAS/All-In-One-Version/MAS_AIO-CRC32_8C3AA7E0.cmd +++ b/MAS/All-In-One-Version/MAS_AIO-CRC32_8C3AA7E0.cmd @@ -1,18 +1,19 @@ -@rem RANDAM-ad90b7f0-440e-475f-98e3-d90447095365 -@set masver=2.6 +@::RANDOM-09dbb08f-d896-4653-b84f-24fc22f8d250 +@set masver=2.7 @setlocal DisableDelayedExpansion @echo off -:: For command line switches, check mass grave [.] dev/command_line_switches.html +:: For command line switches, check mass grave[.]dev/command_line_switches :: If you want to better understand script, read from MAS separate files version. + ::============================================================================ :: -:: Homepage: mass grave [.] dev -:: Email: windowsaddict@protonmail.com +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com :: ::============================================================================ @@ -20,26 +21,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 1>nul -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" @@ -67,10 +74,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -79,9 +86,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: echo: -ping 127.0.0.1 -n 6 >nul +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -95,7 +106,7 @@ title Microsoft_Activation_Scripts %masver% set _args= set _elev= -set _MASunattended= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% @@ -105,7 +116,7 @@ if /i "%%A"=="-el" set _elev=1 ) ) -if defined _args echo "%_args%" | find /i "/" >nul && set _MASunattended=1 +if defined _args echo "%_args%" | find /i "/" >nul && set _unattended=1 ::======================================================================================================================================== @@ -114,38 +125,18 @@ set "nul2=2>nul" set "nul6=2^>nul" set "nul=>nul 2>&1" -set winbuild=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 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) - -call :_colorprep - -set "nceline=echo: &echo ==== ERROR ==== &echo:" -set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" - -::======================================================================================================================================== +call :dk_setvar if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. -goto MASend -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. -echo Aborting... -goto MASend +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -154,6 +145,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -163,13 +155,39 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( -%nceline% -echo Script is launched from the temp folder, -echo Most likely you are running the script directly from the archive file. +%eline% +echo The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. -goto MASend +goto dk_done +) +) + +::======================================================================================================================================== + +:: 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 dk_done ) ::======================================================================================================================================== @@ -177,30 +195,54 @@ goto MASend :: 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 -%nceline% +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'. -goto MASend +echo Right click on this script and select 'Run as administrator'. +goto dk_done ) -if not exist "%SystemRoot%\Temp\" mkdir "%SystemRoot%\Temp" %nul% - ::======================================================================================================================================== -:: 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 + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) + +:: Check if script is running in Terminal app -if defined _MASunattended set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) +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); -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 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 @@ -209,29 +251,30 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: -if not defined _MASunattended ( +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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 ::======================================================================================================================================== +if not exist "%SystemRoot%\Temp\" mkdir "%SystemRoot%\Temp" %nul% + :: Run script with parameters in unattended mode set _elev= @@ -239,7 +282,7 @@ if defined _args echo "%_args%" | find /i "/S" %nul% && (set "_silent=%nul%") || if defined _args echo "%_args%" | find /i "/" %nul% && ( echo "%_args%" | find /i "/HWID" %nul% && (setlocal & cls & (call :HWIDActivation %_args% %_silent%) & endlocal) echo "%_args%" | find /i "/KMS38" %nul% && (setlocal & cls & (call :KMS38Activation %_args% %_silent%) & endlocal) -echo "%_args%" | find /i "/KMS-" %nul% && (setlocal & cls & (call :KMSActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/K-" %nul% && (setlocal & cls & (call :KMSActivation %_args% %_silent%) & endlocal) echo "%_args%" | find /i "/Ohook" %nul% && (setlocal & cls & (call :OhookActivation %_args% %_silent%) & endlocal) exit /b ) @@ -250,12 +293,19 @@ 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 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:'=''%" setlocal EnableDelayedExpansion +if not defined desktop ( +%eline% +echo Unable to detect Desktop location, aborting... +goto dk_done +) + ::======================================================================================================================================== :MainMenu @@ -263,7 +313,7 @@ setlocal EnableDelayedExpansion cls color 07 title Microsoft %blank%Activation %blank%Scripts %masver% -mode 76, 30 +if not defined terminal mode 76, 33 echo: echo: @@ -279,22 +329,28 @@ echo: [3] KMS38 ^| Windows ^| Year 2038 echo: [4] Online KMS ^| Windows / Office ^| 180 Days echo: __________________________________________________ echo: -echo: [5] Activation Status -echo: [6] Troubleshoot -echo: [7] Extras -echo: [8] Help +echo: [5] Check Activation Status +echo: [6] Change Windows Edition +echo: [7] Change Office Edition +echo: __________________________________________________ +echo: +echo: [8] Troubleshoot +echo: [9] Extras +echo: [H] Help echo: [0] Exit echo: ______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8,0] :" -choice /C:123456780 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,6,7,8,9,H,0] :" +choice /C:123456789H0 /N set _erl=%errorlevel% -if %_erl%==9 exit /b -if %_erl%==8 start %mas%troubleshoot.html & goto :MainMenu -if %_erl%==7 goto:Extras -if %_erl%==6 setlocal & call :troubleshoot & cls & endlocal & goto :MainMenu -if %_erl%==5 setlocal & call :_Check_Status_wmi & cls & endlocal & goto :MainMenu +if %_erl%==11 exit /b +if %_erl%==10 start %mas%troubleshoot & goto :MainMenu +if %_erl%==9 goto :Extras +if %_erl%==8 setlocal & call :troubleshoot & cls & endlocal & goto :MainMenu +if %_erl%==7 setlocal & call :change_offedition & cls & endlocal & goto :MainMenu +if %_erl%==6 setlocal & call :change_winedition & cls & endlocal & goto :MainMenu +if %_erl%==5 setlocal & call :check_actstatus & cls & endlocal & goto :MainMenu if %_erl%==4 setlocal & call :KMSActivation & cls & endlocal & goto :MainMenu if %_erl%==3 setlocal & call :KMS38Activation & cls & endlocal & goto :MainMenu if %_erl%==2 setlocal & call :OhookActivation & cls & endlocal & goto :MainMenu @@ -307,35 +363,29 @@ goto :MainMenu cls title Extras -mode 76, 30 -echo: +if not defined terminal mode 76, 30 echo: echo: echo: echo: -echo: ______________________________________________________________ -echo: -echo: [1] Change Windows Edition -echo: -echo: [2] Extract $OEM$ Folder -echo: -echo: [3] Activation Status [vbs] echo: -echo: [4] Download Genuine Windows / Office -echo: __________________________________________________ -echo: -echo: [0] Go to Main Menu -echo: ______________________________________________________________ +echo: ______________________________________________________ +echo: +echo: [1] Extract $OEM$ Folder +echo: +echo: [2] Download Genuine Windows / Office +echo: ____________________________________________ +echo: +echo: [0] Go to Main Menu +echo: ______________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,0] :" -choice /C:12340 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0] :" +choice /C:120 /N set _erl=%errorlevel% -if %_erl%==5 goto :MainMenu -if %_erl%==4 start %mas%genuine-installation-media.html & goto :Extras -if %_erl%==3 setlocal & call :_Check_Status_vbs & cls & endlocal & goto :Extras -if %_erl%==2 goto:Extract$OEM$ -if %_erl%==1 setlocal & call :change_edition & cls & endlocal & goto :Extras +if %_erl%==3 goto :MainMenu +if %_erl%==2 start %mas%genuine-installation-media & goto :Extras +if %_erl%==1 goto :Extract$OEM$ goto :Extras ::======================================================================================================================================== @@ -344,33 +394,23 @@ goto :Extras cls title Extract $OEM$ Folder -mode 76, 30 - -if not exist "!_desktop_!\" ( -%eline% -echo Desktop location was not detected, aborting... -echo _____________________________________________________ -echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -goto Extras -) +if not defined terminal mode 76, 30 -if exist "!_desktop_!\$OEM$\" ( +if exist "!desktop!\$OEM$\" ( %eline% echo $OEM$ folder already exists on the Desktop. echo _____________________________________________________ echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -goto Extras +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." +choice /c 0 /n +goto :Extras ) :Extract$OEM$2 cls title Extract $OEM$ Folder -mode 78, 30 +if not defined terminal mode 78, 30 echo: echo: echo: @@ -389,22 +429,22 @@ echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^) echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^) echo: -call :_color2 %_White% " [R] " %_Green% "ReadMe" +call :dk_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Go Back echo: ________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard:" choice /C:123456789R0 /N set _erl=%errorlevel% if %_erl%==11 goto:Extras -if %_erl%==10 start %mas%oem-folder.html &goto:Extract$OEM$2 -if %_erl%==9 (set "_oem=Online KMS [Windows] + Ohook [Office]" & set "para=/KMS-ActAndRenewalTask /KMS-Windows /Ohook" &goto:Extract$OEM$3) -if %_erl%==8 (set "_oem=KMS38 [Windows] + Online KMS [Office]" & set "para=/KMS38 /KMS-ActAndRenewalTask /KMS-Office" &goto:Extract$OEM$3) +if %_erl%==10 start %mas%oem-folder &goto:Extract$OEM$2 +if %_erl%==9 (set "_oem=Online KMS [Windows] + Ohook [Office]" & set "para=/K-Windows /Ohook" &goto:Extract$OEM$3) +if %_erl%==8 (set "_oem=KMS38 [Windows] + Online KMS [Office]" & set "para=/KMS38 /K-Office" &goto:Extract$OEM$3) if %_erl%==7 (set "_oem=KMS38 [Windows] + Ohook [Office]" & set "para=/KMS38 /Ohook" &goto:Extract$OEM$3) -if %_erl%==6 (set "_oem=HWID [Windows] + Online KMS [Office]" & set "para=/HWID /KMS-ActAndRenewalTask /KMS-Office" &goto:Extract$OEM$3) +if %_erl%==6 (set "_oem=HWID [Windows] + Online KMS [Office]" & set "para=/HWID /K-Office" &goto:Extract$OEM$3) if %_erl%==5 (set "_oem=HWID [Windows] + Ohook [Office]" & set "para=/HWID /Ohook" &goto:Extract$OEM$3) -if %_erl%==4 (set "_oem=Online KMS" & set "para=/KMS-ActAndRenewalTask /KMS-WindowsOffice" &goto:Extract$OEM$3) +if %_erl%==4 (set "_oem=Online KMS" & set "para=/K-WindowsOffice" &goto:Extract$OEM$3) if %_erl%==3 (set "_oem=KMS38" & set "para=/KMS38" &goto:Extract$OEM$3) if %_erl%==2 (set "_oem=Ohook" & set "para=/Ohook" &goto:Extract$OEM$3) if %_erl%==1 (set "_oem=HWID" & set "para=/HWID" &goto:Extract$OEM$3) @@ -415,9 +455,11 @@ goto :Extract$OEM$2 :Extract$OEM$3 cls -set "_dir=!_desktop_!\$OEM$\$$\Setup\Scripts" +set "_dir=!desktop!\$OEM$\$$\Setup\Scripts" md "!_dir!\" -copy /y /b "!_batf!" "!_dir!\MAS_AIO.cmd" %nul% + +:: Add random data on top to create unique file which helps in avoiding AV's detections +%psc% "$f=[io.file]::ReadAllText('!_batp!'); [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\MAS_AIO.cmd', '@::RANDOM-' + [Guid]::NewGuid().Guid + [Environment]::NewLine + $f, [System.Text.Encoding]::ASCII)" ( echo @echo off @@ -433,11 +475,12 @@ if not exist "!_dir!\SetupComplete.cmd" set _error=1 if defined _error ( %eline% -echo Failed to extract $OEM$ folder on the Desktop. +echo The script failed to create the $OEM$ folder. +if exist "!desktop!\$OEM$\.*" rmdir /s /q "!desktop!\$OEM$\" %nul% ) else ( echo: -call :_color %Blue% "%_oem%" -call :_color %Green% "$OEM$ folder is successfully created on the Desktop." +call :dk_color %Blue% "%_oem%" +call :dk_color %Green% "$OEM$ folder was successfully created on your Desktop." ) echo "%_oem%" | find /i "KMS38" 1>nul && ( echo: @@ -446,15 +489,13 @@ echo Check this page %mas%oem-folder ) echo ___________________________________________________________________ echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." +choice /c 0 /n goto Extras :+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :HWIDActivation -@setlocal DisableDelayedExpansion -@echo off :: To activate, run the script with "/HWID" parameter or change 0 to 1 in below line set _act=0 @@ -488,118 +529,60 @@ for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -set "nul1=1>nul" -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 :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." -) - -::======================================================================================================================================== - if %winbuild% LSS 10240 ( %eline% echo Unsupported OS version detected [%winbuild%]. -echo HWID Activation is supported only for Windows 10/11. -echo Use Online KMS Activation option. +echo HWID Activation is only supported on Windows 10/11. +echo: +call :dk_color %Blue% "Use Online KMS activation option." goto dk_done ) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% -echo HWID Activation is not supported for Windows Server. -echo Use KMS38 or Online KMS Activation option. +echo HWID Activation is not supported on Windows Server. +call :dk_color %Blue% "Use KMS38 or Online KMS activation option." goto dk_done ) -::======================================================================================================================================== - -:: Fix 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=%userprofile%\AppData\Local\Temp" - setlocal EnableDelayedExpansion ::======================================================================================================================================== cls +if not defined terminal ( mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) title HWID Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell - -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +for %%# in ( +sppsvc.exe +ClipUp.exe +) do ( +if not exist %SysPath%\%%# ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode -echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. +echo [%SysPath%\%%#] file is missing, aborting... echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) +) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -610,12 +593,12 @@ if defined _perm ( cls echo ___________________________________________________________________________________________ echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." +call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate Anyway [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -629,40 +612,27 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 %eline% echo [%winos% ^| %winbuild%] echo: -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% +echo Evaluation editions cannot be activated outside of their evaluation period. echo: -echo Download it from here, -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) ::======================================================================================================================================== -call :dk_checksku - -if not defined osSKU ( -%eline% -echo SKU value was not detected properly. Aborting... -goto dk_done -) - -::======================================================================================================================================== - set error= cls 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 "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%] +call :dk_showosinfo :: Check Internet connection set _int= for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _int=1) +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) if not defined _int ( @@ -675,29 +645,14 @@ echo Checking Internet Connection [Connected%ping_f%] ) else ( set error=1 call :dk_color %Red% "Checking Internet Connection [Not Connected]" -) - -::======================================================================================================================================== - -:: Check Windows Script Host - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] +call :dk_color %Blue% "Internet is required for HWID activation." ) ::======================================================================================================================================== echo Initiating Diagnostic Tests... -set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt DoSvc UsoSvc CryptSvc BITS TrustedInstaller wuauserv" -if %winbuild% GEQ 17134 set "_serv=%_serv% WaaSMedicSvc" +set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt" :: Client License Service (ClipSVC) :: Microsoft Account Sign-in Assistant @@ -705,49 +660,24 @@ if %winbuild% GEQ 17134 set "_serv=%_serv% WaaSMedicSvc" :: CNG Key Isolation :: Windows License Manager Service :: Windows Management Instrumentation -:: Delivery Optimization -:: Update Orchestrator Service -:: Cryptographic Services -:: Background Intelligent Transfer Service -:: Windows Modules Installer -:: Windows Update -:: Windows Update Medic Service call :dk_errorcheck -:: Check Windows updates and store app blockers - -set updatesblock= -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\Policies\Microsoft\Windows\WindowsUpdate /s %nul2% | findstr /i "NoAutoUpdate DisableWindowsUpdateAccess" %nul% && set updatesblock=1 - -if defined updatesblock call :dk_color %Gray% "Checking Update Blocker In Registry [Found]" - -if defined applist echo: %serv_e% | find /i "wuauserv" %nul% && ( -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 %nul2% | find /i "0x1" %nul% && ( -call :dk_color %Gray% "Checking Store Blocker In Registry [Found]" -) - ::======================================================================================================================================== :: Detect Key set key= set altkey= -set skufound= set changekey= set altapplist= set altedition= set notworking= -if defined applist call :hwiddata key +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :hwiddata key if not defined key ( -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1]);"') do (set altapplist=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1])"') do (set altapplist=%%a) if defined altapplist call :hwiddata key ) @@ -763,13 +693,17 @@ call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Acti if not defined key ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skufound ( -echo Unable to find this product in the supported product list. +if not defined skunotfound ( +echo This product does not support HWID activation. +echo Make sure you are using the latest version of the script. +echo If you are, then try KMS38 activation option. +set fixes=%fixes% %mas% +echo %mas% ) else ( -echo Required License files not found in %SystemRoot%\System32\spp\tokens\skus\ +echo Required license files not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -echo Make sure you are using updated version of the script. -echo %mas% echo: goto dk_done ) @@ -782,30 +716,17 @@ if defined notworking set error=1 echo: if defined changekey ( -call :dk_color %Blue% "[%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: ) -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 errorcode=%errorlevel% -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]" - -if %errorcode% EQU 0 ( -call :dk_refresh -echo Installing Generic Product Key [%key%] [Successful] -) else ( -call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%" -if not defined error ( -if defined altapplist call :dk_color %Red% "Activation ID not found for this key." -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 -) -set error=1 +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] detected. Script will activate base edition [SKU ID-%regSKU%]." +echo: ) +call :dk_inskey "[%key%]" + ::======================================================================================================================================== :: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries @@ -830,12 +751,6 @@ 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 :: 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]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -goto :dl_final -) - set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" if not exist "%tdir%\" md "%tdir%\" %nul% @@ -848,7 +763,7 @@ call :hwiddata ticket copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]" +call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting...]" echo [%encoded%] if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :dl_final @@ -859,14 +774,14 @@ echo Generating GenuineTicket.xml [Successful] set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) @@ -893,7 +808,7 @@ set rebuildinfo=1 call :dk_color %Red% "Checking Ticket Migration [Failed]" ) -if defined applist if not defined showfix if defined rebuildinfo ( +if not defined altapplist if not defined showfix if defined rebuildinfo ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" ) @@ -917,13 +832,31 @@ goto :dl_final ::========================================================================================================================================== +:: Clear store ID related registry to fix activation if Internet is connected + +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" + +if defined _int ( +reg delete "%_ident%" /f %nul% +reg query "%_ident%" %nul% && ( +echo: +set error=1 +call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" +) +for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +call :dk_refresh +call :dk_act +call :dk_checkperm +) + +::========================================================================================================================================== + :: Extended licensing servers tests incase error not found and activation failed +if %keyerror% EQU 0 if not defined _perm if defined _int ( set resfail= -if not defined error ( - ipconfig /flushdns %nul% -set "tls=$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072); [System.Net.ServicePointManager]::SecurityProtocol = $Tls12;" +set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" for %%# in ( login.live.com/ppsecure/deviceaddcredential.srf @@ -943,41 +876,58 @@ if not defined resfail ( if defined resfail ( set error=1 echo: -call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" +call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ::========================================================================================================================================== -:: Clear store ID related registry to fix activation incase error not found +if %keyerror% EQU 0 if not defined _perm if defined _int ( -if not defined error ( +reg query "%_ident%" %nul% || ( +set error=1 echo: -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" -reg delete "!_ident!" /f %nul% -reg query "!_ident!" %nul% && ( -call :dk_color %Red% "Deleting a Registry [Failed] [!_ident!]" -) || ( -echo Deleting a Registry [Successful] [!_ident!] +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" ) -REM Refresh some services and license status +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 +if defined wublock call :dk_color %Red% "Checking Update Blocker In Registry [Found]" -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% Restart-Service %%# %nul%) -call :dk_refresh -call :dk_act -call :dk_checkperm +reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( +set storeblock=1 +call :dk_color %Red% "Checking Store Blocker In Registry [Found]" ) -REM Check Internet related error codes +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || set wucorrupt=1 +) -if not defined error if not defined _perm ( -echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf" %nul% && ( -set error=1 -echo: +for %%G in (Parameters Security TriggerInfo) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucorrupt=1 +) + +if defined wucorrupt ( +call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" +) else ( +%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 10 | Out-Null" +sc query wuauserv | find /i "RUNNING" %nul% || ( +set wuerror=1 +sc start wuauserv %nul% +call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" +) +) + +REM Check Internet related error codes + +if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock ( +echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +) ) ) @@ -989,11 +939,12 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license. ) else ( call :dk_color %Red% "Activation Failed %error_code%" if defined notworking ( -call :dk_color %Blue% "At the time of writing this, HWID Activation was not supported for this product." -call :dk_color %Blue% "Use KMS38 Activation option." +call :dk_color %Blue% "At the time of writing, HWID Activation is not supported for this product." +call :dk_color %Blue% "Use KMS38 activation option instead." ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -1012,51 +963,173 @@ call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - ) ) -if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." +REM if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." + +:: Trigger reevaluation of SPP's Scheduled Tasks +if defined _perm ( +call :dk_reeval %nul% +) goto :dk_done ::======================================================================================================================================== +:: 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 + +:: Show OS info + +:dk_showosinfo + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) +) + +echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] +exit /b + :: Check SKU value :dk_checksku +call :dk_reflection + set osSKU= set slcSKU= set wmiSKU= set regSKU= +set winsub= if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); 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) +set slcSKU=%slcSKU: =% if "%slcSKU%"=="0" set slcSKU= -if 1%slcSKU% NEQ +1%slcSKU% set slcSKU= +for /f "tokens=* delims=0123456789" %%a in ("%slcSKU%") do (if not "[%%a]"=="[]" set slcSKU=) 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 %winbuild% GEQ 15063 %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';iex ($f[1])" %nul2% | find /i "Subscription_is_activated" %nul% && ( +if defined regSKU if defined slcSKU if not "%regSKU%"=="%slcSKU%" ( +set winsub=1 +set osSKU=%regSKU% +) +) + +if not defined osSKU set osSKU=%slcSKU% if not defined osSKU set osSKU=%wmiSKU% if not defined osSKU set osSKU=%regSKU% exit /b +:: Get Windows Subscription status + +:winsubstatus: +$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(6, 1).DefineDynamicModule(4).DefineType(2) +[void]$DM.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$m = [System.Runtime.InteropServices.Marshal] +$p = $m::AllocHGlobal(12) +$r = $DM.CreateType()::ClipGetSubscriptionStatus([ref]$p) +if ($r -eq 0) { + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: + :: Get Windows permanent activation status :dk_checkperm -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='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 1 wmic path %spp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= 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% +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% +exit /b + +:: Install Key + +:dk_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] +) else ( +call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." +call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +set error=1 +) + exit /b :: Activation command @@ -1064,28 +1137,53 @@ exit /b :dk_act set error_code= -if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" call Activate %nul% -if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).Activate()" %nul% -if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ato %nul% +if %_wmic% EQU 1 wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL" call Activate %nul% +if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 (set "error_code=[Error Code: 0x%=ExitCode%]") else (set error_code=) exit /b -:: Get Windows Activation IDs +:: Get all products 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" %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='+$_)}" %nul6%')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Trigger reevaluation, it helps in updating SPP tasks + +:dk_reeval + +:: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP + +set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" +reg delete "%ruleskey%" /v "State" /f %nul% +reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); +set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" exit /b :: Get Activation IDs from licensing files if not found through WMI :getactivationid: -$folderPath = "$env:windir\System32\spp\tokens\skus" +$folderPath = "$env:SysPath\spp\tokens\skus" $files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms" $guids = @() foreach ($file in $files) { @@ -1100,22 +1198,61 @@ $guidsString = $guids -join " " $guidsString :getactivationid: +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + :: Check wmic.exe :dk_ckeckwmic set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +) +exit /b + +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] ) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" 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%%') @@ -1127,6 +1264,22 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) + +if not defined winsub exit /b + +:: Check base edition product name if Windows subscription license is found + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a +) else ( +set winos=Windows 10 %%a +) +) exit /b :: Common lines used in PowerShell reflection code @@ -1140,9 +1293,68 @@ exit /b ::======================================================================================================================================== +:dk_chkmal + +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. + +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico +if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS +set pupfound=%pupfound1%%pupfound2% + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +set wucount=0 +for %%# in (wuauserv) do ( +set _corrupt= +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 & set /a wucount+=1) +) +) +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) +exit /b + +::======================================================================================================================================== + :dk_errorcheck set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) + +::======================================================================================================================================== :: Check corrupt services @@ -1154,7 +1366,6 @@ 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 /i %%#==TrustedInstaller if /i %%G==DependOnService set _corrupt= ) if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) @@ -1162,6 +1373,7 @@ if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (s if defined serv_cor ( set error=1 +set showfix=1 call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) @@ -1188,12 +1400,6 @@ if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%# if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% -if /i %%#==DoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==UsoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==CryptSvc sc config %%# start= auto %nul% -if /i %%#==BITS sc config %%# start= delayed-auto %nul% -if /i %%#==wuauserv sc config %%# start= demand %nul% -if /i %%#==WaaSMedicSvc sc config %%# start= demand %nul% if !errorlevel!==0 ( if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") ) else ( @@ -1220,7 +1426,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% Start-Service %%# %nul% +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1234,7 +1440,7 @@ if defined serv_e ( set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( -call :dk_color %Blue% "Restart the system to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) @@ -1270,96 +1476,94 @@ call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE set wpainfo= set wpaerror= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) echo "%wpainfo%" | find /i "Error Found" %nul% && ( set error=1 set wpaerror=1 -call :dk_color %Red% "Checking WPA Registry Error [%wpainfo%]" +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" ) || ( echo Checking WPA Registry Count [%wpainfo%] ) -DISM /English /Online /Get-CurrentEdition %nul% -set dism_error=%errorlevel% -cmd /c exit /b %dism_error% -if %dism_error% NEQ 0 set "dism_error=0x%=ExitCode%" -if %dism_error% NEQ 0 ( -call :dk_color %Red% "Checking DISM [Not Responding] [%dism_error%]" -) - - if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 -set showfix=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" -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 %mas%genuine-installation-media.html" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) ) -set osedition= +set osedition=0 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 an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if not %osedition%==0 ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( -if not defined osedition ( +if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SystemRoot%\System32\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set error=1 +set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( set error=1 -call :dk_color %Red% "Checking Package File [Not Found] [%osedition%]" +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" if %error_code% NEQ 0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" -) - - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] %error_code%" ) 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 %_wmic% EQU 0 %psc% "Get-WmiObject -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." +call :dk_color %Red% "Checking WMI [Not Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) +if not defined officeact ( +if %winbuild% GEQ 10240 ( %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%]" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) +) ) - reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 @@ -1375,17 +1579,49 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System ) +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. + +if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +echo Checking Eval WLMS Service [Found] +) +) + + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) +) + + 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% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]" -%psc% Restart-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" set error=1 ) 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_color2 %Blue% "Possibly Caused By Gaming Spoofers." %_Yellow% " Help - %mas%issues_due_to_gaming_spoofers" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1393,29 +1629,49 @@ 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%\" ( +if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 set error=1 -REM This code creates token folder only if it's missing and sets default permission for it +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +:: This code creates token folder only if it's missing and sets default permission for it + +if not defined toerr if not exist "%tokenstore%\" ( 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)';" +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 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%\]" +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) ) -call :dk_actids -if not defined applist ( -%psc% Stop-Service sppsvc %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 ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set "_notfoundids=Not found" +) set error=1 -call :dk_color %Red% "Checking Activation IDs [Not Found]" +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) @@ -1426,41 +1682,65 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke ) -if not exist %SystemRoot%\system32\sppsvc.exe ( -set error=1 -set showfix=1 -call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +) ) -:: This code checks if NT SERVICE\sppsvc has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if not exist "%tokenstore%\" set permerror=1 - +if %winbuild% GEQ 9200 ( for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" ) +) +) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) +) + if defined permerror ( set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 -call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +) ) -:: If required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." ) +) if not defined showfix if defined wpaerror ( set showfix=1 @@ -1472,33 +1752,49 @@ exit /b :: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems :wpatest: -$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA") -$count = $wpaKey.SubKeyCount - +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} $osVersion = [System.Environment]::OSVersion.Version $minBuildNumber = 14393 - if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $keyNumber = $subkeyName -replace '.*-', '' - $subkeyHashTable[$keyNumber] = $true + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Host "Total Keys $count. Error Found- $i key does not exist" + Write-Output "Total Keys $count. Error Found - $i key does not exist." $wpaKey.Close() - exit + exit } } } $wpaKey.GetSubKeyNames() | ForEach-Object { - $subkey = $wpaKey.OpenSubKey($_) - $p = $subkey.GetValueNames() - if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { - Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" - $wpaKey.Close() - exit + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } } } $count @@ -1531,8 +1827,21 @@ exit /b echo: if %_unattended%==1 timeout /t 2 & exit /b + +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 ::======================================================================================================================================== @@ -1541,7 +1850,7 @@ exit /b :: 2nd column = Generic Retail/OEM/MAK Key :: 3rd column = SKU ID :: 4th column = Key part number -:: 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) +:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check mass grave[.]dev/hwid#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 :: 7th column = Key Type :: 8th column = WMI Edition ID (For reference only) @@ -1553,50 +1862,46 @@ exit /b set f= for %%# in ( -8b351c9c-f398-4515-9900-09df49427262_XG%f%VPP-NMH%f%47-7T%f%THJ-W3F%f%W7-8H%f%V2C___4_X19-99683_HGNKjkKcKQHO6n8srMUrDh/MElffBZarLqCMD9rWtgFKf3YzYOLDPEMGhuO/auNMKCeiU7ebFbQALS/MyZ7TvidMQ2dvzXeXXKzPBjfwQx549WJUU7qAQ9Txg9cR9SAT8b12Pry2iBk+nZWD9VtHK3kOnEYkvp5WTCTsrSi6Re4_0_OEM:NONSLP_Enterprise -c83cef07-6b72-4bbc-a28f-a00386872839_3V%f%6Q6-NQX%f%CX-V8%f%YXR-9QC%f%YV-QP%f%FCT__27_X19-98746_NHn2n0N1UfVf00CfaI5LCDMDsKdVAWpD/HAfUrcTAKsw9d2Sks4h5MhyH/WUx+B6dFi8ol7D3AHorR8y9dqVS1Bd2FdZNJl/tTR1PGwYn6KL88NS19aHmFNdX8s4438vaa+Ty8Qk8EDcwm/wscC8lQmi3/RgUKYdyGFvpbGSVlk_0_Volume:MAK_EnterpriseN -4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK%f%7JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T__48_X19-98841_Yl/jNfxJ1SnaIZCIZ4m6Pf3ySNoQXifNeqfltNaNctx+onwiivOx7qcSn8dFtURzgMzSOFnsRQzb5IrvuqHoxWWl1S3JIQn56FvKsvSx7aFXIX3+2Q98G1amPV/WEQ0uHA5d7Ya6An+g0Z0zRP7evGoomTs4YuweaWiZQjQzSpA_0_____Retail_Professional -9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B%f%87N-8KF%f%HP-DK%f%V6R-Y2C%f%8J-PK%f%CKT__49_X19-98859_Ge0mRQbW8ALk7T09V+1k1yg66qoS0lhkgPIROOIOgxKmWPAvsiLAYPKDqM4+neFCA/qf1dHFmdh0VUrwFBPYsK251UeWuElj4bZFVISL6gUt1eZwbGfv5eurQ0i+qZiFv+CcQOEFsd5DD4Up6xPLLQS3nAXODL5rSrn2sHRoCVY_0_____Retail_ProfessionalN -f742e4ff-909d-4fe9-aacb-3231d24a0c58_4C%f%PRK-NM3%f%K3-X6%f%XXQ-RXX%f%86-WX%f%CHW__98_X19-98877_vel4ytVtnE8FhvN87Cflz9sbh5QwHD1YGOeej9QP7hF3vlBR4EX2/S/09gRneeXVbQnjDOCd2KFMKRUWHLM7ZhFBk8AtlG+kvUawPZ+CIrwrD3mhi7NMv8UX/xkLK3HnBupMEuEwsMJgCUD8Pn6om1mEiQebHBAqu4cT7GN9Y0g_0_____Retail_CoreN -1d1bac85-7365-4fea-949a-96978ec91ae0_N2%f%434-X9D%f%7W-8P%f%F6X-8DV%f%9T-8T%f%YMD__99_X19-99652_Nv17eUTrr1TmUX6frlI7V69VR6yWb7alppCFJPcdjfI+xX4/Cf2np3zm7jmC+zxFb9nELUs477/ydw2KCCXFfM53bKpBQZKHE5+MdGJGxebOCcOtJ3hrkDJtwlVxTQmUgk5xnlmpk8PHg82M2uM5B7UsGLxGKK4d3hi0voSyKeI_0_____Retail_CoreCountrySpecific -3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT%f%79Q-G7N%f%6G-PG%f%BYW-4YW%f%X6-6F%f%4BT_100_X19-99661_FV2Eao/R5v8sGrfQeOjQ4daokVlNOlqRCDZXuaC45bQd5PsNU3t1b4AwWeYM8TAwbHauzr4tPG0UlsUqUikCZHy0poROx35bBBMBym6Zbm9wDBVyi7nCzBtwS86eOonQ3cU6WfZxhZRze0POdR33G3QTNPrnVIM2gf6nZJYqDOA_0_____Retail_CoreSingleLanguage -2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YT%f%MG3-N6D%f%KC-DK%f%B77-7M9%f%GH-8H%f%VX7_101_X19-98868_GH/jwFxIcdQhNxJIlFka8c1H48PF0y7TgJwaryAUzqSKXynONLw7MVciDJFVXTkCjbXSdxLSWpPIC50/xyy1rAf8aC7WuN/9cRNAvtFPC1IVAJaMeq1vf4mCqRrrxJQP6ZEcuAeHFzLe/LLovGWCd8rrs6BbBwJXCvAqXImvycQ_0_____Retail_Core -2a6137f3-75c0-4f26-8e3e-d83d802865a4_XK%f%CNC-J26%f%Q9-KF%f%HD2-FKT%f%HY-KD%f%72Y_119_X19-99606_hci78IRWDLBtdbnAIKLDgV9whYgtHc1uYyp9y6FszE9wZBD5Nc8CUD2pI2s2RRd3M04C4O7M3tisB3Ov/XVjpAbxlX3MWfUR5w4MH0AphbuQX0p5MuHEDYyfqlRgBBRzOKePF06qfYvPQMuEfDpKCKFwNojQxBV8O0Arf5zmrIw_0_OEM:NONSLP_PPIPro -e558417a-5123-4f6f-91e7-385c1c7ca9d4_YN%f%MGQ-8RY%f%V3-4P%f%GQ3-C8X%f%TP-7C%f%FBY_121_X19-98886_x9tPFDZmjZMf29zFeHV5SHbXj8Wd8YAcCn/0hbpLcId4D7OWqkQKXxXHIegRlwcWjtII0sZ6WYB0HQV2KH3LvYRnWKpJ5SxeOgdzBIJ6fhegYGGyiXsBv9sEb3/zidPU6ZK9LugVGAcRZ6HQOiXyOw+Yf5H35iM+2oDZXSpjvJw_0_____Retail_Education -c5198a66-e435-4432-89cf-ec777c9d0352_84%f%NGF-MHB%f%T6-FX%f%BX8-QWJ%f%K7-DR%f%R8H_122_X19-98892_jkL4YZkmBCJtvL1fT30ZPBcjmzshBSxjwrE0Q00AZ1hYnhrH+npzo1MPCT6ZRHw19ZLTz7wzyBb0qqcBVbtEjZW0Xs2MYLxgriyoONkhnPE6KSUJBw7C0enFVLHEqnVu/nkaOFfockN3bc+Eouw6W2lmHjklPHc9c6Clo04jul0_0_____Retail_EducationN -f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJ%f%B47-8PN%f%2T-MC%f%GDY-JTY%f%3D-CB%f%CPV_125_X23-50331_OPGhsyx+Ctw7w/KLMRNrY+fNBmKPjUG0R9RqkWk4e8ez+ExSJxSLLex5WhO5QSNgXLmEra+cCsN6C638aLjIdH2/L7D+8z/C6EDgRvbHMmidHg1lX3/O8lv0JudHkGtHJYewjorn/xXGY++vOCTQdZNk6qzEgmYSvPehKfdg8js_1_Volume:MAK_EnterpriseS_Ge -cce9d2de-98ee-4ce2-8113-222620c64a27_KC%f%NVH-YKW%f%X8-GJ%f%JB9-H9F%f%DT-6F%f%7W2_125_X22-66075_GCqWmJOsTVun9z4QkE9n2XqBvt3ZWSPl9QmIh9Q2mXMG/QVt2IE7S+ES/NWlyTSNjLVySr1D2sGjxgEzy9kLwn7VENQVJ736h1iOdMj/3rdqLMSpTa813+nPSQgKpqJ3uMuvIvRP0FdB7Y4qt8qf9kNKK25A1QknioD/6YubL/4_1_Volume:MAK_EnterpriseS_VB -d06934ee-5448-4fd1-964a-cd077618aa06_43%f%TBQ-NH9%f%2J-XK%f%TM7-KT3%f%KK-P3%f%9PB_125_X21-83233_EpB6qOCo8pRgO5kL4vxEHck2J1vxyd9OqvxUenDnYO9AkcGWat/D74ZcFg5SFlIya1U8l5zv+tsvZ4wAvQ1IaFW1PwOKJLOaGgejqZ41TIMdFGGw+G+s1RHsEnrWr3UOakTodby1aIMUMoqf3NdaM5aWFo8fOmqWC5/LnCoighs_0_OEM:NONSLP_EnterpriseS_RS5 -706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK%f%96Y-D9C%f%D8-W4%f%4CQ-R8Y%f%TK-DY%f%JWX_125_X21-05035_ntcKmazIvLpZOryft28gWBHu1nHSbR+Gp143f/BiVe+BD2UjHBZfSR1q405xmQZsygz6VRK6+zm8FPR++71pkmArgCLhodCQJ5I4m7rAJNw/YX99pILphi1yCRcvHsOTGa825GUVXgf530tHT6hr0HQ1lGeGgG1hPekpqqBbTlg_0_OEM:NONSLP_EnterpriseS_RS1 -faa57748-75c8-40a2-b851-71ce92aa8b45_FW%f%N7H-PF9%f%3Q-4G%f%GP8-M8R%f%F3-MD%f%WWW_125_X19-99617_Fe9CDClilrAmwwT7Yhfx67GafWRQEpwyj8R+a4eaTqbpPcAt7d1hv1rx8Sa9AzopEGxIrb7IhiPoDZs0XaT1HN0/olJJ/MnD73CfBP4sdQdLTsSJE3dKMWYTQHpnjqRaS/pNBYRr8l9Mv8yfcP8uS2MjIQ1cRTqRmC7WMpShyCg_0_OEM:NONSLP_EnterpriseS_TH -837766ff-61c5-427d-87c3-a2acbd44767a_XF%f%C77-XNR%f%XM-2Q%f%36W-FCM%f%9T-YH%f%DJ9_126_X23-50304_h6V6Q4DL/hlvcD3GyVxrVfP1BEL4a5TdyNCMlbq/OZnky/HowuRAcHMpN59fwqLS98+7WEDooWCrxriXcATwo0fwOGs/fEfP/Pa5SKP+Xnng1eoPm1PkjuZaqA8p2dPQv32wJ0u3QW7VMQM9BzzpyqtNAsqNS/wl7vfN7tyLbDo_1_Volume:MAK_EnterpriseSN_Ge -2c060131-0e43-4e01-adc1-cf5ad1100da8_RQ%f%FNW-9TP%f%M3-JQ%f%73T-QV4%f%VQ-DV%f%9PT_126_X22-66108_w/HFPDNCz4EogszDYZ8xUJh8aylfpgh6gzm9k8JSteprY5UumLc5n6KUwiSE3/5NaiI9gZ3xmTJq+g1OSPsdGwhuA+8LA2pQhA+wU8VO/ZaYxe1T4WF6oip/c0n6xA1sx/mWYNwd/WBDJpslTw5NRNLc5wWh0FV5RtxCaXE07lM_1_Volume:MAK_EnterpriseSN_VB -e8f74caa-03fb-4839-8bcc-2e442b317e53_M3%f%3WV-NHY%f%3C-R7%f%FPM-BQG%f%PT-23%f%9PG_126_X21-83264_Fl7tjifybEI9hArxMVFKqIqmI6mrCZy4EtJyVjpo2eSfeMTBli55+E0i2AaPfE2FJknUig7HuiNC1Pu2IWZcj5ShVFQEKPY6K//RucX8oPQfh0zK5r1aNJNvV4gMlqvOyGD8sXttLBZv8wg1w/++cNk/z38DE2shiDf7LYnK4w0_1_Volume:MAK_EnterpriseSN_RS5 -3d1022d8-969f-4222-b54b-327f5a5af4c9_2D%f%BW3-N2P%f%JG-MV%f%HW3-G7T%f%DK-9H%f%KR4_126_X21-04921_zLPNvcl1iqOefy0VLg+WZgNtRNhuGpn8+BFKjMqjaNOSKiuDcR6GNDS5FF1Aqk6/e6shJ+ohKzuwrnmYq3iNQ3I2MBlYjM5kuNfKs8Vl9dCjSpQr//GBGps6HtF2xrG/2g/yhtYC7FbtGDIE16uOeNKFcVg+XMb0qHE/5Etyfd8_0_Volume:MAK_EnterpriseSN_RS1 -60c243e1-f90b-4a1b-ba89-387294948fb6_NT%f%X6B-BRY%f%C2-K6%f%786-F6M%f%VQ-M7%f%V2X_126_X19-98770_kbXfe0z9Vi1S0yfxMWzI5+UtWsJKzxs7wLGUDLjrckFDn1bDQb4MvvuCK1w+Qrq33lemiGpNDspa+ehXiYEeSPFcCvUBpoMlGBFfzurNCHWiv3o1k3jBoawJr/VoDoVZfxhkps0fVoubf9oy6C6AgrkZ7PjCaS58edMcaUWvYYg_0_Volume:MAK_EnterpriseSN_TH -01eb852c-424d-4060-94b8-c10d799d7364_3X%f%P6D-CRN%f%D4-DR%f%YM2-GM8%f%4D-4G%f%G8Y_139_X23-37869_PVW0XnRJnsWYjTqxb6StCi2tge/uUwegjdiFaFUiZpwdJ620RK+MIAsSq5S+egXXzIWNntoy2fB6BO8F1wBFmxP/mm/3rn5C33jtF5QrbNqY7X9HMbqSiC7zhs4v4u2Xa4oZQx8JQkwr8Q2c/NgHrOJKKRASsSckhunxZ+WVEuM_1_____Retail_ProfessionalCountrySpecific_Zn -eb6d346f-1c60-4643-b960-40ec31596c45_DX%f%G7C-N36%f%C4-C4%f%HTG-X4T%f%3X-2Y%f%V77_161_X21-43626_MaVqTkRrGnOqYizl15whCOKWzx01+BZTVAalvEuHXM+WV55jnIfhWmd/u1GqCd5OplqXdU959zmipK2Iwgu2nw/g91nW//sQiN/cUcvg1Lxo6pC3gAo1AjTpHmGIIf9XlZMYlD+Vl6gXsi/Auwh3yrSSFh5s7gOczZoDTqQwHXA_0_____Retail_ProfessionalWorkstation -89e87510-ba92-45f6-8329-3afa905e3e83_WY%f%PNQ-8C4%f%67-V2%f%W6J-TX4%f%WX-WT%f%2RQ_162_X21-43644_JVGQowLiCcPtGY9ndbBDV+rTu/q5ljmQTwQWZgBIQsrAeQjLD8jLEk/qse7riZ7tMT6PKFVNXeWqF7PhLAmACbE8O3Lvp65XMd/Oml9Daynj5/4n7unsffFHIHH8TGyO5j7xb4dkFNqC5TX3P8/1gQEkTIdZEOTQQXFu0L2SP5c_0_____Retail_ProfessionalWorkstationN -62f0c100-9c53-4e02-b886-a3528ddfe7f6_8P%f%TT6-RNW%f%4C-6V%f%7J2-C2D%f%3X-MH%f%BPB_164_X21-04955_CEDgxI8f/fxMBiwmeXw5Of55DG32sbGALzHihXkdbYTDaE3pY37oAA4zwGHALzAFN/t254QImGPYR6hATgl+Cp804f7serJqiLeXY965Zy67I4CKIMBm49lzHLFJeDnVTjDB0wVyN29pvgO3+HLhZ22KYCpkRHFFMy2OKxS68Yc_0_____Retail_ProfessionalEducation -13a38698-4a49-4b9e-8e83-98fe51110953_GJ%f%TYN-HDM%f%QY-FR%f%R76-HVG%f%C7-QP%f%F8P_165_X21-04956_r35zp9OfxKSBcTxKWon3zFtbOiCufAPo6xRGY5DJqCRFKdB0jgZalNQitvjmaZ/Rlez2vjRJnEart4LrvyW4d9rrukAjR3+c3UkeTKwoD3qBl9AdRJbXCa2BdsoXJs1WVS4w4LuVzpB/SZDuggZt0F2DlMB427F5aflook/n1pY_0_____Retail_ProfessionalEducationN -df96023b-dcd9-4be2-afa0-c6c871159ebe_NJ%f%CF7-PW8%f%QT-33%f%24D-688%f%JX-2Y%f%V66_175_X21-41295_rVpetYUmiRB48YJfCvJHiaZapJ0bO8gQDRoql+rq5IobiSRu//efV1VXqVpBkwILQRKgKIVONSTUF5y2TSxlDLbDSPKp7UHfbz17g6vRKLwOameYEz0ZcK3NTbApN/cMljHvvF/mBag1+sHjWu+eoFzk8H89k9nw8LMeVOPJRDc_0_____Retail_ServerRdsh -d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3%f%WVW-N2P%f%V2-CG%f%WC3-34Q%f%GF-VM%f%J2C_178_X21-32983_Xzme9hDZR6H0Yx0deURVdE6LiTOkVqWng5W/OTbkxRc0rq+mSYpo/f/yqhtwYlrkBPWx16Yok5Bvcb34vbKHvEAtxfYp4te20uexLzVOtBcoeEozARv4W/6MhYfl+llZtR5efsktj4N4/G4sVbuGvZ9nzNfQO9TwV6NGgGEj2Ec_0_____Retail_Cloud -af5c9381-9240-417d-8d35-eb40cd03e484_NH%f%9J3-68W%f%K7-6F%f%B93-4K3%f%DF-DJ%f%4F6_179_X21-32987_QGRDZOU/VZhYLOSdp2xDnFs8HInNZctcQlWCIrORVnxTQr55IJwN4vK3PJHjkfRLQ/bgUrcEIhyFbANqZFUq8yD1YNubb2bjNORgI/m8u85O9V7nDGtxzO/viEBSWyEHnrzLKKWYqkRQKbbSW3ungaZR0Ti5O2mAUI4HzAFej50_0_____Retail_CloudN -8ab9bdd1-1f67-4997-82d9-8878520837d9_XQ%f%QYW-NFF%f%MW-XJ%f%PBH-K87%f%32-CK%f%FFD_188_X21-99378_djy0od0uuKd2rrIl+V1/2+MeRltNgW7FEeTNQsPMkVSL75NBphgoso4uS0JPv2D7Y1iEEvmVq6G842Kyt52QOwXgFWmP/IQ6Sq1dr+fHK/4Et7bEPrrGBEZoCfWqk0kdcZRPBij2KN6qCRWhrk1hX2g+U40smx/EYCLGh9HCi24_0_____OEM:DM_IoTEnterprise -ed655016-a9e8-4434-95d9-4345352c2552_QP%f%M6N-7J2%f%WJ-P8%f%8HH-P3Y%f%RH-YY%f%74H_191_X21-99682_qHs/PzfhYWdtSys2edzcz4h+Qs8aDqb8BIiQ/mJ/+0uyoJh1fitbRCIgiFh2WAGZXjdgB8hZeheNwHibd8ChXaXg4u+0XlOdFlaDTgTXblji8fjETzDBk9aGkeMCvyVXRuUYhTSdp83IqGHz7XuLwN2p/6AUArx9JZCoLGV8j3w_0_OEM:NONSLP_IoTEnterpriseS_VB -6c4de1b8-24bb-4c17-9a77-7b939414c298_CG%f%K42-GYN%f%6Y-VD%f%22B-BX9%f%8W-J8%f%JXD_191_X23-12617_J/fpIRynsVQXbp4qZNKp6RvOgZ/P2klILUKQguMlcwrBZybwNkHg/kM5LNOF/aDzEktbPnLnX40GEvKkYT6/qP4cMhn/SOY0/hYOkIdR34ilzNlVNq5xP7CMjCjaUYJe+6ydHPK6FpOuEoWOYYP5BZENKNGyBy4w4shkMAw19mA_0_OEM:NONSLP_IoTEnterpriseS_Ge -d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9%f%VKN-3BG%f%WV-Y6%f%24W-MCR%f%MQ-BH%f%DCD_202_X22-53884_kyoNx2s93U6OUSklB1xn+GXcwCJO1QTEtACYnChi8aXSoxGQ6H2xHfUdHVCwUA1OR0UeNcRrMmOzZBOEUBtdoGWSYPg9AMjvxlxq9JOzYAH+G6lT0UbCWgMSGGrqdcIfmshyEak3aUmsZK6l+uIAFCCZZ/HbbCRkkHC5rWKstMI_0_____Retail_CloudEditionN -92fb8726-92a8-4ffc-94ce-f82e07444653_KY%f%7PN-VR6%f%RX-83%f%W6Y-6DD%f%YQ-T6%f%R4W_203_X22-53847_gD6HnT4jP4rcNu9u83gvDiQq1xs7QSujcDbo60Di5iSVa9/ihZ7nlhnA0eDEZfnoDXriRiPPqc09T6AhSnFxLYitAkOuPJqL5UMobIrab9dwTKlowqFolxoHhLOO4V92Hsvn/9JLy7rEzoiAWHhX/0cpMr3FCzVYPeUW1OyLT1A_0_____Retail_CloudEdition -5a85300a-bfce-474f-ac07-a30983e3fb90_N9%f%79K-XWD%f%77-YW%f%3GB-HBG%f%H6-D3%f%2MH_205_X23-15042_blZopkUuayCTgZKH4bOFiisH9GTAHG5/js6UX/qcMWWc3sWNxKSX1OLp1k3h8Xx1cFuvfG/fNAw/I83ssEtPY+A0Gx1JF4QpRqsGOqJ5ruQ2tGW56CJcCVHkB+i46nJAD759gYmy3pEYMQbmpWbhLx3MJ6kvwxKfU+0VCio8k50_0_____OEM:DM_IoTEnterpriseSK -80083eae-7031-4394-9e88-4901973d56fe_P8%f%Q7T-WNK%f%7X-PM%f%FXY-VXH%f%BG-RR%f%K69_206_X23-62084_habUJ0hhAG0P8iIKaRQ74/wZQHyAdFlwHmrejNjOSRG08JeqilJlTM6V8G9UERLJ92/uMDVHIVOPXfN8Zdh8JuYO8oflPnqymIRmff/pU+Gpb871jV2JDA4Cft5gmn+ictKoN4VoSfEZRR+R5hzF2FsoCExDNNw6gLdjtiX94uA_0_____OEM:DM_IoTEnterpriseK +8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8H%f%V2C___4_X19-99683_HGNKjkKcKQHO6n8srMUrDh/MElffBZarLqCMD9rWtgFKf3YzYOLDPEMGhuO/auNMKCeiU7ebFbQALS/MyZ7TvidMQ2dvzXeXXKzPBjfwQx549WJUU7qAQ9Txg9cR9SAT8b12Pry2iBk+nZWD9VtHK3kOnEYkvp5WTCTsrSi6Re4_0_OEM:NONSLP_Enterprise +c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QP%f%FCT__27_X19-98746_NHn2n0N1UfVf00CfaI5LCDMDsKdVAWpD/HAfUrcTAKsw9d2Sks4h5MhyH/WUx+B6dFi8ol7D3AHorR8y9dqVS1Bd2FdZNJl/tTR1PGwYn6KL88NS19aHmFNdX8s4438vaa+Ty8Qk8EDcwm/wscC8lQmi3/RgUKYdyGFvpbGSVlk_0_Volume:MAK_EnterpriseN +4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T__48_X19-98841_Yl/jNfxJ1SnaIZCIZ4m6Pf3ySNoQXifNeqfltNaNctx+onwiivOx7qcSn8dFtURzgMzSOFnsRQzb5IrvuqHoxWWl1S3JIQn56FvKsvSx7aFXIX3+2Q98G1amPV/WEQ0uHA5d7Ya6An+g0Z0zRP7evGoomTs4YuweaWiZQjQzSpA_0_____Retail_Professional +9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PK%f%CKT__49_X19-98859_Ge0mRQbW8ALk7T09V+1k1yg66qoS0lhkgPIROOIOgxKmWPAvsiLAYPKDqM4+neFCA/qf1dHFmdh0VUrwFBPYsK251UeWuElj4bZFVISL6gUt1eZwbGfv5eurQ0i+qZiFv+CcQOEFsd5DD4Up6xPLLQS3nAXODL5rSrn2sHRoCVY_0_____Retail_ProfessionalN +f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WX%f%CHW__98_X19-98877_vel4ytVtnE8FhvN87Cflz9sbh5QwHD1YGOeej9QP7hF3vlBR4EX2/S/09gRneeXVbQnjDOCd2KFMKRUWHLM7ZhFBk8AtlG+kvUawPZ+CIrwrD3mhi7NMv8UX/xkLK3HnBupMEuEwsMJgCUD8Pn6om1mEiQebHBAqu4cT7GN9Y0g_0_____Retail_CoreN +1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8T%f%YMD__99_X19-99652_Nv17eUTrr1TmUX6frlI7V69VR6yWb7alppCFJPcdjfI+xX4/Cf2np3zm7jmC+zxFb9nELUs477/ydw2KCCXFfM53bKpBQZKHE5+MdGJGxebOCcOtJ3hrkDJtwlVxTQmUgk5xnlmpk8PHg82M2uM5B7UsGLxGKK4d3hi0voSyKeI_0_____Retail_CoreCountrySpecific +3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F%f%4BT_100_X19-99661_FV2Eao/R5v8sGrfQeOjQ4daokVlNOlqRCDZXuaC45bQd5PsNU3t1b4AwWeYM8TAwbHauzr4tPG0UlsUqUikCZHy0poROx35bBBMBym6Zbm9wDBVyi7nCzBtwS86eOonQ3cU6WfZxhZRze0POdR33G3QTNPrnVIM2gf6nZJYqDOA_0_____Retail_CoreSingleLanguage +2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8H%f%VX7_101_X19-98868_GH/jwFxIcdQhNxJIlFka8c1H48PF0y7TgJwaryAUzqSKXynONLw7MVciDJFVXTkCjbXSdxLSWpPIC50/xyy1rAf8aC7WuN/9cRNAvtFPC1IVAJaMeq1vf4mCqRrrxJQP6ZEcuAeHFzLe/LLovGWCd8rrs6BbBwJXCvAqXImvycQ_0_____Retail_Core +2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD%f%72Y_119_X19-99606_hci78IRWDLBtdbnAIKLDgV9whYgtHc1uYyp9y6FszE9wZBD5Nc8CUD2pI2s2RRd3M04C4O7M3tisB3Ov/XVjpAbxlX3MWfUR5w4MH0AphbuQX0p5MuHEDYyfqlRgBBRzOKePF06qfYvPQMuEfDpKCKFwNojQxBV8O0Arf5zmrIw_0_OEM:NONSLP_PPIPro +e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7C%f%FBY_121_X19-98886_x9tPFDZmjZMf29zFeHV5SHbXj8Wd8YAcCn/0hbpLcId4D7OWqkQKXxXHIegRlwcWjtII0sZ6WYB0HQV2KH3LvYRnWKpJ5SxeOgdzBIJ6fhegYGGyiXsBv9sEb3/zidPU6ZK9LugVGAcRZ6HQOiXyOw+Yf5H35iM+2oDZXSpjvJw_0_____Retail_Education +c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DR%f%R8H_122_X19-98892_jkL4YZkmBCJtvL1fT30ZPBcjmzshBSxjwrE0Q00AZ1hYnhrH+npzo1MPCT6ZRHw19ZLTz7wzyBb0qqcBVbtEjZW0Xs2MYLxgriyoONkhnPE6KSUJBw7C0enFVLHEqnVu/nkaOFfockN3bc+Eouw6W2lmHjklPHc9c6Clo04jul0_0_____Retail_EducationN +f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJB47-8PN2T-MCGDY-JTY3D-CB%f%CPV_125_X23-50331_OPGhsyx+Ctw7w/KLMRNrY+fNBmKPjUG0R9RqkWk4e8ez+ExSJxSLLex5WhO5QSNgXLmEra+cCsN6C638aLjIdH2/L7D+8z/C6EDgRvbHMmidHg1lX3/O8lv0JudHkGtHJYewjorn/xXGY++vOCTQdZNk6qzEgmYSvPehKfdg8js_1_Volume:MAK_EnterpriseS_Ge +cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F%f%7W2_125_X22-66075_GCqWmJOsTVun9z4QkE9n2XqBvt3ZWSPl9QmIh9Q2mXMG/QVt2IE7S+ES/NWlyTSNjLVySr1D2sGjxgEzy9kLwn7VENQVJ736h1iOdMj/3rdqLMSpTa813+nPSQgKpqJ3uMuvIvRP0FdB7Y4qt8qf9kNKK25A1QknioD/6YubL/4_1_Volume:MAK_EnterpriseS_VB +d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P3%f%9PB_125_X21-83233_EpB6qOCo8pRgO5kL4vxEHck2J1vxyd9OqvxUenDnYO9AkcGWat/D74ZcFg5SFlIya1U8l5zv+tsvZ4wAvQ1IaFW1PwOKJLOaGgejqZ41TIMdFGGw+G+s1RHsEnrWr3UOakTodby1aIMUMoqf3NdaM5aWFo8fOmqWC5/LnCoighs_0_OEM:NONSLP_EnterpriseS_RS5 +706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DY%f%JWX_125_X21-05035_ntcKmazIvLpZOryft28gWBHu1nHSbR+Gp143f/BiVe+BD2UjHBZfSR1q405xmQZsygz6VRK6+zm8FPR++71pkmArgCLhodCQJ5I4m7rAJNw/YX99pILphi1yCRcvHsOTGa825GUVXgf530tHT6hr0HQ1lGeGgG1hPekpqqBbTlg_0_OEM:NONSLP_EnterpriseS_RS1 +faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MD%f%WWW_125_X19-99617_Fe9CDClilrAmwwT7Yhfx67GafWRQEpwyj8R+a4eaTqbpPcAt7d1hv1rx8Sa9AzopEGxIrb7IhiPoDZs0XaT1HN0/olJJ/MnD73CfBP4sdQdLTsSJE3dKMWYTQHpnjqRaS/pNBYRr8l9Mv8yfcP8uS2MjIQ1cRTqRmC7WMpShyCg_0_OEM:NONSLP_EnterpriseS_TH +3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9H%f%KR4_126_X21-04921_zLPNvcl1iqOefy0VLg+WZgNtRNhuGpn8+BFKjMqjaNOSKiuDcR6GNDS5FF1Aqk6/e6shJ+ohKzuwrnmYq3iNQ3I2MBlYjM5kuNfKs8Vl9dCjSpQr//GBGps6HtF2xrG/2g/yhtYC7FbtGDIE16uOeNKFcVg+XMb0qHE/5Etyfd8_0_Volume:MAK_EnterpriseSN_RS1 +60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7%f%V2X_126_X19-98770_kbXfe0z9Vi1S0yfxMWzI5+UtWsJKzxs7wLGUDLjrckFDn1bDQb4MvvuCK1w+Qrq33lemiGpNDspa+ehXiYEeSPFcCvUBpoMlGBFfzurNCHWiv3o1k3jBoawJr/VoDoVZfxhkps0fVoubf9oy6C6AgrkZ7PjCaS58edMcaUWvYYg_0_Volume:MAK_EnterpriseSN_TH +01eb852c-424d-4060-94b8-c10d799d7364_3XP6D-CRND4-DRYM2-GM84D-4G%f%G8Y_139_X23-37869_PVW0XnRJnsWYjTqxb6StCi2tge/uUwegjdiFaFUiZpwdJ620RK+MIAsSq5S+egXXzIWNntoy2fB6BO8F1wBFmxP/mm/3rn5C33jtF5QrbNqY7X9HMbqSiC7zhs4v4u2Xa4oZQx8JQkwr8Q2c/NgHrOJKKRASsSckhunxZ+WVEuM_1_____Retail_ProfessionalCountrySpecific_Zn +eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2Y%f%V77_161_X21-43626_MaVqTkRrGnOqYizl15whCOKWzx01+BZTVAalvEuHXM+WV55jnIfhWmd/u1GqCd5OplqXdU959zmipK2Iwgu2nw/g91nW//sQiN/cUcvg1Lxo6pC3gAo1AjTpHmGIIf9XlZMYlD+Vl6gXsi/Auwh3yrSSFh5s7gOczZoDTqQwHXA_0_____Retail_ProfessionalWorkstation +89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT%f%2RQ_162_X21-43644_JVGQowLiCcPtGY9ndbBDV+rTu/q5ljmQTwQWZgBIQsrAeQjLD8jLEk/qse7riZ7tMT6PKFVNXeWqF7PhLAmACbE8O3Lvp65XMd/Oml9Daynj5/4n7unsffFHIHH8TGyO5j7xb4dkFNqC5TX3P8/1gQEkTIdZEOTQQXFu0L2SP5c_0_____Retail_ProfessionalWorkstationN +62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MH%f%BPB_164_X21-04955_CEDgxI8f/fxMBiwmeXw5Of55DG32sbGALzHihXkdbYTDaE3pY37oAA4zwGHALzAFN/t254QImGPYR6hATgl+Cp804f7serJqiLeXY965Zy67I4CKIMBm49lzHLFJeDnVTjDB0wVyN29pvgO3+HLhZ22KYCpkRHFFMy2OKxS68Yc_0_____Retail_ProfessionalEducation +13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QP%f%F8P_165_X21-04956_r35zp9OfxKSBcTxKWon3zFtbOiCufAPo6xRGY5DJqCRFKdB0jgZalNQitvjmaZ/Rlez2vjRJnEart4LrvyW4d9rrukAjR3+c3UkeTKwoD3qBl9AdRJbXCa2BdsoXJs1WVS4w4LuVzpB/SZDuggZt0F2DlMB427F5aflook/n1pY_0_____Retail_ProfessionalEducationN +df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2Y%f%V66_175_X21-41295_rVpetYUmiRB48YJfCvJHiaZapJ0bO8gQDRoql+rq5IobiSRu//efV1VXqVpBkwILQRKgKIVONSTUF5y2TSxlDLbDSPKp7UHfbz17g6vRKLwOameYEz0ZcK3NTbApN/cMljHvvF/mBag1+sHjWu+eoFzk8H89k9nw8LMeVOPJRDc_0_____Retail_ServerRdsh +d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VM%f%J2C_178_X21-32983_Xzme9hDZR6H0Yx0deURVdE6LiTOkVqWng5W/OTbkxRc0rq+mSYpo/f/yqhtwYlrkBPWx16Yok5Bvcb34vbKHvEAtxfYp4te20uexLzVOtBcoeEozARv4W/6MhYfl+llZtR5efsktj4N4/G4sVbuGvZ9nzNfQO9TwV6NGgGEj2Ec_0_____Retail_Cloud +af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ%f%4F6_179_X21-32987_QGRDZOU/VZhYLOSdp2xDnFs8HInNZctcQlWCIrORVnxTQr55IJwN4vK3PJHjkfRLQ/bgUrcEIhyFbANqZFUq8yD1YNubb2bjNORgI/m8u85O9V7nDGtxzO/viEBSWyEHnrzLKKWYqkRQKbbSW3ungaZR0Ti5O2mAUI4HzAFej50_0_____Retail_CloudN +8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CK%f%FFD_188_X21-99378_djy0od0uuKd2rrIl+V1/2+MeRltNgW7FEeTNQsPMkVSL75NBphgoso4uS0JPv2D7Y1iEEvmVq6G842Kyt52QOwXgFWmP/IQ6Sq1dr+fHK/4Et7bEPrrGBEZoCfWqk0kdcZRPBij2KN6qCRWhrk1hX2g+U40smx/EYCLGh9HCi24_0_____OEM:DM_IoTEnterprise +ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY%f%74H_191_X21-99682_qHs/PzfhYWdtSys2edzcz4h+Qs8aDqb8BIiQ/mJ/+0uyoJh1fitbRCIgiFh2WAGZXjdgB8hZeheNwHibd8ChXaXg4u+0XlOdFlaDTgTXblji8fjETzDBk9aGkeMCvyVXRuUYhTSdp83IqGHz7XuLwN2p/6AUArx9JZCoLGV8j3w_0_OEM:NONSLP_IoTEnterpriseS_VB +6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8%f%JXD_191_X23-12617_J/fpIRynsVQXbp4qZNKp6RvOgZ/P2klILUKQguMlcwrBZybwNkHg/kM5LNOF/aDzEktbPnLnX40GEvKkYT6/qP4cMhn/SOY0/hYOkIdR34ilzNlVNq5xP7CMjCjaUYJe+6ydHPK6FpOuEoWOYYP5BZENKNGyBy4w4shkMAw19mA_0_OEM:NONSLP_IoTEnterpriseS_Ge +d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BH%f%DCD_202_X22-53884_kyoNx2s93U6OUSklB1xn+GXcwCJO1QTEtACYnChi8aXSoxGQ6H2xHfUdHVCwUA1OR0UeNcRrMmOzZBOEUBtdoGWSYPg9AMjvxlxq9JOzYAH+G6lT0UbCWgMSGGrqdcIfmshyEak3aUmsZK6l+uIAFCCZZ/HbbCRkkHC5rWKstMI_0_____Retail_CloudEditionN +92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6%f%R4W_203_X22-53847_gD6HnT4jP4rcNu9u83gvDiQq1xs7QSujcDbo60Di5iSVa9/ihZ7nlhnA0eDEZfnoDXriRiPPqc09T6AhSnFxLYitAkOuPJqL5UMobIrab9dwTKlowqFolxoHhLOO4V92Hsvn/9JLy7rEzoiAWHhX/0cpMr3FCzVYPeUW1OyLT1A_0_____Retail_CloudEdition +5a85300a-bfce-474f-ac07-a30983e3fb90_N979K-XWD77-YW3GB-HBGH6-D3%f%2MH_205_X23-15042_blZopkUuayCTgZKH4bOFiisH9GTAHG5/js6UX/qcMWWc3sWNxKSX1OLp1k3h8Xx1cFuvfG/fNAw/I83ssEtPY+A0Gx1JF4QpRqsGOqJ5ruQ2tGW56CJcCVHkB+i46nJAD759gYmy3pEYMQbmpWbhLx3MJ6kvwxKfU+0VCio8k50_0_____OEM:DM_IoTEnterpriseSK +80083eae-7031-4394-9e88-4901973d56fe_P8Q7T-WNK7X-PMFXY-VXHBG-RR%f%K69_206_X23-62084_habUJ0hhAG0P8iIKaRQ74/wZQHyAdFlwHmrejNjOSRG08JeqilJlTM6V8G9UERLJ92/uMDVHIVOPXfN8Zdh8JuYO8oflPnqymIRmff/pU+Gpb871jV2JDA4Cft5gmn+ictKoN4VoSfEZRR+R5hzF2FsoCExDNNw6gLdjtiX94uA_0_____OEM:DM_IoTEnterpriseK ) do ( for /f "tokens=1-9 delims=_" %%A in ("%%#") do ( REM Detect key if %1==key if %osSKU%==%%C if not defined key ( -set skufound=1 -echo "!applist! !altapplist!" | find /i "%%A" %nul1% && ( +echo "!allapps! !altapplist!" | find /i "%%A" %nul1% && ( if %%F==1 set notworking=1 set key=%%B ) @@ -1635,15 +1940,15 @@ set notfoundaltactID= if %_NoEditionChange%==1 exit /b 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-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 -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 +125_EnterpriseS-2021_______________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY%f%74H_IoTEnterpriseS-2021 +125_EnterpriseS-2024_______________f6e29426-a256-4316-88bf-cc5b0f95ec0c_6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8%f%JXD_IoTEnterpriseS-2024 +138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional +139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional +139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional ) do ( for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( -echo "!applist! !altapplist!" | find /i "%%C" %nul1% && ( -echo "!applist!" | find /i "%%D" %nul1% && ( +echo "!allapps! !altapplist!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( set altkey=%%E set altedition=%%F ) || ( @@ -1658,8 +1963,6 @@ exit /b :+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :OhookActivation -@setlocal DisableDelayedExpansion -@echo off :: To activate Office with Ohook activation, run the script with "/Ohook" parameter or change 0 to 1 in below line set _act=0 @@ -1693,88 +1996,31 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -set "nul1=1>nul" -set "nul2=2>nul" -set "nul6=2^>nul" -set "nul=>nul 2>&1" +if %winbuild% LSS 9200 ( +%eline% +echo Unsupported OS version detected [%winbuild%]. +echo Ohook Activation is supported only on Windows 8/10/11 and their server equivalents. +echo: +call :dk_color %Blue% "Use Online KMS activation option instead." +goto dk_done +) -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 :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." -) - -::======================================================================================================================================== - -if %winbuild% LSS 9200 ( -%eline% -echo Unsupported OS version detected [%winbuild%]. -echo Ohook Activation is supported on Windows 8 and later and their server equivalent. -goto dk_done -) - -::======================================================================================================================================== - -:: Fix 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=%userprofile%\AppData\Local\Temp" -set "_Local=%LocalAppData%" -setlocal EnableDelayedExpansion - -::======================================================================================================================================== - -if %_rem%==1 goto :oh_uninstall +if %_rem%==1 goto :oh_uninstall :oh_menu if %_unattended%==0 ( cls -mode 76, 25 +if not defined terminal mode 76, 25 title Ohook Activation %masver% - +call :oh_checkapps echo: echo: echo: echo: +if defined checknames (call :dk_color %_Yellow% " Close [!checknames!] before proceeding...") echo ____________________________________________________________ echo: echo [1] Install Ohook Office Activation @@ -1787,11 +2033,11 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,0]" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b -if !_el!==3 start %mas%genuine-installation-media.html &goto :oh_menu +if !_el!==3 start %mas%genuine-installation-media &goto :oh_menu if !_el!==2 goto :oh_uninstall if !_el!==1 goto :oh_menu2 goto :oh_menu @@ -1802,41 +2048,35 @@ goto :oh_menu :oh_menu2 cls +if not defined terminal ( mode 130, 32 +if exist "%SysPath%\spp\store_test\" mode 134, 32 %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" - +) title Ohook Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell - -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +if not exist %SysPath%\sppsvc.exe ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode +echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_reflection +call :dk_ckeckwmic +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -1844,30 +2084,17 @@ set error= cls echo: -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b -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% ^| %osarch%] - -::======================================================================================================================================== - -:: Check Windows Script Host - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] -) +call :dk_showosinfo ::======================================================================================================================================== echo Initiating Diagnostic Tests... set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + set officeact=1 call :dk_errorcheck @@ -1891,6 +2118,10 @@ echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" ) +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + ::======================================================================================================================================== :: Check supported office versions @@ -1924,14 +2155,15 @@ call :dk_color %Red% "Checking Supported Office Install [Not Found]" call :dk_color %Red% "Checking Installed Office [Not Found]" ) -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +if defined ohub ( echo: -echo You have only Office dashboard app installed, you need to install full Office version. +echo You only have the Office dashboard app installed, you need to install the full version of Office. ) echo: -call :dk_color %Blue% "Download and install Office from below URL and try again." +call :dk_color %Blue% "Download and install Office from the below URL and then try again." echo: -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" goto dk_done ) @@ -1940,22 +2172,46 @@ if not "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 if not "%o14msi%%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( -call :dk_color %Gray% "Checking Multiple Office Install [Found. Its best to install only one version]" +call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" +) + +::======================================================================================================================================== + +:: Check Windows Server + +set winserver= +reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType %nul2% | find /i "WinNT" %nul1% || set winserver=1 +if not defined winserver ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Server" %nul1% && set winserver=1 ) ::======================================================================================================================================== +:: Check already activated products list + +set actiProds15= +set actiProds16= + +if not "%o15c2r%%o15msi%"=="" call :oh_findactivated -like 15 +if not "%o16c2r%%o16msi%"=="" call :oh_findactivated -notlike 16 + +::======================================================================================================================================== + :: Process Office 15.0 C2R if not defined o15c2r goto :starto16c2r call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=15 for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") -if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( @@ -1965,17 +2221,17 @@ echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") set "_oLPath=%_oRoot%\Licenses" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) echo: -echo Activating Office 15.0 %_oArch% C2R... +echo Activating Office... [C2R ^| %_version% ^| %_oArch%] if not defined _oIds ( call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -1983,6 +2239,7 @@ set error=1 goto :starto16c2r ) +call :oh_fixprids call :oh_process call :oh_hookinstall @@ -1995,32 +2252,36 @@ call :oh_hookinstall if not defined o16c2r goto :startmsi call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=16 for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") ) set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% set "_oLPath=%_oRoot%\Licenses16" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) echo: -echo Activating Office 16.0 %_oArch% C2R... +echo Activating Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] if not defined _oIds ( call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -2028,76 +2289,38 @@ set error=1 goto :startmsi ) +call :oh_fixprids call :oh_process call :oh_hookinstall ::======================================================================================================================================== -:: Find remnants of Office vNext license block and remove it because it stops non vNext licenses from appearing -:: https://learn.microsoft.com/en-us/office/troubleshoot/activation/reset-office-365-proplus-activation-state - -set _sid= -set sub_next= - -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! HKU\%%a") else (set "_sid=HKU\%%a")) - -if not defined _sid ( -call :dk_color %Red% "Checking User Accounts SID [Not Found]" -) - -dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*" %nul% && set sub_next=1 -dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*" %nul% && set sub_next=1 - -for %%# in (!_sid! HKCU) do if not defined sub_next ( -reg query %%#\Software\Microsoft\Office\16.0\Common\Licensing\LicensingNext /v MigrationToV5Done %nul2% | find /i "0x1" %nul% && ( -reg query %%#\Software\Microsoft\Office\16.0\Common\Licensing\LicensingNext %nul2% | findstr /i "volume retail" %nul2% | findstr /i "0x2 0x3" %nul% && ( -set sub_next=1 -) -) -) - -if defined sub_next ( -rmdir /s /q "!_Local!\Microsoft\Office\Licenses\" %nul% -rmdir /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul% -for %%# in (!_sid! HKCU) do ( -reg delete %%#\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% -reg delete %%#\Software\Microsoft\Office\16.0\Common\Identity /f %nul% -reg delete %%#\Software\Microsoft\Office\16.0\Registration /f %nul% -) -) - -if defined sub_next echo Removing Office vNext Block [Successful] - -::======================================================================================================================================== - -:: Subscription products attempt to validate the license and may show a banner "There was a problem checking this device's license status." -:: Resiliency registry entry can skip this check +:: Old version (16.0.9xxxx and below) of Office with subscription license key may show a banner to sign in to fix license issue. +:: Although script applies a Resiliency registry entry to fix that but it doesn't work on old office versions. +:: Below code checks that condition and informs the user to update the Office. -if defined o16c2r ( -for %%# in (!_sid! HKCU) do (reg delete %%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul%) -for %%# in (!_sid! HKCU) do ( -reg query "%%#\Volatile Environment" %nul% && ( -reg add %%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +if defined _sublic ( +if not exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( +call :dk_color %Gray% "Checking Old Office With Sub License [Found. Update Office, otherwise, it may show a licensing issue-related banner.]" ) ) -echo Adding Reg Keys To Skip License Check [Successful] -) ::======================================================================================================================================== -:: mass grave[.]dev/office-license-is-not-genuine.html +:: mass grave[.]dev/office-license-is-not-genuine :: Add registry keys for volume products so that 'non-genuine' banner won't appear :: Script already is using MAK instead of GVLK so it won't appear anyway, but registry keys are added incase Office installs default GVLK grace key for volume products +set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" echo "%_oIds%" | find /i "Volume" %nul1% && ( if %winbuild% GEQ 9200 ( -if not [%osarch%]==[x86] ( -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /reg:32 %nul% -reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 %nul% +if not "%osarch%"=="x86" ( +reg delete "%kmskey%" /f /reg:32 %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 %nul% ) -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% -reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% -echo Adding a Reg To Prevent Banner [Successful] +reg delete "%kmskey%" /f %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% +echo Adding a Registry to Prevent Banner [Successful] ) ) @@ -2110,51 +2333,23 @@ if defined o16msi call :oh_processmsi 16 %o16msi_reg% ::======================================================================================================================================== -:: Uninstall other / grace Keys - -set upk_result=0 -set allapplist= - -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='0ff1ce15-a989-479d-af46-f275c6370663' and PartialProductKey is not null) 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=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" -%chkapp% do (if defined allapplist (call set "allapplist=!allapplist! %%a") else (call set "allapplist=%%a")) - -for %%# in (%allapplist%) do ( -echo "%_allactid%" | find /i "%%#" %nul1% || ( -cscript //nologo %windir%\system32\slmgr.vbs /upk %%# %nul% && ( -set upk_result=1 -) || ( -set error=1 -set upk_result=2 -) -) -) - -if not %upk_result%==0 echo: -if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] -if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" - -::======================================================================================================================================== - -:: Refresh Windows Insider Preview Licenses -:: It required in Insider versions otherwise office may not activate - -if exist "%windir%\system32\spp\store_test\2.0\tokens.dat" ( -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -) +call :oh_clearblock +call :oh_uninstkey +call :oh_licrefresh ::======================================================================================================================================== echo: if not defined error ( call :dk_color %Green% "Office is permanently activated." +if defined ohub call :dk_color %Gray% "Office apps such as Word, Excel are activated, use them directly. Ignore 'Buy' button in Office dashboard app." echo Help: %mas%troubleshoot ) else ( call :dk_color %Red% "Some errors were detected." if not defined ierror if not defined showfix if not defined serv_cor if not defined serv_cste call :dk_color %Blue% "%_fixmsg%" echo: -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -2164,7 +2359,7 @@ goto :dk_done :oh_uninstall cls -mode 99, 28 +if not defined terminal mode 99, 32 title Uninstall Ohook Activation %masver% set _present= @@ -2173,7 +2368,7 @@ call :oh_reset call :oh_getpath echo: -echo Uninstalling Ohook Activation... +echo Uninstalling Ohook activation... echo: if defined o16c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_16CHook=%%b\root\vfs")) @@ -2204,35 +2399,54 @@ if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" (set _present=1& del /s /f reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( echo: -echo Deleting - Registry keys to skip license check -reg delete HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +echo Deleting - Registry keys for skipping license check + +reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% +reg query HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +reg unload HKU\DEF_TEMP %nul% + +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty $('{0}\{1}' -f $p, $_.PSChildName)).ProfileImagePath; if ($pi -like $('{0}\Users\*' -f $Env:SystemDrive)) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! %%a") else (set "_sid=%%a")) -for %%# in (!_sid!) do (reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( -reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +for %%# in (!_sidlist!) do ( + +reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f + +reg query HKU\%%#\Software %nul% || ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +reg load HKU\%%# "%%b\NTUSER.DAT" %nul% +reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +reg unload HKU\%%# %nul% +) ) ) ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" %nul% && ( +set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" +reg query "%kmskey%" %nul% && ( echo: -echo Deleting - Registry keys to prevent non-genuine banner -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f +echo Deleting - Registry keys for preventing non-genuine banner +reg delete "%kmskey%" /f ) -reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" %nul% && ( -reg delete "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f +reg query "%kmskey%" /reg:32 %nul% && ( +reg delete "%kmskey%" /f /reg:32 ) echo __________________________________________________________________________________________ echo: if not defined _present ( -echo Ohook Activation is not installed. +echo Ohook activation is not installed. ) else ( if defined _unerror ( call :dk_color %Red% "Failed to uninstall Ohook activation." -call :dk_color %Blue% "Close Office apps if they are running and try again." +call :oh_checkapps +if defined checknames ( +call :dk_color %Blue% "Close [!checknames!] and try again." +call :dk_color %Blue% "If it is still not fixed, reboot your machine using the restart option and try again." +) else ( +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." ) @@ -2245,6 +2459,7 @@ goto :dk_done :oh_reset +set key= set _oRoot= set _oArch= set _oIds= @@ -2252,11 +2467,15 @@ set _oLPath= set _hookPath= set _hook= set _sppcPath= -set _key= set _actid= set _prod= set _lic= +set _arr= +set _prids= +set _config= +set _version= set _License= +set _oBranding= exit /b ::======================================================================================================================================== @@ -2285,25 +2504,32 @@ exit /b ::======================================================================================================================================== -:oh_installkey +:: Some Office Retail to Volume converter tools may edit the ProductReleaseIds to add VL products. This code restores it because it may affect features. -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 errorcode=%errorlevel% -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]" +:oh_fixprids -if %errorcode% EQU 0 ( -call :dk_refresh -echo Installing Generic Product Key [%_key%] [%_prod%] [%_lic%] [Successful] +if not defined _prids ( +call :dk_color %Gray% "Checking ProductReleaseIds In Registry [Not Found]" +exit /b +) + +set _pridsR= +set _pridsE= +for /f "skip=2 tokens=2*" %%a in ('"reg query %_prids%" %nul6%') do (set "_pridsR=%%b") + +set _pridsR=%_pridsR:,= % +for %%# in (%_pridsR%) do (echo %%# | findstr /I "%_oIds%" %nul1% || set _pridsE=1) +for %%# in (%_oIds%) do (echo %%# | findstr /I "%_pridsR%" %nul1% || set _pridsE=1) + +if not defined _pridsE exit /b +reg add %_prids% /t REG_SZ /d "" /f %nul1% + +for %%# in (%_oIds%) do ( +for /f "skip=2 tokens=2*" %%a in ('reg query %_prids%') do if not "%%b"=="" ( +reg add %_prids% /t REG_SZ /d "%%b,%%#" /f %nul1% ) else ( -call :dk_color %Red% "Installing Generic Product Key [%_key%] [%_prod%] [Failed] %errorcode%" -if not defined error ( -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 +reg add %_prids% /t REG_SZ /d "%%#" /f %nul1% ) -set error=1 ) exit /b @@ -2315,18 +2541,15 @@ exit /b if not defined _oLPath exit /b if %oVer%==16 ( -"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%_key% %nul% +"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% ) else ( -"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%_key% %nul% +"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% ) -call :oh_actids -echo "!oapplist!" | find /i "!_actid!" %nul1% && ( -call :dk_color %Gray% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Successful]" -exit /b -) +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b -:: Fallback to /ilc method to install licenses incase integrator.exe is not working +:: Fallback to manual method to install licenses incase integrator.exe is not working set _License=%_License:XVolume=XC2RVL_% @@ -2343,18 +2566,17 @@ set _License=%_License:Retail=R_% set _License=%_License:Volume=VL_% for %%# in ("!_oLPath!\client-issuance-*.xrm-ms") do ( -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\%%~nx#" %nul% +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") ) -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\pkeyconfig-office.xrm-ms" %nul% for %%# in ("!_oLPath!\%_License%*.xrm-ms") do ( -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\%%~nx#" %nul% +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") ) -call :oh_actids -echo "!oapplist!" | find /i "!_actid!" %nul1% && ( -call :dk_color %Gray% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Successful with /ilc Method]" -) || ( +%psc% "$sls = Get-WmiObject %sps%; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); InstallLicenseArr '!_arr!'; InstallLicenseFile '"!_oLPath!\pkeyconfig-office.xrm-ms"'" %nul% + +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% || ( set error=1 call :dk_color %Red% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Failed]" ) @@ -2374,30 +2596,52 @@ if %_hook%==sppc64.dll set offset=3076 del /s /q "%_hookPath%\sppcs.dll" %nul% del /s /q "%_hookPath%\sppc.dll" %nul% -if exist "%_hookPath%\sppcs.dll" set ierror=1 -if exist "%_hookPath%\sppc.dll" set ierror=1 +if exist "%_hookPath%\sppcs.dll" set "ierror=Remove Previous Ohook Install" +if exist "%_hookPath%\sppc.dll" set "ierror=Remove Previous Ohook Install" mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 set ierror=1 +if not %errorlevel%==0 ( +if not defined ierror set ierror=mklink +) -if not exist "%_hookPath%\sppc.dll" call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" -if not exist "%_hookPath%\sppc.dll" set ierror=1 +set exhook= +if exist "!_work!\BIN\%_hook%" set exhook=1 + +if not exist "%_hookPath%\sppc.dll" ( +if defined exhook ( +pushd "!_work!\BIN\" +copy /y /b "%_hook%" "%_hookPath%\sppc.dll" %nul% +popd +) else ( +call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" +) +) +if not exist "%_hookPath%\sppc.dll" (if not defined ierror set ierror=Copy) echo: if not defined ierror ( -echo Symlinking System's sppc.dll To ["%_hookPath%\sppcs.dll"] [Successful] -echo Extracting Custom %_hook% To ["%_hookPath%\sppc.dll"] [Successful] +echo Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] +if defined exhook ( +echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] +) else ( +echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] +) ) else ( set error=1 -call :dk_color %Red% "Symlinking Systems sppc.dll [Failed]" -call :dk_color %Red% "Extracting Custom %_hook% [Failed]" -echo ["%_hookPath%\sppc.dll"] +call :dk_color %Red% "Installing Ohook [Failed to %ierror%]" +echo: +call :oh_checkapps +if defined checknames ( +call :dk_color %Blue% "Close [!checknames!] and try again." +call :dk_color %Blue% "If it is still not fixed, reboot your machine using the restart option and try again." +) else ( +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if /i "%ierror%"=="Copy" call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +) echo: -call :dk_color %Blue% "Close ALL Office apps including Outlook and try again." -call :dk_color %Blue% "If its still not resolved then restart system and try again." ) -if not defined ierror ( +if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 @@ -2414,7 +2658,13 @@ exit /b :oh_process for %%# in (%_oIds%) do ( -set _key= + +echo: !actiProds%oVer%! | find /i "-%%#-" %nul1% && ( +call :dk_color %Gray% "Checking Activation Status [%%# is already permanently activated]" + +) || ( + +set key= set _actid= set _lic= set _preview= @@ -2427,32 +2677,29 @@ set _prod=%%#!_preview! call :ohookdata getinfo !_prod! -if not [!_key!]==[] ( -echo "!oapplist!" | find /i "!_actid!" %nul1% || call :oh_installlic -call :oh_installkey +if not "!key!"=="" ( +echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( set error=1 call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" -call :dk_color %Blue% "Make sure you are using Latest MAS script." +call :dk_color %Blue% "Make sure you are using the latest version of MAS." +set fixes=%fixes% %mas% +call :dk_color %_Yellow% "%mas%" +) ) ) -exit /b - -::======================================================================================================================================== - -:oh_msiproducts - -set msitemp=%SystemRoot%\Temp\_msitemp.txt - -if %oVer%==15 set _psmsikey=%o15msi_reg:HKLM\=HKLM:% -if %oVer%==16 set _psmsikey=%o16msi_reg:HKLM\=HKLM:% - -if exist %msitemp% del /f /q %msitemp% -%psc% "$Key = '%_psmsikey%\Registration\{*FF1CE}'; $keydata = Get-ItemProperty -Path $Key -Name "DigitalProductID"; $binaryData = $keydata."DigitalProductID"; $stringData = [System.Text.Encoding]::Unicode.GetString($binaryData);$stringData" >>%msitemp% +:: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server +:: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if exist %msitemp% call :ohookdata getmsiprod -if exist %msitemp% del /f /q %msitemp% +if defined winserver if defined _config ( +echo %_oIds% | find /i "Retail" %nul1% && ( +set scaIsNeeded=1 +reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% +echo Adding SharedComputerLicensing Reg [Successful] [Needed on Server With Retail Office]" +) +) exit /b @@ -2463,33 +2710,47 @@ exit /b :: Process Office MSI Version call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") if "%_oRoot:~-1%"=="\" set "_oRoot=%_oRoot:~0,-1%" echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 -if not [%osarch%]==[x86] if not defined _oArch set _oArch=x64 -if [%osarch%]==[x86] set _oArch=x86 - -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 +if "%osarch%"=="x86" set _oArch=x86 + +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) -call :oh_msiproducts +set "_common=%CommonProgramFiles%" +if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" +set "_common2=%CommonProgramFiles(x86)%" + +for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" +if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" + +call :ohookdata getmsiprod %2 echo: -echo Activating Office %1.0 %_oArch% MSI... +echo Activating Office... [MSI ^| %_version% ^| %_oArch%] + +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking BRANDING.XML [Not Found, aborting activation...]" +exit /b +) if not defined _oIds ( set error=1 -call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +call :dk_color %Red% "Checking Installed Products [Product IDs not found, aborting activation...]" exit /b ) @@ -2500,264 +2761,526 @@ exit /b ::======================================================================================================================================== -:: Get Office Activation IDs +:oh_findactivated -:oh_actids +set oVer=%2 +set _FsortIds= +set actiProds= + +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT LicenseFamily, Name FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name %1 '*Office 15*' }).LicenseFamily" %nul6%') do call set "actiProds=%%a !actiProds!" + +if not defined actiProds exit /b + +for %%# in (%actiProds%) do ( +set _sortIds=%%# +set _sortIds=!_sortIds:OfficeSPDFreeR_=SPDRetail_! +set _sortIds=!_sortIds:XC2RVL_=XVolume_! +set _sortIds=!_sortIds:CO365R_=Retail_! +set _sortIds=!_sortIds:O365R_=Retail_! +set _sortIds=!_sortIds:E5R_=Retail_! +set _sortIds=!_sortIds:MSDNR_=Retail_! +set _sortIds=!_sortIds:DemoR_=Retail_! +set _sortIds=!_sortIds:EDUR_=Retail_! +set _sortIds=!_sortIds:R_=Retail_! +set _sortIds=!_sortIds:VL_=Volume_! +set _sortIds=!_sortIds:Office16=! +set _sortIds=!_sortIds:Office19=! +set _sortIds=!_sortIds:Office21=! +set _sortIds=!_sortIds:Office24=! +set _sortIds=!_sortIds:Office=! +for /f "tokens=1 delims=-_" %%a in ("!_sortIds!") do set "_sortIds=-%%a-" +set _FsortIds=!_sortIds! !_FsortIds! +) -set oapplist= -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='0ff1ce15-a989-479d-af46-f275c6370663') 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=''0ff1ce15-a989-479d-af46-f275c6370663''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" -%chkapp% do (if defined oapplist (call set "oapplist=!oapplist! %%a") else (call set "oapplist=%%a")) +call :ohookdata findactivated %2 exit /b +:: Below IDs are not checked for permanent activation +set _sortIds=!_sortIds:PreviewVL_=Volume_! +set _sortIds=!_sortIds:PreInstallR_=Retail_! + ::======================================================================================================================================== -:: 1st column = Office version number -:: 2nd column = Activation ID -:: 3rd column = Generic key. Preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK -:: 4th column = Last part of license description -:: 5th column = Edition -:: Separator = "_" +:oh_clearblock -:ohookdata +:: Find remnants of Office vNext/shared/device license block and remove it because it stops other licenses from appearing +:: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state -set f= -for %%# in ( -15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7%f%RFY-7N%f%XPK-Q43%f%42-Y9%f%X2H-3JX%f%4X_Retail________AccessRetail -15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9M%f%F9G-CN%f%32B-HV7%f%XT-9X%f%J8T-9KV%f%F4_MAK___________AccessVolume -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT%f%889-MB%f%H4X-8MD%f%4H-X8%f%R2D-WQH%f%F8_Retail________ExcelRetail -15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3%f%N36-YC%f%HDK-XYW%f%BG-KY%f%QVV-BDT%f%J2_MAK___________ExcelVolume -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_BM%f%K4W-6N%f%88B-BP9%f%QR-PH%f%FCK-MG7%f%GF_Retail________GrooveRetail -15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN%f%84D-7H%f%CWY-FTC%f%BK-JM%f%XWM-HT7%f%GJ_MAK___________GrooveVolume -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2W%f%QNF-GB%f%K4B-XVG%f%6F-BB%f%MX7-M4F%f%2Y_OEM-Perp______HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YW%f%D4R-CN%f%KVT-VG8%f%VJ-93%f%33B-RCW%f%9F_Subscription__HomeBusinessRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_6W%f%W3N-BD%f%GM9-PCC%f%HD-9Q%f%PP9-P34%f%QG_Subscription__HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_RV%f%7NQ-HY%f%3WW-7CK%f%WH-QT%f%VMW-29V%f%HC_Retail________InfoPathRetail -15_9e016989-4007-42a6-8051-64eb97110cf2_C4%f%TGN-QQ%f%W6Y-FYK%f%XC-6W%f%JW7-X73%f%VG_MAK___________InfoPathVolume -15_9103f3ce-1084-447a-827e-d6097f68c895_6M%f%DN4-WF%f%3FV-4WH%f%3Q-W6%f%99V-RGC%f%MY_PrepidBypass__LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N4%f%2BF-CB%f%Y9F-W2C%f%7R-X3%f%97X-DYF%f%QW_PrepidBypass__LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_89%f%P23-2N%f%K2R-JXM%f%2M-3Q%f%8R8-BWM%f%3Y_Retail________LyncRetail -15_e1264e10-afaf-4439-a98b-256df8bb156f_3W%f%KCD-RN%f%489-4M7%f%XJ-GJ%f%2GQ-YBF%f%Q6_MAK___________LyncVolume -15_69ec9152-153b-471a-bf35-77ec88683eae_VN%f%WHF-FK%f%FBW-Q2R%f%GD-HY%f%HWF-R3H%f%H2_Subscription__MondoRetail -15_f33485a0-310b-4b72-9a0e-b1d605510dbd_2Y%f%NYQ-FQ%f%MVG-CB8%f%KW-6X%f%KYD-M7R%f%RJ_MAK___________MondoVolume -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_4T%f%GWV-6N%f%9P6-G2H%f%8Y-2H%f%WKB-B4F%f%F4_Bypass________OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_3K%f%XXQ-PV%f%N2C-8P7%f%YY-HC%f%V88-GVG%f%Q6_Retail________OneNoteRetail -15_b067e965-7521-455b-b9f7-c740204578a2_JD%f%MWF-NJ%f%C7B-HRC%f%HY-WF%f%T8G-BPX%f%D9_MAK___________OneNoteVolume -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_9N%f%4RQ-CF%f%8R2-HBV%f%CB-J3%f%C9V-94P%f%4D_Retail________OutlookRetail -15_8d577c50-ae5e-47fd-a240-24986f73d503_HN%f%G29-GG%f%WRG-RFC%f%8C-JT%f%FP4-2J9%f%FH_MAK___________OutlookVolume -15_5aab8561-1686-43f7-9ff5-2c861da58d17_9C%f%YB3-NF%f%MRW-YFD%f%G6-XC%f%7TF-BY3%f%6J_OEM-Perp______PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_2N%f%CQJ-MF%f%RMH-TXV%f%83-J7%f%V4C-RVR%f%WC_Retail________PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_HV%f%MN2-KP%f%HQH-DVQ%f%MK-7B%f%3CM-FGB%f%FC_Retail________PowerPointRetail -15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_47%f%DKN-HP%f%JP7-RF9%f%M3-VC%f%YT2-TMQ%f%4G_MAK___________PowerPointVolume -15_064383fa-1538-491c-859b-0ecab169a0ab_N3%f%QMM-GK%f%DT3-JQG%f%X6-7X%f%3MQ-4GB%f%G3_Retail________ProPlusRetail -15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_QK%f%HNX-M9%f%GGH-T3Q%f%MW-YP%f%K4Q-QRP%f%9V_MAK___________ProPlusVolume -15_4e26cac1-e15a-4467-9069-cb47b67fe191_CF%f%9DD-6C%f%NW2-BJW%f%JQ-CV%f%CFX-Y7T%f%XD_OEM-Perp______ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_MB%f%QBN-CQ%f%PT6-PXR%f%MC-TY%f%JFR-3C8%f%MY_Retail________ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_WP%f%Y8N-PD%f%PY4-FC7%f%TF-KM%f%P7P-KWY%f%FY_Subscription__ProjectProRetail -15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_WF%f%CT2-NB%f%FQ7-JD7%f%VV-MF%f%JX6-6F2%f%CM_MAK___________ProjectProVolume -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_NT%f%HQT-VK%f%K6W-BRB%f%87-HV%f%346-Y96%f%W8_Subscription__ProjectStdRetail -15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_3C%f%NQX-T3%f%4TY-99R%f%H4-C4%f%YD2-KWY%f%GV_MAK___________ProjectStdVolume -15_c3a0814a-70a4-471f-af37-2313a6331111_TW%f%NCJ-YR%f%84W-X7P%f%PF-6D%f%PRP-D67%f%VC_Retail________PublisherRetail -15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_DJ%f%PHV-NC%f%JV6-GWP%f%T6-K2%f%6JX-C7G%f%X6_MAK___________PublisherVolume -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_3N%f%Y6J-WH%f%T3F-47B%f%DV-JH%f%F36-234%f%3W_PrepidBypass__SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_V6%f%VWN-KC%f%2HR-YYD%f%D6-9V%f%7HQ-7T7%f%VP_Retail________StandardRetail -15_a24cca51-3d54-4c41-8a76-4031f5338cb2_9T%f%N6B-PC%f%YH4-MCV%f%DQ-KT%f%83C-TMQ%f%7T_MAK___________StandardVolume -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NV%f%K2G-2M%f%Y4G-7JX%f%2P-7D%f%6F2-VFQ%f%BR_Subscription__VisioProRetail -15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_YN%f%7CF-XR%f%H6R-CGK%f%RY-GK%f%PV3-BG7%f%WF_MAK___________VisioProVolume -15_980f9e3e-f5a8-41c8-8596-61404addf677_NC%f%RB7-VP%f%48F-43F%f%YY-62%f%P3R-367%f%WK_Subscription__VisioStdRetail -15_44a1f6ff-0876-4edb-9169-dbb43101ee89_RX%f%63Y-4N%f%FK2-XTY%f%C8-C6%f%B3W-YPX%f%PJ_MAK___________VisioStdVolume -15_191509f2-6977-456f-ab30-cf0492b1e93a_NB%f%77V-RP%f%FQ6-PMM%f%KQ-T8%f%7DV-M4D%f%84_Retail________WordRetail -15_9cedef15-be37-4ff0-a08a-13a045540641_RP%f%HPB-Y7%f%NC4-3VY%f%FM-DW%f%7VD-G8Y%f%J8_MAK___________WordVolume -15_6337137e-7c07-4197-8986-bece6a76fc33_2P%f%3C9-BQ%f%NJH-VCV%f%PH-YD%f%Y6M-43J%f%PQ_Subscription__O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2%f%W28-TN%f%9C8-26P%f%WV-F7%f%J4G-72X%f%CB_Subscription1_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_2N%f%382-D6%f%PKK-QTX%f%4D-2J%f%JYK-M96%f%P2_Subscription1_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN%f%8JP-87%f%TQJ-PBF%f%3P-Y6%f%6KC-W2K%f%9V_Subscription1_O365SmallBusPremRetail -16_bfa358b0-98f1-4125-842e-585fa13032e6_WH%f%K4N-YQ%f%GHB-XWX%f%CC-G3%f%HYC-6JF%f%94_Retail________AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RN%f%B7V-P4%f%8F4-3FY%f%Y6-2P%f%3R3-63B%f%QV_PrepidBypass__AccessRuntimeRetail -16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_JJ%f%2Y4-N8%f%KM3-Y8K%f%Y3-Y2%f%2FR-R3K%f%VK_MAK___________AccessVolume -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_RK%f%JBN-VW%f%TM2-BDK%f%XX-RK%f%QFD-JTY%f%Q2_Retail________ExcelRetail -16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FV%f%GNR-X8%f%2B2-6PR%f%JM-YT%f%4W7-8HV%f%36_MAK___________ExcelVolume -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2W%f%QNF-GB%f%K4B-XVG%f%6F-BB%f%MX7-M4F%f%2Y_OEM-Perp______HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM%f%6FM-NV%f%F78-KV9%f%PM-F3%f%6B8-D9M%f%XD_Retail________HomeBusinessRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PN%f%PRV-F2%f%627-Q8J%f%VC-3D%f%GR9-WTY%f%RK_Retail________HomeStudentRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YW%f%D4R-CN%f%KVT-VG8%f%VJ-93%f%33B-RC3%f%B8_Retail________HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_VN%f%WHF-FK%f%FBW-Q2R%f%GD-HY%f%HWF-R3H%f%H2_Subscription__MondoRetail -16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_FM%f%TQQ-84%f%NR8-274%f%4R-MX%f%F4P-PGY%f%R3_MAK___________MondoVolume -16_436366de-5579-4f24-96db-3893e4400030_XY%f%NTG-R9%f%6FY-369%f%HX-YF%f%PHY-F9C%f%PM_Bypass________OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_FX%f%F6F-CN%f%C26-W64%f%3C-K6%f%KB7-6XX%f%W3_Retail________OneNoteRetail -16_23b672da-a456-4860-a8f3-e062a501d7e8_9T%f%YVN-D7%f%6HK-BVM%f%WT-Y7%f%G88-9TP%f%PV_MAK___________OneNoteVolume -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_7N%f%4KG-P2%f%QDH-86V%f%9C-DJ%f%FVF-369%f%W9_Retail________OutlookRetail -16_50059979-ac6f-4458-9e79-710bcb41721a_7Q%f%PNR-3H%f%FDG-YP6%f%T9-JQ%f%CKQ-KKX%f%XC_MAK___________OutlookVolume -16_5aab8561-1686-43f7-9ff5-2c861da58d17_9C%f%YB3-NF%f%MRW-YFD%f%G6-XC%f%7TF-BY3%f%6J_OEM-Perp______PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_FT%f%7VF-XB%f%N92-HPD%f%JV-RH%f%MBY-6VK%f%BF_Retail________PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_N7%f%GCB-WQ%f%T7K-QRH%f%WG-TT%f%PYD-7T9%f%XF_Retail________PowerPointRetail -16_9b4060c9-a7f5-4a66-b732-faf248b7240f_X3%f%RT9-ND%f%G64-VMK%f%2M-KQ%f%6XY-DPF%f%GV_MAK___________PowerPointVolume -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_GM%f%43N-F7%f%42Q-6JD%f%DK-M6%f%22J-J8G%f%DV_Retail________ProPlusRetail -16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_FN%f%VK8-8D%f%VCJ-F7X%f%3J-KG%f%VQB-RC2%f%QY_MAK___________ProPlusVolume -16_4e26cac1-e15a-4467-9069-cb47b67fe191_CF%f%9DD-6C%f%NW2-BJW%f%JQ-CV%f%CFX-Y7T%f%XD_OEM-Perp______ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_NX%f%FTK-YD%f%9Y7-X9M%f%MJ-9B%f%WM6-J2Q%f%VH_Retail________ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_WP%f%Y8N-PD%f%PY4-FC7%f%TF-KM%f%P7P-KWY%f%FY_Subscription__ProjectProRetail -16_82f502b5-b0b0-4349-bd2c-c560df85b248_PK%f%C3N-8F%f%99H-28M%f%VY-J4%f%RYY-CWG%f%DH_MAK___________ProjectProVolume -16_16728639-a9ab-4994-b6d8-f81051e69833_JB%f%NPH-YF%f%2F7-Q9Y%f%29-86%f%CTG-C9Y%f%GV_MAKC2R________ProjectProXVolume -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_NT%f%HQT-VK%f%K6W-BRB%f%87-HV%f%346-Y96%f%W8_Subscription__ProjectStdRetail -16_82e6b314-2a62-4e51-9220-61358dd230e6_4T%f%GWV-6N%f%9P6-G2H%f%8Y-2H%f%WKB-B4G%f%93_MAK___________ProjectStdVolume -16_431058f0-c059-44c5-b9e7-ed2dd46b6789_N3%f%W2Q-69%f%MBT-27R%f%D9-BH%f%8V3-JT2%f%C8_MAKC2R________ProjectStdXVolume -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_WK%f%WND-X6%f%G9G-CDM%f%TV-CP%f%GYJ-6MV%f%BF_Retail________PublisherRetail -16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_9Q%f%VN2-PX%f%XRX-8V4%f%W8-Q7%f%926-TJG%f%D8_MAK___________PublisherVolume -16_9103f3ce-1084-447a-827e-d6097f68c895_6M%f%DN4-WF%f%3FV-4WH%f%3Q-W6%f%99V-RGC%f%MY_PrepidBypass__SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_4N%f%4D8-3J%f%7Y3-YYW%f%7C-73%f%HD2-V8R%f%HY_PrepidBypass__SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_PB%f%J79-77%f%NY4-VRG%f%FG-Y8%f%WYC-CKC%f%RC_Retail________SkypeforBusinessRetail -16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_DM%f%TCJ-KN%f%RKR-JV8%f%TQ-V2%f%CR2-VFT%f%FH_MAK___________SkypeforBusinessVolume -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_2F%f%PWN-4H%f%6CM-KD8%f%QQ-8H%f%CHC-P9X%f%YW_Retail________StandardRetail -16_0ed94aac-2234-4309-ba29-74bdbb887083_WH%f%GMQ-JN%f%MGT-MDQ%f%VF-WD%f%R69-KQB%f%WC_MAK___________StandardVolume -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NV%f%K2G-2M%f%Y4G-7JX%f%2P-7D%f%6F2-VFQ%f%BR_Subscription__VisioProRetail -16_295b2c03-4b1c-4221-b292-1411f468bd02_NR%f%KT9-C8%f%GP2-XDY%f%XQ-YW%f%72K-MG9%f%2B_MAK___________VisioProVolume -16_0594dc12-8444-4912-936a-747ca742dbdb_G9%f%8Q2-B6%f%N77-CFH%f%9J-K8%f%24G-XQC%f%C4_MAKC2R________VisioProXVolume -16_980f9e3e-f5a8-41c8-8596-61404addf677_NC%f%RB7-VP%f%48F-43F%f%YY-62%f%P3R-367%f%WK_Subscription__VisioStdRetail -16_44151c2d-c398-471f-946f-7660542e3369_XN%f%CJB-YY%f%883-JRW%f%64-DP%f%XMX-JXC%f%R6_MAK___________VisioStdVolume -16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_B2%f%HTN-JP%f%H8C-J6Y%f%6V-HC%f%HKB-43M%f%GT_MAKC2R________VisioStdXVolume -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_P8%f%K82-NQ%f%7GG-JKY%f%8T-6V%f%HVY-88G%f%GD_Retail________WordRetail -16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_YH%f%MWC-YN%f%6V9-WJP%f%XD-3W%f%QKP-TMV%f%CV_MAK___________WordVolume -16_518687bd-dc55-45b9-8fa6-f918e1082e83_WR%f%YJ6-G3%f%NP7-7VH%f%94-8X%f%7KP-JB7%f%HC_Retail________Access2019Retail -16_385b91d6-9c2c-4a2e-86b5-f44d44a48c5f_6F%f%WHX-NK%f%YXK-BW3%f%4Q-7X%f%C9F-Q9P%f%X7_MAK-AE________Access2019Volume -16_22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FG%f%QNJ-JW%f%JCG-7Q8%f%MG-RM%f%RGJ-9TQ%f%VF_PrepidBypass__AccessRuntime2019Retail -16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KB%f%PNW-64%f%CMM-8KW%f%CB-23%f%F44-8B7%f%HM_Retail________Excel2019Retail -16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8N%f%T4X-GQ%f%MCK-62X%f%4P-TW%f%6QP-YKP%f%YF_MAK-AE________Excel2019Volume -16_7fe09eef-5eed-4733-9a60-d7019df11cac_QB%f%N2Y-9B%f%284-9KW%f%78-K4%f%8PB-R62%f%YT_Retail________HomeBusiness2019Retail -16_4539aa2c-5c31-4d47-9139-543a868e5741_XN%f%WPM-32%f%XQC-Y7Q%f%JC-QG%f%GBV-YY7%f%JK_Retail________HomeStudent2019Retail -16_20e359d5-927f-47c0-8a27-38adbdd27124_WR%f%43D-NM%f%WQQ-HCQ%f%R2-VK%f%XDR-37B%f%7H_Retail________Outlook2019Retail -16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN%f%3QB-GT%f%6D7-YB3%f%VH-F3%f%RPB-3GQ%f%YB_MAK-AE________Outlook2019Volume -16_2747b731-0f1f-413e-a92d-386ec1277dd8_NM%f%BY8-V3%f%CV7-BX6%f%K6-29%f%22Y-43M%f%7T_Retail________Personal2019Retail -16_7e63cc20-ba37-42a1-822d-d5f29f33a108_HN%f%27K-JH%f%J8R-7T7%f%KK-WJ%f%YC3-FM7%f%MM_Retail________PowerPoint2019Retail -16_13c2d7bf-f10d-42eb-9e93-abf846785434_29%f%GNM-VM%f%33V-WR2%f%3K-HG%f%2DT-KTQ%f%YR_MAK-AE________PowerPoint2019Volume -16_a3072b8f-adcc-4e75-8d62-fdeb9bdfae57_BN%f%4XJ-R9%f%DYY-96W%f%48-YK%f%8DM-MY7%f%PY_Retail________ProPlus2019Retail -16_6755c7a7-4dfe-46f5-bce8-427be8e9dc62_T8%f%YBN-4Y%f%V3X-KK2%f%4Q-QX%f%BD7-T3C%f%63_MAK-AE________ProPlus2019Volume -16_1717c1e0-47d3-4899-a6d3-1022db7415e0_9N%f%XDK-MR%f%Y98-2VJ%f%V8-GF%f%73J-TQ9%f%FK_Retail________Professional2019Retail -16_0d270ef7-5aaf-4370-a372-bc806b96adb7_JD%f%TNC-PP%f%77T-T9H%f%2W-G4%f%J2J-VH8%f%JK_Retail________ProjectPro2019Retail -16_d4ebadd6-401b-40d5-adf4-a5d4accd72d1_TB%f%XBD-FN%f%WKJ-WRH%f%BD-KB%f%PHH-XD9%f%F2_MAK-AE________ProjectPro2019Volume -16_bb7ffe5f-daf9-4b79-b107-453e1c8427b5_R3%f%JNT-8P%f%BDP-MTW%f%CK-VD%f%2V8-HMK%f%F9_Retail________ProjectStd2019Retail -16_fdaa3c03-dc27-4a8d-8cbf-c3d843a28ddc_RB%f%RFX-MQ%f%NDJ-4XF%f%HF-7Q%f%VDR-JHX%f%GC_MAK-AE________ProjectStd2019Volume -16_f053a7c7-f342-4ab8-9526-a1d6e5105823_4Q%f%C36-NW%f%3YH-D2Y%f%9D-RJ%f%PC7-VVB%f%9D_Retail________Publisher2019Retail -16_40055495-be00-444e-99cc-07446729b53e_K8%f%F2D-NB%f%M32-BF2%f%6V-YC%f%KFJ-29Y%f%9W_MAK-AE________Publisher2019Volume -16_b639e55c-8f3e-47fe-9761-26c6a786ad6b_JB%f%DKF-6N%f%CD6-49K%f%3G-2T%f%V79-BKP%f%73_Retail________SkypeforBusiness2019Retail -16_15a430d4-5e3f-4e6d-8a0a-14bf3caee4c7_9M%f%NQ7-YP%f%Q3B-6WJ%f%XM-G8%f%3T3-CBB%f%DK_MAK-AE________SkypeforBusiness2019Volume -16_f88cfdec-94ce-4463-a969-037be92bc0e7_N9%f%722-BV%f%9H6-WTJ%f%TT-FP%f%B93-978%f%MK_PrepidBypass__SkypeforBusinessEntry2019Retail -16_fdfa34dd-a472-4b85-bee6-cf07bf0aaa1c_ND%f%GVM-MD%f%27H-2XH%f%VC-KD%f%DX2-YKP%f%74_Retail________Standard2019Retail -16_beb5065c-1872-409e-94e2-403bcfb6a878_NT%f%3V6-XM%f%BK7-Q66%f%MF-VM%f%KR4-FC3%f%3M_MAK-AE________Standard2019Volume -16_a6f69d68-5590-4e02-80b9-e7233dff204e_2N%f%WVW-QG%f%F4T-9CP%f%MB-WY%f%DQ9-7XP%f%79_Retail________VisioPro2019Retail -16_f41abf81-f409-4b0d-889d-92b3e3d7d005_33%f%YF4-GN%f%CQ3-J6G%f%DM-J6%f%7P3-FM7%f%QP_MAK-AE________VisioPro2019Volume -16_4a582021-18c2-489f-9b3d-5186de48f1cd_26%f%3WK-3N%f%797-7R4%f%37-28%f%BKG-3V8%f%M8_Retail________VisioStd2019Retail -16_933ed0e3-747d-48b0-9c2c-7ceb4c7e473d_BG%f%NHX-QT%f%PRJ-F9C%f%9G-R8%f%QQG-8T2%f%7F_MAK-AE________VisioStd2019Volume -16_72cee1c2-3376-4377-9f25-4024b6baadf8_JX%f%R8H-NJ%f%3MK-X66%f%W8-78%f%CWD-QRV%f%R2_Retail________Word2019Retail -16_fe5fe9d5-3b06-4015-aa35-b146f85c4709_9F%f%36R-PN%f%VHH-3DX%f%GQ-7C%f%D2H-R9D%f%3V_MAK-AE________Word2019Volume -16_f634398e-af69-48c9-b256-477bea3078b5_P2%f%86B-N3%f%XYP-36Q%f%RQ-29%f%CMP-RVX%f%9M_Retail________Access2021Retail -16_ae17db74-16b0-430b-912f-4fe456e271db_JB%f%H3N-P9%f%7FP-FRT%f%JD-MG%f%K2C-VFW%f%G6_MAK-AE________Access2021Volume -16_fb099c19-d48b-4a2f-a160-4383011060aa_V6%f%QFB-7N%f%7G9-PF7%f%W9-M8%f%FQM-MY8%f%G9_Retail________Excel2021Retail -16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WN%f%YR4-KM%f%R9H-KVC%f%8W-7H%f%J8B-K79%f%DQ_MAK-AE________Excel2021Volume -16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM%f%99N-4M%f%MD8-DQC%f%GJ-VM%f%YFY-R63%f%YK_Subscription__HomeBusiness2021Retail -16_2f258377-738f-48dd-9397-287e43079958_N3%f%CWD-38%f%XVH-KRX%f%2Y-YR%f%P74-6RB%f%B2_Subscription__HomeStudent2021Retail -16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB%f%2TQ-3Y%f%79C-77C%f%6M-QM%f%Y7H-7QY%f%8P_Retail________OneNote2021Retail -16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4N%f%CWR-9V%f%92Y-34V%f%B2-RP%f%THR-YTG%f%R7_Retail________Outlook2021Retail -16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ%f%9MJ-QY%f%N6B-67P%f%X9-GY%f%FVY-QJ6%f%TB_MAK-AE________Outlook2021Volume -16_8f89391e-eedb-429d-af90-9d36fbf94de6_RR%f%RYB-DN%f%749-GCP%f%W4-9H%f%6VK-HCH%f%PT_Retail________Personal2021Retail -16_c9bf5e86-f5e3-4ac6-8d52-e114a604d7bf_3K%f%XXQ-PV%f%N2C-8P7%f%YY-HC%f%V88-GVM%f%96_Retail1_______PowerPoint2021Retail -16_716f2434-41b6-4969-ab73-e61e593a3875_39%f%G2N-3B%f%D9C-C4X%f%CM-BD%f%4QG-FVY%f%DY_MAK-AE________PowerPoint2021Volume -16_c2f04adf-a5de-45c5-99a5-f5fddbda74a8_8W%f%XTP-MN%f%628-KY4%f%4G-VJ%f%WCK-C7P%f%CF_Retail________ProPlus2021Retail -16_3f180b30-9b05-4fe2-aa8d-0c1c4790f811_RN%f%HJY-DT%f%FXW-HW9%f%F8-49%f%82D-MD2%f%CW_MAK-AE1_______ProPlus2021Volume -16_96097a68-b5c5-4b19-8600-2e8d6841a0db_JR%f%JNJ-33%f%M7C-R73%f%X3-P9%f%XF7-R9F%f%6M_MAK-AE________ProPlusSPLA2021Volume -16_711e48a6-1a79-4b00-af10-73f4ca3aaac4_DJ%f%PHV-NC%f%JV6-GWP%f%T6-K2%f%6JX-C7P%f%BG_Retail________Professional2021Retail -16_3747d1d5-55a8-4bc3-b53d-19fff1913195_QK%f%HNX-M9%f%GGH-T3Q%f%MW-YP%f%K4Q-QRW%f%MV_Retail________ProjectPro2021Retail -16_17739068-86c4-4924-8633-1e529abc7efc_HV%f%C34-CV%f%NPG-RVC%f%MT-X2%f%JRF-CR7%f%RK_MAK-AE1_______ProjectPro2021Volume -16_4ea64dca-227c-436b-813f-b6624be2d54c_2B%f%96V-X9%f%NJY-WFB%f%RC-Q8%f%MP2-7CH%f%RR_Retail________ProjectStd2021Retail -16_84313d1e-47c8-4e27-8ced-0476b7ee46c4_3C%f%NQX-T3%f%4TY-99R%f%H4-C4%f%YD2-KW6%f%WH_MAK-AE________ProjectStd2021Volume -16_b769b746-53b1-4d89-8a68-41944dafe797_CD%f%NFG-77%f%T8D-VKQ%f%JX-B7%f%KT3-KK2%f%8V_Retail1_______Publisher2021Retail -16_a0234cfe-99bd-4586-a812-4f296323c760_2K%f%XJH-3N%f%HTW-RDB%f%PX-QF%f%RXJ-MTG%f%XF_MAK-AE________Publisher2021Volume -16_c3fb48b2-1fd4-4dc8-af39-819edf194288_DV%f%BXN-HF%f%T43-CVP%f%RQ-J8%f%9TF-VMM%f%HG_Retail________SkypeforBusiness2021Retail -16_6029109c-ceb8-4ee5-b324-f8eb2981e99a_R3%f%FCY-NH%f%GC7-CBP%f%VP-8Q%f%934-YTG%f%XG_MAK-AE________SkypeforBusiness2021Volume -16_9e7e7b8e-a0e7-467b-9749-d0de82fb7297_HX%f%NXB-J4%f%JGM-TCF%f%44-2X%f%2CV-FJV%f%VH_Retail________Standard2021Retail -16_223a60d8-9002-4a55-abac-593f5b66ca45_2C%f%JN4-C9%f%XK2-HFP%f%Q6-YH%f%498-82T%f%XH_MAK-AE________Standard2021Volume -16_b99ba8c4-e257-4b70-a31a-8bd308ce7073_BQ%f%WDW-NJ%f%9YF-P7Y%f%79-H6%f%DCT-MKQ%f%9C_MAK-AE________StandardSPLA2021Volume -16_814014d3-c30b-4f63-a493-3708e0dc0ba8_T6%f%P26-NJ%f%VBR-76B%f%K8-WB%f%CDY-TX3%f%BC_Retail________VisioPro2021Retail -16_c590605a-a08a-4cc7-8dc2-f1ffb3d06949_JN%f%KBX-MH%f%9P4-K8Y%f%YV-8C%f%G2Y-VQ2%f%C8_MAK-AE________VisioPro2021Volume -16_16d43989-a5ef-47e2-9ff1-272784caee24_89%f%NYY-KB%f%93R-7X2%f%2F-93%f%QDF-DJ6%f%YM_Retail________VisioStd2021Retail -16_d55f90ee-4ba2-4d02-b216-1300ee50e2af_BW%f%43B-4P%f%NFP-V63%f%7F-23%f%TR2-J47%f%TX_MAK-AE________VisioStd2021Volume -16_fb33d997-4aa3-494e-8b58-03e9ab0f181d_VN%f%CC4-CJ%f%QVK-BKX%f%34-77%f%Y8H-CYX%f%MR_Retail________Word2021Retail -16_0c728382-95fb-4a55-8f12-62e605f91727_BJ%f%G97-NW%f%3GM-8QQ%f%Q7-FH%f%76G-686%f%XM_MAK-AE________Word2021Volume -16_8fdb1f1e-663f-4f2e-8fdb-7c35aee7d5ea_GN%f%XWX-DF%f%797-B2J%f%T3-82%f%W27-KHP%f%XT_MAK-AE________ProPlus2024Volume-Preview -16_33b11b14-91fd-4f7b-b704-e64a055cf601_X8%f%6XX-N3%f%QMW-B4W%f%GQ-QC%f%B69-V26%f%KW_MAK-AE________ProjectPro2024Volume-Preview -16_eb074198-7384-4bdd-8e6c-c3342dac8435_DW%f%99Y-H7%f%NT6-6B2%f%9D-8J%f%Q8F-R3Q%f%T7_MAK-AE________VisioPro2024Volume-Preview -16_e563d108-7b0e-418a-8390-20e1d133d6bb_P6%f%NMW-JM%f%TRC-R6M%f%Q6-HH%f%3F2-BTH%f%KB_Retail________Access2024Retail -16_f748e2f7-5951-4bc2-8a06-5a1fbe42f5f4_CX%f%NJT-98%f%HPP-92H%f%X7-MX%f%6GY-2PV%f%FR_MAK-AE________Access2024Volume -16_f3a5e86a-e4f8-4d88-8220-1440c3bbcefa_82%f%CNJ-W8%f%2TW-BY2%f%3W-BV%f%J6W-W48%f%GP_Retail________Excel2024Retail -16_523fbbab-c290-460d-a6c9-48e49709cb8e_7Y%f%287-9N%f%2KC-8MR%f%R3-BK%f%Y82-2DQ%f%RV_MAK-AE________Excel2024Volume -16_885f83e0-5e18-4199-b8be-56697d0debfb_N6%f%9X7-73%f%KPT-899%f%FD-P8%f%HQ4-QGT%f%P4_Retail________Home2024Retail -16_acd4eccb-ff89-4e6a-9350-d2d56276ec69_PR%f%KQM-YN%f%PQR-77Q%f%T6-32%f%8D7-BD2%f%23_Retail________HomeBusiness2024Retail -16_6f5fd645-7119-44a4-91b4-eccfeeb738bf_2C%f%FK4-N4%f%4KG-7XG%f%89-CW%f%DG6-P7P%f%27_Retail________Outlook2024Retail -16_9a1e1bac-2d8b-4890-832f-0a68b27c16e0_NQ%f%PXP-WV%f%B87-H3M%f%MB-FY%f%BW2-9QF%f%PB_MAK-AE________Outlook2024Volume -16_da9a57ae-81a8-4cb3-b764-5840e6b5d0bf_CT%f%2KT-GT%f%NWH-9HF%f%GW-J2%f%PWJ-XW7%f%KJ_Retail________PowerPoint2024Retail -16_eca0d8a6-e21b-4622-9a87-a7103ff14012_RR%f%XFN-JJ%f%26R-RVW%f%D2-V7%f%WMP-27P%f%WQ_MAK-AE________PowerPoint2024Volume -16_295dcc21-151a-4b4d-8f50-2b627ea197f6_GN%f%J6P-Y4%f%RBM-C32%f%WW-2V%f%JKJ-MTH%f%KK_Retail________ProjectPro2024Retail -16_2141d341-41aa-4e45-9ca1-201e117d6495_WN%f%FMR-HK%f%4R7-7FJ%f%VM-VQ%f%3JC-76H%f%F6_MAK-AE1_______ProjectPro2024Volume -16_ead42f74-817d-45b4-af6b-3beeb36ba650_C2%f%PNM-2G%f%QFC-CY3%f%XR-WX%f%CP4-GX3%f%XM_Retail________ProjectStd2024Retail -16_4b6d9b9b-c16e-429d-babe-8bb84c3c27d6_F2%f%VNW-MW%f%8TT-K62%f%2Q-4D%f%96H-PWJ%f%8X_MAK-AE________ProjectStd2024Volume -16_db249714-bb54-4422-8c78-2cc8d4c4a19f_VW%f%CNX-7F%f%KBD-FHJ%f%YG-XB%f%R4B-88K%f%C6_Retail________ProPlus2024Retail -16_d77244dc-2b82-4f0a-b8ae-1fca00b7f3e2_4Y%f%V2J-VN%f%G7W-YGT%f%P3-44%f%3TK-TF8%f%CP_MAK-AE1_______ProPlus2024Volume -16_3046a03e-2277-4a51-8ccd-a6609eae8c19_XK%f%RBW-KN%f%2FF-G8C%f%KY-HX%f%VG6-FVY%f%2V_MAK-AE________SkypeforBusiness2024Volume -16_44a07f51-8263-4b2f-b2a5-70340055c646_GV%f%G6N-6W%f%CHH-K2M%f%VP-RQ%f%78V-3J7%f%GJ_MAK-AE1_______Standard2024Volume -16_282d8f34-1111-4a6f-80fe-c17f70dec567_HG%f%RBX-N6%f%8QF-6DY%f%8J-CG%f%X4W-XW7%f%KP_Retail________VisioPro2024Retail -16_4c2f32bf-9d0b-4d8c-8ab1-b4c6a0b9992d_GB%f%NHB-B2%f%G3Q-G42%f%YB-3M%f%FC2-7CJ%f%CX_MAK-AE________VisioPro2024Volume -16_8504167d-887a-41ae-bd1d-f849d834352d_VB%f%XPJ-38%f%NR3-C4D%f%KF-C8%f%RT7-RGH%f%KQ_Retail________VisioStd2024Retail -16_0978336b-5611-497c-9414-96effaff4938_YN%f%FTY-63%f%K7P-FKH%f%XK-28%f%YYT-D32%f%XB_MAK-AE________VisioStd2024Volume -16_f6b24e61-6aa7-4fd2-ab9b-4046cee4230a_XN%f%33R-RP%f%676-GMY%f%2F-T3%f%MH7-GCV%f%KR_Retail________Word2024Retail -16_06142aa2-e935-49ca-af5d-08069a3d84f3_WD%f%8CQ-6K%f%NQM-8W2%f%CX-2R%f%T63-KK3%f%TP_MAK-AE________Word2024Volume -16_6337137e-7c07-4197-8986-bece6a76fc33_2P%f%3C9-BQ%f%NJH-VCV%f%PH-YD%f%Y6M-43J%f%PQ_Subscription__O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W6%f%2NQ-26%f%7QR-RTF%f%74-PF%f%2MH-JQM%f%TH_Subscription__O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2%f%W28-TN%f%9C8-26P%f%WV-F7%f%J4G-72X%f%CB_Subscription1_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_2N%f%382-D6%f%PKK-QTX%f%4D-2J%f%JYK-M96%f%P2_Subscription1_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN%f%8JP-87%f%TQJ-PBF%f%3P-Y6%f%6KC-W2K%f%9V_Subscription1_O365SmallBusPremRetail -) do ( -for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( +set _sidlist= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -if %1==getinfo if not defined _key ( -if %oVer%==%%A if /i "%2"=="%%E" ( -set _key=%%C -set _actid=%%B -set _allactid=!_allactid! %%B -set _lic=%%D -if %oVer%==16 (echo "%%D" | find /i "Subscription" %nul% && set _sublic=1) +if not defined _sidlist ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" +exit /b ) + +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 + +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" ) -if %1==getmsiprod if %oVer%==%%A ( -find /i "%%E" %msitemp% %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) +::========================== + +:: Load the unloaded useraccounts registry + +set loadedsids= +set failedtoload= +set failedtounload= +for %%# in (%_sidlist%) do ( +reg query HKU\%%#\Software %nul% || ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +reg load HKU\%%# "%%b\NTUSER.DAT" %nul% +reg query HKU\%%#\Software %nul% && ( +call set "loadedsids=%%loadedsids%% %%#" +) || ( +set failedtoload=1 ) ) - ) ) -exit /b -::======================================================================================================================================== +::========================== -:: This code is used to modify the timestamp value of sppc dll file in order to change checksums -:: It's done to lower the potential false positive detection by antivirus's. On each install, it will install a unique sppc dll file +:: Clear the vNext/shared/device license blocks which may prevent ohook activation -:oh_extractdll +rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% -set b= -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1]);" %nul2% | find /i "Error found" %nul1% && set hasherror=1 -exit /b +for %%x in (15 16) do ( +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% -:hexedit: -# Use a MemoryStream to perform operations on the bytes -$MemoryStream = New-Object System.IO.MemoryStream -$Writer = New-Object System.IO.BinaryWriter($MemoryStream) -$Writer.Write($bytes) +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\%%x.0\Licensing\" %nul% +) +) +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +) -# Define dynamic assembly, module, and type -$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) -$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) +:: Clear SharedComputerLicensing for office +:: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation + +if not defined scaIsNeeded ( +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +) + +:: Clear device-based-licensing +:: https://learn.microsoft.com/deployoffice/device-based-licensing + +for /f %%# in ('reg query "%o16c2r_reg%\Configuration" /f *.DeviceBasedLicensing %nul6% ^| findstr REG_') do reg delete "%o16c2r_reg%\Configuration" /v %%# /f %nul% + +:: Remove OEM registry key +:: https://support.microsoft.com/office/office-repeatedly-prompts-you-to-activate-on-a-new-pc-a9a6b05f-f6ce-4d1f-8d49-eb5007b64ba1 + +for %%# in (15 16) do ( +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f /reg:32 %nul% +) + +reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\59a52881-a989-479d-af46-f275c6370663" /f %nul% + +echo Clearing Office License Blocks [Successfully cleared from all %counter% user accounts] + +::========================== + +:: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." +:: Resiliency registry entry can skip this check + +if defined o16c2r if defined officeact ( +reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% +reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +reg unload HKU\DEF_TEMP %nul% +reg query HKU\DEF_TEMP %nul% && set failedtounload=1 + +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% +reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +) +echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +) + +::========================== + +:: Unload the loaded useraccounts registry + +for %%# in (%loadedsids%) do ( +reg unload HKU\%%# %nul% +reg query HKU\%%# %nul% && set failedtounload=1 +) + +if defined failedtoload ( +set error=1 +call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) + +if defined failedtounload ( +set error=1 +call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) + +exit /b + +::======================================================================================================================================== + +:: Uninstall other / grace Keys + +:oh_uninstkey + +set upk_result=0 +call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 + +if "%_actprojvis%"=="1" ( +set _allactid= +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) else ( +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) + +for %%# in (%apps%) do ( +echo "%_allactid%" | find /i "%%#" %nul1% || ( + +if %_wmic% EQU 1 wmic path %spp% where ID='%%#' call UninstallProductKey %nul% +if %_wmic% EQU 0 %psc% "$null=([WMI]'%spp%=''%%#''').UninstallProductKey()" %nul% + +if !errorlevel!==0 ( +set upk_result=1 +) else ( +set error=1 +set upk_result=2 +) +) +) + +if defined officeact if not %upk_result%==0 echo: +if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] +if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" +exit /b + +::======================================================================================================================================== + +:: Refresh Windows Insider Preview Licenses +:: It required in Insider versions otherwise office may not activate + +:oh_licrefresh + +if exist "%SysPath%\spp\store_test\2.0\tokens.dat" ( +%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if !errorlevel! NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +) +exit /b + +::======================================================================================================================================== + +:: Check running office apps and notify user + +:oh_checkapps + +set checkapps= +set checknames= +for /f "tokens=1" %%i in ('tasklist ^| findstr /I ".exe" %nul6%') do (set "checkapps=!checkapps! -%%i-") + +for %%# in ( +Access_msaccess.exe +Excel_excel.exe +Groove_groove.exe +Lync_lync.exe +OneNote_onenote.exe +Outlook_outlook.exe +PowerPoint_powerpnt.exe +Project_winproj.exe +Publisher_mspub.exe +Visio_visio.exe +Word_winword.exe +Lime_lime.exe +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo !checkapps! | find /i "-%%B-" %nul1% && (if defined checknames (set "checknames=!checknames! %%A") else (set "checknames=%%A")) +) +) +exit /b + +::======================================================================================================================================== + +:: 1st column = Office version number +:: 2nd column = Activation ID +:: 3rd column = Generic key. Preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: 4th column = Last part of license description +:: 5th column = Edition +:: Separator = "_" + +:ohookdata + +set f= +for %%# in ( +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9MF9G-CN32B-HV7XT-9XJ8T-9K%f%VF4_MAK___________AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT889-MBH4X-8MD4H-X8R2D-WQ%f%HF8_Retail________ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3N36-YCHDK-XYWBG-KYQVV-BD%f%TJ2_MAK___________ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_BMK4W-6N88B-BP9QR-PHFCK-MG%f%7GF_Retail________GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN84D-7HCWY-FTCBK-JMXWM-HT%f%7GJ_MAK___________GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail +15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YWD4R-CNKVT-VG8VJ-9333B-RC%f%W9F_Subscription__HomeBusinessRetail +15_f2de350d-3028-410a-bfae-283e00b44d0e_6WW3N-BDGM9-PCCHD-9QPP9-P3%f%4QG_Subscription__HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_RV7NQ-HY3WW-7CKWH-QTVMW-29%f%VHC_Retail________InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_C4TGN-QQW6Y-FYKXC-6WJW7-X7%f%3VG_MAK___________InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY_PrepidBypass__LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N42BF-CBY9F-W2C7R-X397X-DY%f%FQW_PrepidBypass__LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_89P23-2NK2R-JXM2M-3Q8R8-BW%f%M3Y_Retail________LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_3WKCD-RN489-4M7XJ-GJ2GQ-YB%f%FQ6_MAK___________LyncVolume +15_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_2YNYQ-FQMVG-CB8KW-6XKYD-M7%f%RRJ_MAK___________MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%FF4_Bypass________OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_3KXXQ-PVN2C-8P7YY-HCV88-GV%f%GQ6_Retail________OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_JDMWF-NJC7B-HRCHY-WFT8G-BP%f%XD9_MAK___________OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_9N4RQ-CF8R2-HBVCB-J3C9V-94%f%P4D_Retail________OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_HNG29-GGWRG-RFC8C-JTFP4-2J%f%9FH_MAK___________OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_9CYB3-NFMRW-YFDG6-XC7TF-BY%f%36J_OEM-Perp______PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_2NCQJ-MFRMH-TXV83-J7V4C-RV%f%RWC_Retail________PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_HVMN2-KPHQH-DVQMK-7B3CM-FG%f%BFC_Retail________PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_47DKN-HPJP7-RF9M3-VCYT2-TM%f%Q4G_MAK___________PowerPointVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_N3QMM-GKDT3-JQGX6-7X3MQ-4G%f%BG3_Retail________ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_QKHNX-M9GGH-T3QMW-YPK4Q-QR%f%P9V_MAK___________ProPlusVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%TXD_OEM-Perp______ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_MBQBN-CQPT6-PXRMC-TYJFR-3C%f%8MY_Retail________ProfessionalRetail +15_2f72340c-b555-418d-8b46-355944fe66b8_WPY8N-PDPY4-FC7TF-KMP7P-KW%f%YFY_Subscription__ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_WFCT2-NBFQ7-JD7VV-MFJX6-6F%f%2CM_MAK___________ProjectProVolume +15_58d95b09-6af6-453d-a976-8ef0ae0316b1_NTHQT-VKK6W-BRB87-HV346-Y9%f%6W8_Subscription__ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_3CNQX-T34TY-99RH4-C4YD2-KW%f%YGV_MAK___________ProjectStdVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_TWNCJ-YR84W-X7PPF-6DPRP-D6%f%7VC_Retail________PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_DJPHV-NCJV6-GWPT6-K26JX-C7%f%GX6_MAK___________PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W_PrepidBypass__SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_V6VWN-KC2HR-YYDD6-9V7HQ-7T%f%7VP_Retail________StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_9TN6B-PCYH4-MCVDQ-KT83C-TM%f%Q7T_MAK___________StandardVolume +15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NVK2G-2MY4G-7JX2P-7D6F2-VF%f%QBR_Subscription__VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_YN7CF-XRH6R-CGKRY-GKPV3-BG%f%7WF_MAK___________VisioProVolume +15_980f9e3e-f5a8-41c8-8596-61404addf677_NCRB7-VP48F-43FYY-62P3R-36%f%7WK_Subscription__VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_RX63Y-4NFK2-XTYC8-C6B3W-YP%f%XPJ_MAK___________VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_NB77V-RPFQ6-PMMKQ-T87DV-M4%f%D84_Retail________WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume +:: Office 365 - 15.0 version +15_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV_PrepidBypass__AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_JJ2Y4-N8KM3-Y8KY3-Y22FR-R3%f%KVK_MAK___________AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_RKJBN-VWTM2-BDKXX-RKQFD-JT%f%YQ2_Retail________ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FVGNR-X82B2-6PRJM-YT4W7-8H%f%V36_MAK___________ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM6FM-NVF78-KV9PM-F36B8-D9%f%MXD_Retail________HomeBusinessRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PNPRV-F2627-Q8JVC-3DGR9-WT%f%YRK_Retail________HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YWD4R-CNKVT-VG8VJ-9333B-RC%f%3B8_Retail________HomeStudentVNextRetail +16_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_FMTQQ-84NR8-2744R-MXF4P-PG%f%YR3_MAK___________MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM_Bypass________OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_FXF6F-CNC26-W643C-K6KB7-6X%f%XW3_Retail________OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_9TYVN-D76HK-BVMWT-Y7G88-9T%f%PPV_MAK___________OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_7N4KG-P2QDH-86V9C-DJFVF-36%f%9W9_Retail________OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_7QPNR-3HFDG-YP6T9-JQCKQ-KK%f%XXC_MAK___________OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_9CYB3-NFMRW-YFDG6-XC7TF-BY%f%36J_OEM-Perp______PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_FT7VF-XBN92-HPDJV-RHMBY-6V%f%KBF_Retail________PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_N7GCB-WQT7K-QRHWG-TTPYD-7T%f%9XF_Retail________PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_X3RT9-NDG64-VMK2M-KQ6XY-DP%f%FGV_MAK___________PowerPointVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_GM43N-F742Q-6JDDK-M622J-J8%f%GDV_Retail________ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_FNVK8-8DVCJ-F7X3J-KGVQB-RC%f%2QY_MAK___________ProPlusVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%TXD_OEM-Perp______ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_NXFTK-YD9Y7-X9MMJ-9BWM6-J2%f%QVH_Retail________ProfessionalRetail +16_2f72340c-b555-418d-8b46-355944fe66b8_WPY8N-PDPY4-FC7TF-KMP7P-KW%f%YFY_Subscription__ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_PKC3N-8F99H-28MVY-J4RYY-CW%f%GDH_MAK___________ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_JBNPH-YF2F7-Q9Y29-86CTG-C9%f%YGV_MAKC2R________ProjectProXVolume +16_58d95b09-6af6-453d-a976-8ef0ae0316b1_NTHQT-VKK6W-BRB87-HV346-Y9%f%6W8_Subscription__ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%G93_MAK___________ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_N3W2Q-69MBT-27RD9-BH8V3-JT%f%2C8_MAKC2R________ProjectStdXVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_WKWND-X6G9G-CDMTV-CPGYJ-6M%f%VBF_Retail________PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_9QVN2-PXXRX-8V4W8-Q7926-TJ%f%GD8_MAK___________PublisherVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY_PrepidBypass__SkypeServiceBypassRetail +16_971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY_PrepidBypass__SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_PBJ79-77NY4-VRGFG-Y8WYC-CK%f%CRC_Retail________SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_DMTCJ-KNRKR-JV8TQ-V2CR2-VF%f%TFH_MAK___________SkypeforBusinessVolume +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_2FPWN-4H6CM-KD8QQ-8HCHC-P9%f%XYW_Retail________StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_WHGMQ-JNMGT-MDQVF-WDR69-KQ%f%BWC_MAK___________StandardVolume +16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NVK2G-2MY4G-7JX2P-7D6F2-VF%f%QBR_Subscription__VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_NRKT9-C8GP2-XDYXQ-YW72K-MG%f%92B_MAK___________VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_G98Q2-B6N77-CFH9J-K824G-XQ%f%CC4_MAKC2R________VisioProXVolume +16_980f9e3e-f5a8-41c8-8596-61404addf677_NCRB7-VP48F-43FYY-62P3R-36%f%7WK_Subscription__VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_XNCJB-YY883-JRW64-DPXMX-JX%f%CR6_MAK___________VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_B2HTN-JPH8C-J6Y6V-HCHKB-43%f%MGT_MAKC2R________VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_P8K82-NQ7GG-JKY8T-6VHVY-88%f%GGD_Retail________WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_YHMWC-YN6V9-WJPXD-3WQKP-TM%f%VCV_MAK___________WordVolume +:: Office 2019 +16_518687bd-dc55-45b9-8fa6-f918e1082e83_WRYJ6-G3NP7-7VH94-8X7KP-JB%f%7HC_Retail________Access2019Retail +16_385b91d6-9c2c-4a2e-86b5-f44d44a48c5f_6FWHX-NKYXK-BW34Q-7XC9F-Q9%f%PX7_MAK-AE________Access2019Volume +16_22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FGQNJ-JWJCG-7Q8MG-RMRGJ-9T%f%QVF_PrepidBypass__AccessRuntime2019Retail +16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KBPNW-64CMM-8KWCB-23F44-8B%f%7HM_Retail________Excel2019Retail +16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8NT4X-GQMCK-62X4P-TW6QP-YK%f%PYF_MAK-AE________Excel2019Volume +16_7fe09eef-5eed-4733-9a60-d7019df11cac_QBN2Y-9B284-9KW78-K48PB-R6%f%2YT_Retail________HomeBusiness2019Retail +16_4539aa2c-5c31-4d47-9139-543a868e5741_XNWPM-32XQC-Y7QJC-QGGBV-YY%f%7JK_Retail________HomeStudent2019Retail +16_20e359d5-927f-47c0-8a27-38adbdd27124_WR43D-NMWQQ-HCQR2-VKXDR-37%f%B7H_Retail________Outlook2019Retail +16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%QYB_MAK-AE________Outlook2019Volume +16_2747b731-0f1f-413e-a92d-386ec1277dd8_NMBY8-V3CV7-BX6K6-2922Y-43%f%M7T_Retail________Personal2019Retail +16_7e63cc20-ba37-42a1-822d-d5f29f33a108_HN27K-JHJ8R-7T7KK-WJYC3-FM%f%7MM_Retail________PowerPoint2019Retail +16_13c2d7bf-f10d-42eb-9e93-abf846785434_29GNM-VM33V-WR23K-HG2DT-KT%f%QYR_MAK-AE________PowerPoint2019Volume +16_a3072b8f-adcc-4e75-8d62-fdeb9bdfae57_BN4XJ-R9DYY-96W48-YK8DM-MY%f%7PY_Retail________ProPlus2019Retail +16_6755c7a7-4dfe-46f5-bce8-427be8e9dc62_T8YBN-4YV3X-KK24Q-QXBD7-T3%f%C63_MAK-AE________ProPlus2019Volume +16_1717c1e0-47d3-4899-a6d3-1022db7415e0_9NXDK-MRY98-2VJV8-GF73J-TQ%f%9FK_Retail________Professional2019Retail +16_0d270ef7-5aaf-4370-a372-bc806b96adb7_JDTNC-PP77T-T9H2W-G4J2J-VH%f%8JK_Retail________ProjectPro2019Retail +16_d4ebadd6-401b-40d5-adf4-a5d4accd72d1_TBXBD-FNWKJ-WRHBD-KBPHH-XD%f%9F2_MAK-AE________ProjectPro2019Volume +16_bb7ffe5f-daf9-4b79-b107-453e1c8427b5_R3JNT-8PBDP-MTWCK-VD2V8-HM%f%KF9_Retail________ProjectStd2019Retail +16_fdaa3c03-dc27-4a8d-8cbf-c3d843a28ddc_RBRFX-MQNDJ-4XFHF-7QVDR-JH%f%XGC_MAK-AE________ProjectStd2019Volume +16_f053a7c7-f342-4ab8-9526-a1d6e5105823_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%B9D_Retail________Publisher2019Retail +16_40055495-be00-444e-99cc-07446729b53e_K8F2D-NBM32-BF26V-YCKFJ-29%f%Y9W_MAK-AE________Publisher2019Volume +16_b639e55c-8f3e-47fe-9761-26c6a786ad6b_JBDKF-6NCD6-49K3G-2TV79-BK%f%P73_Retail________SkypeforBusiness2019Retail +16_15a430d4-5e3f-4e6d-8a0a-14bf3caee4c7_9MNQ7-YPQ3B-6WJXM-G83T3-CB%f%BDK_MAK-AE________SkypeforBusiness2019Volume +16_f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK_PrepidBypass__SkypeforBusinessEntry2019Retail +16_fdfa34dd-a472-4b85-bee6-cf07bf0aaa1c_NDGVM-MD27H-2XHVC-KDDX2-YK%f%P74_Retail________Standard2019Retail +16_beb5065c-1872-409e-94e2-403bcfb6a878_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%33M_MAK-AE________Standard2019Volume +16_a6f69d68-5590-4e02-80b9-e7233dff204e_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%P79_Retail________VisioPro2019Retail +16_f41abf81-f409-4b0d-889d-92b3e3d7d005_33YF4-GNCQ3-J6GDM-J67P3-FM%f%7QP_MAK-AE________VisioPro2019Volume +16_4a582021-18c2-489f-9b3d-5186de48f1cd_263WK-3N797-7R437-28BKG-3V%f%8M8_Retail________VisioStd2019Retail +16_933ed0e3-747d-48b0-9c2c-7ceb4c7e473d_BGNHX-QTPRJ-F9C9G-R8QQG-8T%f%27F_MAK-AE________VisioStd2019Volume +16_72cee1c2-3376-4377-9f25-4024b6baadf8_JXR8H-NJ3MK-X66W8-78CWD-QR%f%VR2_Retail________Word2019Retail +16_fe5fe9d5-3b06-4015-aa35-b146f85c4709_9F36R-PNVHH-3DXGQ-7CD2H-R9%f%D3V_MAK-AE________Word2019Volume +:: Office 2021 +16_f634398e-af69-48c9-b256-477bea3078b5_P286B-N3XYP-36QRQ-29CMP-RV%f%X9M_Retail________Access2021Retail +16_ae17db74-16b0-430b-912f-4fe456e271db_JBH3N-P97FP-FRTJD-MGK2C-VF%f%WG6_MAK-AE________Access2021Volume +16_fb099c19-d48b-4a2f-a160-4383011060aa_V6QFB-7N7G9-PF7W9-M8FQM-MY%f%8G9_Retail________Excel2021Retail +16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WNYR4-KMR9H-KVC8W-7HJ8B-K7%f%9DQ_MAK-AE________Excel2021Volume +16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM99N-4MMD8-DQCGJ-VMYFY-R6%f%3YK_Subscription__HomeBusiness2021Retail +16_2f258377-738f-48dd-9397-287e43079958_N3CWD-38XVH-KRX2Y-YRP74-6R%f%BB2_Subscription__HomeStudent2021Retail +16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB2TQ-3Y79C-77C6M-QMY7H-7Q%f%Y8P_Retail________OneNote2021Retail +16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4NCWR-9V92Y-34VB2-RPTHR-YT%f%GR7_Retail________Outlook2021Retail +16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ9MJ-QYN6B-67PX9-GYFVY-QJ%f%6TB_MAK-AE________Outlook2021Volume +16_8f89391e-eedb-429d-af90-9d36fbf94de6_RRRYB-DN749-GCPW4-9H6VK-HC%f%HPT_Retail________Personal2021Retail +16_c9bf5e86-f5e3-4ac6-8d52-e114a604d7bf_3KXXQ-PVN2C-8P7YY-HCV88-GV%f%M96_Retail1_______PowerPoint2021Retail +16_716f2434-41b6-4969-ab73-e61e593a3875_39G2N-3BD9C-C4XCM-BD4QG-FV%f%YDY_MAK-AE________PowerPoint2021Volume +16_c2f04adf-a5de-45c5-99a5-f5fddbda74a8_8WXTP-MN628-KY44G-VJWCK-C7%f%PCF_Retail________ProPlus2021Retail +16_3f180b30-9b05-4fe2-aa8d-0c1c4790f811_RNHJY-DTFXW-HW9F8-4982D-MD%f%2CW_MAK-AE1_______ProPlus2021Volume +16_96097a68-b5c5-4b19-8600-2e8d6841a0db_JRJNJ-33M7C-R73X3-P9XF7-R9%f%F6M_MAK-AE________ProPlusSPLA2021Volume +16_711e48a6-1a79-4b00-af10-73f4ca3aaac4_DJPHV-NCJV6-GWPT6-K26JX-C7%f%PBG_Retail________Professional2021Retail +16_3747d1d5-55a8-4bc3-b53d-19fff1913195_QKHNX-M9GGH-T3QMW-YPK4Q-QR%f%WMV_Retail________ProjectPro2021Retail +16_17739068-86c4-4924-8633-1e529abc7efc_HVC34-CVNPG-RVCMT-X2JRF-CR%f%7RK_MAK-AE1_______ProjectPro2021Volume +16_4ea64dca-227c-436b-813f-b6624be2d54c_2B96V-X9NJY-WFBRC-Q8MP2-7C%f%HRR_Retail________ProjectStd2021Retail +16_84313d1e-47c8-4e27-8ced-0476b7ee46c4_3CNQX-T34TY-99RH4-C4YD2-KW%f%6WH_MAK-AE________ProjectStd2021Volume +16_b769b746-53b1-4d89-8a68-41944dafe797_CDNFG-77T8D-VKQJX-B7KT3-KK%f%28V_Retail1_______Publisher2021Retail +16_a0234cfe-99bd-4586-a812-4f296323c760_2KXJH-3NHTW-RDBPX-QFRXJ-MT%f%GXF_MAK-AE________Publisher2021Volume +16_c3fb48b2-1fd4-4dc8-af39-819edf194288_DVBXN-HFT43-CVPRQ-J89TF-VM%f%MHG_Retail________SkypeforBusiness2021Retail +16_6029109c-ceb8-4ee5-b324-f8eb2981e99a_R3FCY-NHGC7-CBPVP-8Q934-YT%f%GXG_MAK-AE________SkypeforBusiness2021Volume +16_9e7e7b8e-a0e7-467b-9749-d0de82fb7297_HXNXB-J4JGM-TCF44-2X2CV-FJ%f%VVH_Retail________Standard2021Retail +16_223a60d8-9002-4a55-abac-593f5b66ca45_2CJN4-C9XK2-HFPQ6-YH498-82%f%TXH_MAK-AE________Standard2021Volume +16_b99ba8c4-e257-4b70-a31a-8bd308ce7073_BQWDW-NJ9YF-P7Y79-H6DCT-MK%f%Q9C_MAK-AE________StandardSPLA2021Volume +16_814014d3-c30b-4f63-a493-3708e0dc0ba8_T6P26-NJVBR-76BK8-WBCDY-TX%f%3BC_Retail________VisioPro2021Retail +16_c590605a-a08a-4cc7-8dc2-f1ffb3d06949_JNKBX-MH9P4-K8YYV-8CG2Y-VQ%f%2C8_MAK-AE________VisioPro2021Volume +16_16d43989-a5ef-47e2-9ff1-272784caee24_89NYY-KB93R-7X22F-93QDF-DJ%f%6YM_Retail________VisioStd2021Retail +16_d55f90ee-4ba2-4d02-b216-1300ee50e2af_BW43B-4PNFP-V637F-23TR2-J4%f%7TX_MAK-AE________VisioStd2021Volume +16_fb33d997-4aa3-494e-8b58-03e9ab0f181d_VNCC4-CJQVK-BKX34-77Y8H-CY%f%XMR_Retail________Word2021Retail +16_0c728382-95fb-4a55-8f12-62e605f91727_BJG97-NW3GM-8QQQ7-FH76G-68%f%6XM_MAK-AE________Word2021Volume +:: Office 2024 +16_8fdb1f1e-663f-4f2e-8fdb-7c35aee7d5ea_GNXWX-DF797-B2JT3-82W27-KH%f%PXT_MAK-AE________ProPlus2024Volume-Preview +16_33b11b14-91fd-4f7b-b704-e64a055cf601_X86XX-N3QMW-B4WGQ-QCB69-V2%f%6KW_MAK-AE________ProjectPro2024Volume-Preview +16_eb074198-7384-4bdd-8e6c-c3342dac8435_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%QT7_MAK-AE________VisioPro2024Volume-Preview +16_e563d108-7b0e-418a-8390-20e1d133d6bb_P6NMW-JMTRC-R6MQ6-HH3F2-BT%f%HKB_Retail________Access2024Retail +16_f748e2f7-5951-4bc2-8a06-5a1fbe42f5f4_CXNJT-98HPP-92HX7-MX6GY-2P%f%VFR_MAK-AE________Access2024Volume +16_f3a5e86a-e4f8-4d88-8220-1440c3bbcefa_82CNJ-W82TW-BY23W-BVJ6W-W4%f%8GP_Retail________Excel2024Retail +16_523fbbab-c290-460d-a6c9-48e49709cb8e_7Y287-9N2KC-8MRR3-BKY82-2D%f%QRV_MAK-AE________Excel2024Volume +16_885f83e0-5e18-4199-b8be-56697d0debfb_N69X7-73KPT-899FD-P8HQ4-QG%f%TP4_Retail________Home2024Retail +16_acd4eccb-ff89-4e6a-9350-d2d56276ec69_PRKQM-YNPQR-77QT6-328D7-BD%f%223_Retail________HomeBusiness2024Retail +16_6f5fd645-7119-44a4-91b4-eccfeeb738bf_2CFK4-N44KG-7XG89-CWDG6-P7%f%P27_Retail________Outlook2024Retail +16_9a1e1bac-2d8b-4890-832f-0a68b27c16e0_NQPXP-WVB87-H3MMB-FYBW2-9Q%f%FPB_MAK-AE________Outlook2024Volume +16_da9a57ae-81a8-4cb3-b764-5840e6b5d0bf_CT2KT-GTNWH-9HFGW-J2PWJ-XW%f%7KJ_Retail________PowerPoint2024Retail +16_eca0d8a6-e21b-4622-9a87-a7103ff14012_RRXFN-JJ26R-RVWD2-V7WMP-27%f%PWQ_MAK-AE________PowerPoint2024Volume +16_295dcc21-151a-4b4d-8f50-2b627ea197f6_GNJ6P-Y4RBM-C32WW-2VJKJ-MT%f%HKK_Retail________ProjectPro2024Retail +16_2141d341-41aa-4e45-9ca1-201e117d6495_WNFMR-HK4R7-7FJVM-VQ3JC-76%f%HF6_MAK-AE1_______ProjectPro2024Volume +16_ead42f74-817d-45b4-af6b-3beeb36ba650_C2PNM-2GQFC-CY3XR-WXCP4-GX%f%3XM_Retail________ProjectStd2024Retail +16_4b6d9b9b-c16e-429d-babe-8bb84c3c27d6_F2VNW-MW8TT-K622Q-4D96H-PW%f%J8X_MAK-AE________ProjectStd2024Volume +16_db249714-bb54-4422-8c78-2cc8d4c4a19f_VWCNX-7FKBD-FHJYG-XBR4B-88%f%KC6_Retail________ProPlus2024Retail +16_d77244dc-2b82-4f0a-b8ae-1fca00b7f3e2_4YV2J-VNG7W-YGTP3-443TK-TF%f%8CP_MAK-AE1_______ProPlus2024Volume +16_3046a03e-2277-4a51-8ccd-a6609eae8c19_XKRBW-KN2FF-G8CKY-HXVG6-FV%f%Y2V_MAK-AE________SkypeforBusiness2024Volume +16_44a07f51-8263-4b2f-b2a5-70340055c646_GVG6N-6WCHH-K2MVP-RQ78V-3J%f%7GJ_MAK-AE1_______Standard2024Volume +16_282d8f34-1111-4a6f-80fe-c17f70dec567_HGRBX-N68QF-6DY8J-CGX4W-XW%f%7KP_Retail________VisioPro2024Retail +16_4c2f32bf-9d0b-4d8c-8ab1-b4c6a0b9992d_GBNHB-B2G3Q-G42YB-3MFC2-7C%f%JCX_MAK-AE________VisioPro2024Volume +16_8504167d-887a-41ae-bd1d-f849d834352d_VBXPJ-38NR3-C4DKF-C8RT7-RG%f%HKQ_Retail________VisioStd2024Retail +16_0978336b-5611-497c-9414-96effaff4938_YNFTY-63K7P-FKHXK-28YYT-D3%f%2XB_MAK-AE________VisioStd2024Volume +16_f6b24e61-6aa7-4fd2-ab9b-4046cee4230a_XN33R-RP676-GMY2F-T3MH7-GC%f%VKR_Retail________Word2024Retail +16_06142aa2-e935-49ca-af5d-08069a3d84f3_WD8CQ-6KNQM-8W2CX-2RT63-KK%f%3TP_MAK-AE________Word2024Volume +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +if %1==getinfo if not defined key ( +if %oVer%==%%A if /i "%2"=="%%E" ( +set key=%%C +set _actid=%%B +set _allactid=!_allactid! %%B +set _lic=%%D +if %oVer%==16 (echo "%%D" | find /i "Subscription" %nul% && set _sublic=1) +) +) + +if %1==getmsiprod if %oVer%==%%A ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) +) +) +) + +if %1==findactivated if %oVer%==%%A ( +echo "!_FsortIds!" | find /i "-%%E-" %nul% && ( +set actiProds%oVer%=!actiProds%oVer%! -%%E- +) +) + +) +) +exit /b + +::======================================================================================================================================== + +:: This code is used to modify the timestamp value of sppc dll file in order to change checksums +:: It's done to lower the potential false positive detection by antivirus's. On each install, it will install a unique sppc dll file + +:oh_extractdll + +set b= +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1]);" %nul2% | find /i "Error found" %nul1% && set hasherror=1 +exit /b + +:hexedit: +# Use a MemoryStream to perform operations on the bytes +$MemoryStream = New-Object System.IO.MemoryStream +$Writer = New-Object System.IO.BinaryWriter($MemoryStream) +$Writer.Write($bytes) + +# Define dynamic assembly, module, and type +$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) +$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) $TypeBuilder = $ModuleBuilder.DefineType(0) # Define P/Invoke method @@ -2822,12 +3345,12 @@ $MemoryStream.Close() ::======================================================================================================================================== :: :: This below blocks of text is encoded in base64 format -:: The blocks in labels "sppc64.dll" and "sppc32.dll" contains below files +:: The blocks in labels "sppc32.dll" and "sppc64.dll" contains below files :: -:: e6ac83560c19ec7eb868c50ea97ea0ed5632a397a9f43c17e24e6de4a694d118 *sppc32.dll -:: c6df24deef2e83813dee9c81ddd9793a3d60c117a4e8e231b82e32b3192927e7 *sppc64.dll +:: 09865ea5993215965e8f27a74b8a41d15fd0f60f5f404cb7a8b3c7757acdab02 *sppc32.dll +:: 393a1fa26deb3663854e41f2b687c188a9eacd87b23f17ea09422c4715cb5a9f *sppc64.dll :: -:: The files are encoded in base64 to make MAS AIO version. +:: The files are encoded in base64 to make AIO version. :: :: mass grave[.]dev/ohook :: Here you can find the files source code and info on how to rebuild the identical sppc.dll files @@ -2838,28 +3361,35 @@ $MemoryStream.Close() :: For any further question, feel free to contact us on mass grave[.]dev/contactus :: ::======================================================================================================================================== - -:: Replace - with A and _ with a before base64 conversion +:: +:: If you want to use a different sppc.dll or without base64 format, then create a folder named "BIN" where this script is located and +:: place these two files in that "BIN" folder. sppc32.dll, sppc64.dll +:: Script will auto pick that instead of using the below from base64 section. You can also delete the below code in that case. +:: +::======================================================================================================================================== +:: +:: Replace "-" with "A" and "_" with "a" before base64 conversion +:: It was changed to prevent antiviruses from detecting and flagging base64 encoding :sppc32.dll: TVqQ--M----E----//8--Lg---------Q-----------------------------------------------g-----4fug4-t-nNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g_W4gRE9TIG1vZGUuDQ0KJ---------BQRQ--T-EH-MDc0GQ----------O-- -DiML-QIo--I----e---------B-----Q----------C-_g-Q-----g--B-----E----G----------CQ----B---i9M---I-Q-E--C---B------E---E--------B------Q---jR----Bg---Y-Q---H---HgD-------------------------I---BQ--------- +DiML-QIo--I----e--------RxE----Q----------C-_g-Q-----g--B-----E----G----------CQ----B---+dY---I-Q-E--C---B------E---E--------B------Q---jR----Bg---Y-Q---H---HgD-------------------------I---BQ--------- ----------------------------------------------------------BsY---H------------------------------------C50ZXh0----c-E----Q-----g----Q------------------C---G-ucmRhdGE--Bg-----I-----I----G---------------- --B---B-LmVoX2ZyYW2------D-----C----C-------------------Q---QC5lZGF0YQ--jR----B-----Eg----o------------------E---E-u_WRhdGE--BgB----Y-----I----c------------------B---D-LnJzcmM---B4-w---H-----E----Hg-- ----------------Q---wC5yZWxvYw--F-----C------g---CI------------------E---EI----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------LgB----wgw-VYnlVlONRfCD7DDHRf------ -iUQkFI1F9IlEJBCLRQzHRCQM-----IlEJ-SLRQjHRCQI-CC-_okEJMdF9-----Do-gE--Is1eGC-_oPsGIX-icOLRfB0CokEJDHb/9ZR6zKLVfTHRCQECiC-_okEJIlUJ-j/FYBggGqD7-yFwItF8IkEJHQK/9_7-Q---FLr-//WUI1l+InYW15dw1WJ5VdWU4PsPItF -GIt1HIlEJBCLRRSJdCQUiUQkDItFEIlEJ-iLRQyJRCQEi0UIiQQk6Hw----xyYPsGInHhcB1XItFGDkIdlVr2SiLBgHYg3gQ-HRFiUQkBItFCIlN5IkEJOj7/v//i03khcB1L-Mex0MQ-Q---MdDF-----DHQxg-----x0Mc-----MdDI-----DHQyQ-----QeukjWX0 -ifhbXl9dwhg-kP8lcGC-_pCQ/yVsYIBqkJD/////-----P////8----------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------FWJ5VZTjUXwg+wwx0Xw-----IlEJBSNRfSJ +RCQQi0UMx0QkD-----CJRCQEi0UIx0QkC--ggGqJBCTHRfQ-----6-oB--CLNXhggGqD7BiFwInDi0Xwd-qJBCQx2//WUesyi1X0x0QkB-oggGqJBCSJVCQI/xW-YIBqg+wMhcCLRfCJBCR0Cv/WuwE---BS6wP/1lCNZfiJ2FteXcNVieVXVlOD7DyLRRiLdRyJRCQQ +i0UUiXQkFIlEJ-yLRRCJRCQIi0UMiUQkBItFCIkEJOiE----McmD7BiJx4X-dVyLRRg5CHZV_9koiwYB2IN4E-B0RYlEJ-SLRQiJTeSJBCTo+/7//4tN5IX-dSwDHsdDE-E---DHQxQ-----x0MY-----MdDH-----DHQy------x0Mk-----EHrpI1l9In4W15fXcIY +-LgB----wgw-kP8lcGC-_pCQ/yVsYIBqkJD/////-----P////8----------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------TgBh-G0-ZQ---Ec-cgBh-GM-ZQ------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------U----------F6Ug-Bf-gBGwwEBIgB---Q----H----ODf//8I---------CQ----w---- -1N///50-----QQ4IhQJCDQVIhgODB-KPw0HGQcUMB-Qo----W----Eng//+q-----EEOCIUCQg0FRocDhgSDBQKbw0HGQcdBxQwEB--------------------------------------------------------------------------------------------------- +-----------------------------------------------------------------------------------------------------------------------------------U----------F6Ug-Bf-gBGwwEBIgB---k----H----ODf//+d-----EEOCIUCQg0FSIYD +gwQCj8NBxkHFD-QEK----EQ---BV4P//qg----BBDgiF-kINBU_H-4YEgwUCm8NBxkHHQcUMB-QQ----c----NPg//8I------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------D-3NBk-----MZC---B----Qw---EM----oQ---NEE--EBC--DPQg--70I---VD---pQw--XUM--KFD--DpQw--F0Q--DVE--BnR---nUQ--ONE---tRQ--YUU--J9F--DTRQ--DUY--DtG--BxRg--r0Y--M9G--D7Rg--pR---FFH--BvRw-- +------------------D-3NBk-----MZC---B----Qw---EM----oQ---NEE--EBC--DPQg--70I---VD---pQw--XUM--KFD--DpQw--F0Q--DVE--BnR---nUQ--ONE---tRQ--YUU--J9F--DTRQ--DUY--DtG--BxRg--r0Y--M9G--D7Rg--nR---FFH--BvRw-- n0c--NNH---RS---TUg--G9I--ClS---zUg---VJ--BBSQ--bUk--KdJ--C7SQ--+0k--DlK--BPSg--dUo--J1K--DTSg--B0s--D1L--BpSw--pUs--ONL---NT---OUw--IlM--DRT---EU0--FlN--CjTQ--8U0--BtO--BHTg--h04--LtO--DnTg--K08--FtP --C1Tw--608--CdQ--BdU---4kI--P1C---_Qw--RkM--IJD--DIQw---0Q--ClE--BRR---hUQ--MNE---LRQ--SkU--INF--C8RQ--80U--CdG--BZRg--k0Y--MJG--DoRg--GUc--DFH--BjRw--ikc--LxH--D1Rw--Mkg--GFI--CNS---vEg--OxI---mSQ-- Wkk--I1J--C0SQ--3kk--B1K--BHSg--ZUo--IxK--C7Sg--8Eo--CVL--BWSw--iks--MdL--D7Sw--Jkw--GRM--CwT---9Ew--DhN--CBTQ--zU0---lO---0Tg--_k4--KRO--DUTg--DE8--EZP--CLTw--008---xQ--BFU---eF-------Q-C--M-B--F--Y- @@ -2894,13 +3424,13 @@ UFBDUy5TTHBWTEFjdGl2YXRlUHJvZHVjd-BTTHBWTEFjdGl2YXRlUHJvZHVjd------------------- Y3RT_3VJbmZvcm1hdGlvbg--3QNMb2NhbEZyZWU-RwFTdHJTdHJOSVc--G----Bg--BzcHBjcy5kbGw----UY---S0VSTkVMMzIuZGxs-----Chg--BTSExXQVBJLmRsb----------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------B-B-----Y--C--------------------B--E----w--C--------------------B--kE--BI----WH---BwD-------------BwDN----FY-UwBf-FY-RQBS-FM-SQBP-E4-XwBJ-E4- -RgBP------C9BO/+---B--M----------w--------------------Q-B--C--------------------f-I---E-UwB0-HI-_QBu-Gc-RgBp-Gw-ZQBJ-G4-ZgBv----W-I---E-M--0-D--OQ-w-DQ-RQ-0----eg-t--E-QwBv-G0-c-Bh-G4-eQBO-GE-bQBl---- +RgBP------C9BO/+---B--U---------BQ--------------------Q-B--C--------------------f-I---E-UwB0-HI-_QBu-Gc-RgBp-Gw-ZQBJ-G4-ZgBv----W-I---E-M--0-D--OQ-w-DQ-RQ-0----eg-t--E-QwBv-G0-c-Bh-G4-eQBO-GE-bQBl---- --BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4------D4-Cw-B-EY-_QBs-GU-R-Bl-HM-YwBy-Gk-c-B0-Gk-bwBu------Bv-Gg-bwBv-Gs-I-BT-F-- -U-BD-------w--g--QBG-Gk-b-Bl-FY-ZQBy-HM-_QBv-G4------D--Lg-z-C4-M--u-D-----q--U--QBJ-G4-d-Bl-HI-bgBh-Gw-TgBh-G0-ZQ---HM-c-Bw-GM------Iw-N--B-Ew-ZQBn-GE-b-BD-G8-c-B5-HI-_QBn-Gg-d----Kk-I--y-D--Mg-z-C-- +U-BD-------w--g--QBG-Gk-b-Bl-FY-ZQBy-HM-_QBv-G4------D--Lg-1-C4-M--u-D-----q--U--QBJ-G4-d-Bl-HI-bgBh-Gw-TgBh-G0-ZQ---HM-c-Bw-GM------Iw-N--B-Ew-ZQBn-GE-b-BD-G8-c-B5-HI-_QBn-Gg-d----Kk-I--y-D--Mg-0-C-- QQBu-G8-bQBh-Gw-bwB1-HM-I-BT-G8-ZgB0-Hc-YQBy-GU-I-BE-GU-d-Bl-HI-_QBv-HI-YQB0-Gk-bwBu-C--QwBv-HI-c-Bv-HI-YQB0-Gk-bwBu----Og-J--E-TwBy-Gk-ZwBp-G4-YQBs-EY-_QBs-GU-bgBh-G0-ZQ---HM-c-Bw-GM-LgBk-Gw-b------- -L--G--E-U-By-G8-Z-B1-GM-d-BO-GE-bQBl------Bv-Gg-bwBv-Gs----0--g--QBQ-HI-bwBk-HU-YwB0-FY-ZQBy-HM-_QBv-G4----w-C4-Mw-u-D--Lg-w----R-----E-VgBh-HI-RgBp-Gw-ZQBJ-G4-ZgBv-------k--Q---BU-HI-YQBu-HM-b-Bh-HQ- +L--G--E-U-By-G8-Z-B1-GM-d-BO-GE-bQBl------Bv-Gg-bwBv-Gs----0--g--QBQ-HI-bwBk-HU-YwB0-FY-ZQBy-HM-_QBv-G4----w-C4-NQ-u-D--Lg-w----R-----E-VgBh-HI-RgBp-Gw-ZQBJ-G4-ZgBv-------k--Q---BU-HI-YQBu-HM-b-Bh-HQ- _QBv-G4-------kE5-Q------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------Q---U----OzBQMHEwfjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +-------Q---U----MzBIMGkwdjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- @@ -2908,31 +3438,32 @@ _QBv-G4-------kE5-Q------------------------------------------------------------- :======================================================================================================================================== -:: Replace - with A and _ with a before base64 conversion +:: Replace "-" with "A" and "_" with "a" before base64 conversion +:: It was changed to prevent antiviruses from detecting and flagging base64 encoding :sppc64.dll: TVqQ--M----E----//8--Lg---------Q-----------------------------------------------g-----4fug4-t-nNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g_W4gRE9TIG1vZGUuDQ0KJ---------BQRQ--ZIYH-MDc0GQ----------P-- -LiIL-gIo--I----e---------B-----Q-----JIx-g-----Q-----g--B----------G----------CQ----B---39----I-Y-E--C---------Q-----------Q--------E--------------Q-----F---I0Q----c---U-E---C---B4-w---D---CQ--------- +LiIL-gIo--I----e--------ExE----Q-----JIx-g-----Q-----g--B----------G----------CQ----B---LeY---I-Y-E--C---------Q-----------Q--------E--------------Q-----F---I0Q----c---U-E---C---B4-w---D---CQ--------- --------------------------------------------------------------------------------iH---Dg------------------------------------udGV4d----H-B----E-----I----E-------------------g--BgLnJkYXRh---g-----C-----C ----Bg------------------Q---QC5wZGF0YQ--J------w-----g----g------------------E---E-ueGRhdGE--CQ-----Q-----I----K------------------B---B-LmVkYXRh--CNE----F-----S----D-------------------Q---QC5pZGF0YQ-- U-E---Bw-----g---B4------------------E---M-ucnNyYw---HgD----g-----Q----g------------------B---D--------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------LgB----w0FUU0iD7EhFMclMjQXpDw--SI1E -JDjHRCQ0-----EiJRCQoSI1EJDRIiUQkIEjHRCQ4-----Oj/----SItMJDhIix1TY---hcBBicR0B//TRTHk6yhEi0QkNEiNF_MP--D/FUNg--BIi0wkOEiFwHQK/9NBv-E---Dr-v/TRIngSIPESFtBXMNBVUFUVVdWU0iD7Dgx9kyLrCSQ----SIusJJg---BMiWwk -IEiJz0iJbCQo6Io---BBicSFwHVEQTl1-HY+SGveKEiLVQBI-dqDeh--dChIifnoIv///4X-dRxI-10-SMdDE-E---BIx0MY-----EjHQy------SP/G67xEieBIg8Q4W15fXUFcQV3DkJCQkJCQkP8lel8--JCQDx+E------D/JXpf--CQk-8fh-------/yVKXw-- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------EFUU0iD7EhFMclMjQXvDw--SI1EJDjHRCQ0 +-----EiJRCQoSI1EJDRIiUQkIEjHRCQ4-----OgF-Q--SItMJDhIix1ZY---hcBBicR0B//TRTHk6yhEi0QkNEiNF_kP--D/FUlg--BIi0wkOEiFwHQK/9NBv-E---Dr-v/TRIngSIPESFtBXMNBVUFUVVdWU0iD7Dgx9kyLrCSQ----SIusJJg---BMiWwkIEiJz0iJ +bCQo6J----BBicSFwHVEQTl1-HY+SGveKEiLVQBI-dqDeh--dChIifnoIv///4X-dRxI-10-SMdDE-E---BIx0MY-----EjHQy------SP/G67xEieBIg8Q4W15fXUFcQV3Du-E---DDkJCQkJCQkP8lel8--JCQDx+E------D/JXpf--CQk-8fh-------/yVKXw-- kJD/JTpf--CQkP//////////----------D//////////w---------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------TgBh-G0-ZQ---Ec-cgBh-GM-ZQ------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------E---Bh----B----GE---jh----R---COE---GRE--BB------------------------- +------------------------------------------------------------------------------------------------------------------------------------E---iB----B---CIE---ExE---x----TEQ--GRE--CB------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------E----BBwM-B4IDM-L----BD-c-DGIIM-dgBn-FU-T--t---------------------------------------------------------------------------------------------------------------------------------------------- +--------------EH-w-HggMw-s----EMBw-MYggwB2-Gc-VQBM-C0----Q---------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------MDc0GQ-----xlI---E---BD----Qw---ChQ---0UQ--QFI--M9S--DvUg--BVM--ClT--BdUw--oVM--OlT---XV---NVQ--GdU ---CdV---41Q--C1V--BhVQ--n1U--NNV---NVg--O1Y--HFW--CvVg--z1Y--PtW--COE---UVc--G9X--CfVw--01c--BFY--BNW---b1g--KVY--DNW---BVk--EFZ--BtWQ--p1k--LtZ--D7WQ--OVo--E9_--B1Wg--nVo--NN_---HWw--PVs--Glb--ClWw-- +--CdV---41Q--C1V--BhVQ--n1U--NNV---NVg--O1Y--HFW--CvVg--z1Y--PtW--CIE---UVc--G9X--CfVw--01c--BFY--BNW---b1g--KVY--DNW---BVk--EFZ--BtWQ--p1k--LtZ--D7WQ--OVo--E9_--B1Wg--nVo--NN_---HWw--PVs--Glb--ClWw-- 41s---1c---5X---iVw--NFc---RXQ--WV0--KNd--DxXQ--G14--Ede--CHXg--u14--Ode---rXw--W18--LVf--DrXw--J2---F1g--DiUg--/VI--BpT--BGUw--glM--MhT---DV---KVQ--FFU--CFV---w1Q---tV--BKVQ--g1U--LxV--DzVQ--J1Y--FlW --CTVg--wlY--OhW---ZVw--MVc--GNX--CKVw--vFc--PVX---yW---YVg--I1Y--C8W---7Fg--CZZ--B_WQ--jVk--LRZ--DeWQ--HVo--Ed_--BlWg--jFo--Lt_--DwWg--JVs--FZb--CKWw--x1s--Ptb---mX---ZFw--LBc--D0X---OF0--IFd--DNXQ-- CV4--DRe--BqXg--pF4--NRe---MXw--Rl8--Itf--DTXw--DG---EVg--B4Y------B--I--w-E--U-Bg-H--g-CQ-K--s-D--N--4-Dw-Q-BE-Eg-T-BQ-FQ-W-Bc-G--Z-Bo-Gw-c-B0-Hg-f-C--IQ-i-CM-J--l-CY-Jw-o-Ck-Kg-r-Cw-LQ-u-C8-M--x-DI- @@ -2966,11 +3497,11 @@ b2dyZXNz-FNQUENTLlNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy DHE------------------MBw--------4n--------------------Bx-------------------McQ-------------------gBTTEdldExpY2Vuc2luZ1N0YXR1c0luZm9ybWF0_W9u--E-U0xHZXRQcm9kdWN0U2t1SW5mb3JtYXRpb24--OgDTG9jYWxGcmVl-FEB U3RyU3RyTklX--Bw----c---c3BwY3MuZGxs----FH---EtFUk5FTDMyLmRsb------oc---U0hMV0FQSS5kbGw----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------E-E----Bg--I--------------------E--Q---D---I-------------- -------E-CQQ--Eg---BYg---H-M-------------H-M0----VgBT-F8-VgBF-FI-UwBJ-E8-TgBf-Ek-TgBG-E8------L0E7/4---E--w---------D--------------------B--E--I-------------------B8-g---QBT-HQ-cgBp-G4-ZwBG-Gk-b-Bl-Ek- +------E-CQQ--Eg---BYg---H-M-------------H-M0----VgBT-F8-VgBF-FI-UwBJ-E8-TgBf-Ek-TgBG-E8------L0E7/4---E-BQ---------F--------------------B--E--I-------------------B8-g---QBT-HQ-cgBp-G4-ZwBG-Gk-b-Bl-Ek- bgBm-G8---BY-g---Q-w-DQ-M--5-D--N-BF-DQ---B6-C0--QBD-G8-bQBw-GE-bgB5-E4-YQBt-GU------EE-bgBv-G0-YQBs-G8-dQBz-C--UwBv-GY-d-B3-GE-cgBl-C--R-Bl-HQ-ZQBy-Gk-bwBy-GE-d-Bp-G8-bg-g-EM-bwBy-H--bwBy-GE-d-Bp-G8- -bg------Pg-L--E-RgBp-Gw-ZQBE-GU-cwBj-HI-_QBw-HQ-_QBv-G4------G8-_-Bv-G8-_w-g-FM-U-BQ-EM------D--C--B-EY-_QBs-GU-VgBl-HI-cwBp-G8-bg------M--u-DM-Lg-w-C4-M----Co-BQ-B-Ek-bgB0-GU-cgBu-GE-b-BO-GE-bQBl---- -cwBw-H--Yw------j--0--E-T-Bl-Gc-YQBs-EM-bwBw-Hk-cgBp-Gc-_-B0----qQ-g-DI-M--y-DM-I-BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4- ----6--k--QBP-HI-_QBn-Gk-bgBh-Gw-RgBp-Gw-ZQBu-GE-bQBl----cwBw-H--Yw-u-GQ-b-Bs-------s--Y--QBQ-HI-bwBk-HU-YwB0-E4-YQBt-GU------G8-_-Bv-G8-_w---DQ-C--B-F--cgBv-GQ-dQBj-HQ-VgBl-HI-cwBp-G8-bg---D--Lg-z-C4- +bg------Pg-L--E-RgBp-Gw-ZQBE-GU-cwBj-HI-_QBw-HQ-_QBv-G4------G8-_-Bv-G8-_w-g-FM-U-BQ-EM------D--C--B-EY-_QBs-GU-VgBl-HI-cwBp-G8-bg------M--u-DU-Lg-w-C4-M----Co-BQ-B-Ek-bgB0-GU-cgBu-GE-b-BO-GE-bQBl---- +cwBw-H--Yw------j--0--E-T-Bl-Gc-YQBs-EM-bwBw-Hk-cgBp-Gc-_-B0----qQ-g-DI-M--y-DQ-I-BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4- +---6--k--QBP-HI-_QBn-Gk-bgBh-Gw-RgBp-Gw-ZQBu-GE-bQBl----cwBw-H--Yw-u-GQ-b-Bs-------s--Y--QBQ-HI-bwBk-HU-YwB0-E4-YQBt-GU------G8-_-Bv-G8-_w---DQ-C--B-F--cgBv-GQ-dQBj-HQ-VgBl-HI-cwBp-G8-bg---D--Lg-1-C4- M--u-D----BE-----QBW-GE-cgBG-Gk-b-Bl-Ek-bgBm-G8------CQ-B----FQ-cgBh-G4-cwBs-GE-d-Bp-G8-bg------CQTkB--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- :sppc64.dll: @@ -2978,8 +3509,6 @@ M--u-D----BE-----QBW-GE-cgBG-Gk-b-Bl-Ek-bgBm-G8------CQ-B----FQ-cgBh-G4-cwBs-GE- :+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :KMS38Activation -@setlocal DisableDelayedExpansion -@echo off :: To activate, run the script with "/KMS38" parameter or change 0 to 1 in below line set _act=0 @@ -3017,92 +3546,39 @@ for %%A in (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended= ::======================================================================================================================================== -set "nul1=1>nul" -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 _k38= -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." -) - +call :dk_setvar set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f" -::======================================================================================================================================== - if %winbuild% LSS 14393 ( %eline% echo Unsupported OS version detected [%winbuild%]. -echo KMS38 Activation is supported for Windows 10/11/Server, build 14393 and later. +echo KMS38 activation is only supported on Windows 10/11/Server, build 14393 and later. +echo: +if %winbuild% LSS 10240 ( +call :dk_color %Blue% "Use Online KMS activation option." +) else ( +call :dk_color %Blue% "Use HWID activation option." +) goto dk_done ) ::======================================================================================================================================== -:: Fix 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=%userprofile%\AppData\Local\Temp" - -setlocal EnableDelayedExpansion - -::======================================================================================================================================== - if %_rem%==1 goto :k_uninstall :k_menu if %_unattended%==0 ( cls -mode 76, 25 +if not defined terminal mode 76, 25 title KMS38 Activation %masver% echo: echo: echo: echo: -echo ____________________________________________________________ +echo: ______________________________________________________ echo: echo [1] KMS38 Activation echo ____________________________________________ @@ -3110,9 +3586,9 @@ echo: echo [2] Remove KM38 Protection echo: echo [0] %_exitmsg% -echo ____________________________________________________________ +echo: ______________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b @@ -3126,40 +3602,38 @@ goto :k_menu :k_menu2 cls +if not defined terminal ( mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) title KMS38 Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%SysPath%\clipup.exe" set a_cor=1 +if not exist %SysPath%\sppsvc.exe (set _fmiss=sppsvc.exe) +if not exist %SysPath%\ClipUp.exe if not defined a_cor (set _fmiss=%_fmiss%ClipUp.exe) -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +if defined _fmiss ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode -echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. +echo [%_fmiss%] file is missing, aborting... echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -3170,12 +3644,12 @@ if defined _perm ( cls echo ___________________________________________________________________________________________ echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." +call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate Anyway [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -3198,13 +3672,12 @@ echo [%winos% ^| %winbuild%] if defined _evalserv ( echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: -echo In MAS, goto Extras and use 'Change Edition' option. +call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% +echo Evaluation editions cannot be activated outside of their evaluation period. echo: -echo Download it from here, -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) goto dk_done ) @@ -3214,29 +3687,28 @@ goto dk_done :: Check clipup.exe for the detection and activation of server cor and acor editions -set a_cor= -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%systemroot%\System32\clipup.exe" set a_cor=1 - if defined a_cor ( if not exist "!_work!\clipup.exe" ( %eline% -echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] version. -echo It's required for KMS38 Activation. -echo Check below page on how to activate it. -echo %mas%kms38.html +echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] versions. +echo The file is required for KMS38 activation. +echo Check the below page for instructions on how to activate it. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" goto dk_done ) ) -::======================================================================================================================================== - -call :dk_checksku +:: Check file signature -if not defined osSKU ( +if defined a_cor ( +%psc% "if (-not (Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').IsOSBinary) {Exit 3}" %nul% +if !errorlevel!==3 ( %eline% -echo SKU value was not detected properly. Aborting... +echo Valid digital signature not found in clipup.exe file. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) +) ::======================================================================================================================================== @@ -3244,24 +3716,7 @@ set error= cls 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 "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 - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] -) +call :dk_showosinfo ::======================================================================================================================================== @@ -3280,47 +3735,48 @@ call :dk_errorcheck :: Check if GVLK (KMS key) is already installed or not -set _gvlk= -call :dk_channel -if /i "Volume:GVLK"=="%_channel%" set _gvlk=1 +call :k_channel :: Detect Key set key= set pkey= set altkey= -set skufound= set changekey= set altedition= -call :kms38data getkey -if not defined key call :dk_gvlk %nul% -if defined applist if not defined key call :kms38fallback +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :kms38data key +if not defined key call :k_gvlk %nul% +if defined allapps if not defined key call :kms38fallback 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." +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR %nul6%') do if not errorlevel 1 set /a UBR=%%b +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( +call :dk_color %Blue% "Windows must be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." ) ) 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]" ) if not defined key if not defined _gvlk ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skufound ( -echo Unable to find this product in the supported product list. +if not defined skunotfound ( +echo This product does not support KMS38 activation. +echo Make sure you are using the latest version of the script. +set fixes=%fixes% %mas% +echo %mas% ) else ( -echo Required License files not installed. +echo Required license files were not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -echo Make sure you are using updated version of the script. -echo %mas% echo: goto dk_done ) @@ -3331,37 +3787,24 @@ goto dk_done echo: if defined changekey ( -call :dk_color %Blue% "[%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: +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription edition [SKU ID-%slcSKU%] found. Script will activate the base edition [SKU ID-%regSKU%]." echo: ) set _partial= 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 %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='+$_)}" %nul6%') do set "_partial=%%#" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null AND LicenseDependsOn is NULL" Get PartialProductKey /value %nul6%') do set "_partial=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#" call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK] ) -set error_code= if defined key ( -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!]" - -if !error_code! EQU 0 ( -call :dk_refresh -echo Installing KMS Client Setup Key [%key%] [Successful] -) else ( -call :dk_color %Red% "Installing KMS Client Setup Key [%key%] [Failed] !error_code!" -if not defined error ( -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 -) -set error=1 -) +call :dk_inskey "[%key%]" ) ::======================================================================================================================================== @@ -3369,12 +3812,13 @@ set error=1 :: Check activation ID for setting specific KMS host 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" %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='+$_)}" %nul6%') do call set "app=%%a" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is 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 %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).ID | %% {echo ('ID='+$_)}" %nul6%') do call set "app=%%a" if not defined app ( call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..." -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -3388,7 +3832,7 @@ echo: %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1])" %nul% reg delete "HKLM\%specific_kms%" /f ) @@ -3427,12 +3871,6 @@ goto :k_final :: 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) -if not exist %SystemRoot%\system32\ClipUp.exe ( -call :dk_color %Red% "Checking ClipUp.exe File [Not found, aborting the process]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -goto :k_final -) - set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" if not exist "%tdir%\" md "%tdir%\" %nul% @@ -3442,7 +3880,7 @@ if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q :: 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;" -:: Check mass grave[.]dev/kms38.html#Manual_Activation to see how it's generated +:: Check mass grave [.] dev/kms38#manual-activation to see how it's generated set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA=" set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA" @@ -3451,7 +3889,7 @@ set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAV copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]" +call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting...]" if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :k_final ) else ( @@ -3462,7 +3900,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" :: Stop sppsvc -%psc% Stop-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" sc query sppsvc | find /i "STOPPED" %nul% && ( echo Stopping sppsvc Service [Successful] @@ -3471,14 +3909,14 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" ) %_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) @@ -3505,7 +3943,7 @@ set rebuildinfo=1 call :dk_color %Red% "Checking Ticket Migration [Failed]" ) -if defined applist if not defined showfix if defined rebuildinfo ( +if not defined showfix if defined rebuildinfo ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" ) @@ -3528,8 +3966,8 @@ goto :k_final :: Clear 180 Days KMS Activation lock with Windows SKU specific rearm and without the need to restart the system -if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where ID='%app%' call ReArmsku %nul% -if %_wmic% EQU 0 %psc% "$null=([WMI]'SoftwareLicensingProduct=''%app%''').ReArmsku()" %nul% +if %_wmic% EQU 1 wmic path %spp% where ID='%app%' call ReArmsku %nul% +if %_wmic% EQU 0 %psc% "$null=([WMI]'%spp%=''%app%''').ReArmsku()" %nul% if %errorlevel%==0 ( echo Applying SKU-ID Rearm [Successful] @@ -3547,34 +3985,35 @@ goto :k_final call :dk_color %Red% "Activation Failed" if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ::======================================================================================================================================== :k_final -:: Remove the added Specific KMS Host (Local Host) if activation is not completed +:: Remove the specific KMS host (LocalHost) added by the script if activation is not completed echo: if not defined _k38 ( %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -call :dk_color %Red% "Removing The Added Specific KMS Host [Failed]" +call :dk_color %Red% "Removing the Added Specific KMS Host [Failed]" ) || ( -echo Removing The Added Specific KMS Host [Successful] +echo Removing the Added Specific KMS Host [Successful] ) ) :: Protect KMS38 if opted by the user and conditions are correct 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 query "HKLM\%specific_kms%" && ( -echo Protect KMS38 From KMS [Successful] [Locked A Registry Key] +echo Protect KMS38 From KMS [Successful] [Locked a Registry Key] ) || ( -call :dk_color %Red% "Protect KMS38 From KMS [Failed To Lock A Registry Key]" +call :dk_color %Red% "Protect KMS38 From KMS [Failed to Lock a Registry Key]" ) ) @@ -3584,16 +4023,21 @@ if defined a_cor if exist "%_clipup%" del /f /q "%_clipup%" %nul% if defined a_cor ( if exist "%_clipup%" ( -call :dk_color %Red% "Deleting copied clipup.exe file [Failed]" +call :dk_color %Red% "Deleting Copied clipup.exe File [Failed]" ) else ( -echo Deleting copied clipup.exe file [Successful] +echo Deleting Copied clipup.exe File [Successful] ) ) -for %%# in (175 407) do if %osSKU%==%%# ( +for %%# in (407) do if %osSKU%==%%# ( call :dk_color %Red% "%winos% does not support activation on non-azure platforms." ) +:: Trigger reevaluation of SPP's Scheduled Tasks + +if defined _k38 ( +call :dk_reeval %nul% +) goto :dk_done ::======================================================================================================================================== @@ -3601,14 +4045,14 @@ goto :dk_done :k_uninstall cls -mode 99, 28 +if not defined terminal mode 99, 28 title Remove KMS38 Protection %masver% %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1])" %nul% reg delete "HKLM\%specific_kms%" /f ) @@ -3667,17 +4111,18 @@ exit /b :k_checkexp 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" %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='+$_)}" %nul6%') do set "gpr=%%#" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get GracePeriodRemaining /VALUE" %nul6%') do set "gpr=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" %nul6%') do set "gpr=%%#" if %gpr% GTR 259200 (set _k38=1) else (set _k38=) exit /b :: Get Windows installed key channel -:dk_channel +:k_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='+$_)}" %nul6%') do set "_channel=%%#" +set _gvlk= +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like '%%KMSCLIENT%%'" Get Name /value %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like ''%%KMSCLIENT%%''').Get()).Name | %% {echo ('Name='+$_)}" %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) exit /b ::======================================================================================================================================== @@ -3685,7 +4130,7 @@ exit /b :: Get Product Key from pkeyhelper.dll for future new editions :: It works on Windows 10 1803 (17134) and later builds. -:dk_pkey +:k_pkey call :dk_reflection @@ -3698,11 +4143,11 @@ exit /b :: Get channel name for the key which was extracted from pkeyhelper.dll -:dk_pkeychannel +:k_pkeychannel set k=%1 set m=[Runtime.InteropServices.Marshal] -set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms +set p=%SysPath%\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3); set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8); @@ -3712,13 +4157,13 @@ set pkeychannel= for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkeychannel=%%a) exit /b -:dk_gvlk +:k_gvlk for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b for %%# in (Volume:GVLK) do ( -call :dk_pkey %osSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( +call :k_pkey %osSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) @@ -3738,63 +4183,64 @@ exit /b set f= for %%# in ( -73111121-5638-40f6-bc11-f1d7b0d64300_NP%f%PR9-FWD%f%CX-D2%f%C8J-H872%f%K-2Y%f%T43___4_Enterprise -7dc26449-db21-4e09-ba37-28f2958506a6_DP%f%NXD-67Y%f%Y9-WW%f%FJJ-RYH9%f%9-RM%f%832___7_ServerStandard_Ge -9bd77860-9b31-4b7b-96ad-2564017315bf_VD%f%YBN-27W%f%PP-V4%f%HQT-9VMD%f%4-VM%f%K7H___7_ServerStandard_FE -de32eafd-aaee-4662-9444-c1befb41bde2_N6%f%9G4-B89%f%J2-4G%f%8F4-WWYC%f%C-J4%f%64C___7_ServerStandard_RS5 -8c1c5410-9f39-4805-8c9d-63a07706358f_WC%f%2BQ-8NR%f%M3-FD%f%DYY-2BFG%f%V-KH%f%KQY___7_ServerStandard_RS1 -c052f164-cdf6-409a-a0cb-853ba0f0f55a_CN%f%FDQ-2BW%f%8H-9V%f%4WM-TKCP%f%D-MD%f%2QF___8_ServerDatacenter_Ge -ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX%f%4NM-KYW%f%YW-QJ%f%JR4-XV3Q%f%B-6V%f%M33___8_ServerDatacenter_FE -34e1ae55-27f8-4950-8877-7a03be5fb181_WM%f%DGN-G9P%f%QG-XV%f%VXX-R3X4%f%3-63%f%DFG___8_ServerDatacenter_RS5 -21c56779-b449-4d20-adfc-eece0e1ad74b_CB%f%7KF-BWN%f%84-R7%f%R2Y-793K%f%2-8X%f%DDG___8_ServerDatacenter_RS1 -e272e3e2-732f-4c65-a8f0-484747d0d947_DP%f%H2V-TTN%f%VB-4X%f%9Q3-TJR4%f%H-KH%f%JW4__27_EnterpriseN -2de67392-b7a7-462a-b1ca-108dd189f588_W2%f%69N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX__48_Professional -a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH%f%37W-N47%f%XK-V7%f%XM9-C722%f%7-GC%f%QG9__49_ProfessionalN -034d3cbb-5d4b-4245-b3f8-f84571314078_WV%f%DHN-86M%f%7X-46%f%6P6-VHXV%f%7-YY%f%726__50_ServerSolution_RS5 -2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JC%f%KRF-N37%f%P4-C2%f%D82-9YXR%f%T-4M%f%63B__50_ServerSolution_RS1 -7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3K%f%HY7-WNT%f%83-DG%f%QKR-F7HP%f%R-84%f%4BM__98_CoreN -a9107544-f4a0-4053-a96a-1479abdef912_PV%f%MJN-6DF%f%Y6-9C%f%CP6-7BKT%f%T-D3%f%WVR__99_CoreCountrySpecific -cd918a57-a41b-4c82-8dce-1a538e221a83_7H%f%NRX-D7K%f%GG-3K%f%4RQ-4WPJ%f%4-YT%f%DFH_100_CoreSingleLanguage -58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX%f%9XD-98N%f%7V-6W%f%MQ6-BX7F%f%G-H8%f%Q99_101_Core -7b4433f4-b1e7-4788-895a-c45378d38253_QN%f%4C6-GBJ%f%D2-FB%f%422-GHWJ%f%K-GJ%f%G2R_110_ServerCloudStorage -8de8eb62-bbe0-40ac-ac17-f75595071ea3_GR%f%FBW-QND%f%C4-6Q%f%BHG-CCK3%f%B-2P%f%R88_120_ServerARM64_RS5 -43d9af6e-5e86-4be8-a797-d072a046896c_K9%f%FYF-G6N%f%CK-73%f%M32-XMVP%f%Y-F9%f%DRR_120_ServerARM64_RS4 -e0c42288-980c-4788-a014-c080d2e1926e_NW%f%6C2-QMP%f%VW-D7%f%KKK-3GKT%f%6-VC%f%FB2_121_Education -3c102355-d027-42c6-ad23-2e7ef8a02585_2W%f%H4N-8QG%f%BV-H2%f%2JP-CT43%f%Q-MD%f%WWJ_122_EducationN -32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7%f%XTQ-FN8%f%P6-TT%f%KYV-9D4C%f%C-J4%f%62D_125_EnterpriseS_RS5,VB,Ge -2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DC%f%PHK-NFM%f%TC-H8%f%8MJ-PFHP%f%Y-QJ%f%4BJ_125_EnterpriseS_RS1 -7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WN%f%MTR-4C8%f%8C-JK%f%8YV-HQ7T%f%2-76%f%DF9_125_EnterpriseS_TH1 -7103a333-b8c8-49cc-93ce-d37c09687f92_92%f%NFX-8DJ%f%QP-P6%f%BBQ-THF9%f%C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge -9f776d83-7156-45b2-8a5c-359b9c9f22a3_QF%f%FDN-GRT%f%3P-VK%f%WWX-X7T3%f%R-8B%f%639_126_EnterpriseSN_RS1 -87b838b7-41b6-4590-8318-5797951d8529_2F%f%77B-TNF%f%GY-69%f%QQF-B8YK%f%P-D6%f%9TJ_126_EnterpriseSN_TH1 -39e69c41-42b4-4a0a-abad-8e3c10a797cc_QF%f%ND9-D3Y%f%9C-J3%f%KKY-6RPV%f%P-2D%f%PYV_145_ServerDatacenterACor_FE -90c362e5-0da1-4bfd-b53b-b87d309ade43_6N%f%MRW-2C8%f%FM-D2%f%4W7-TQWM%f%Y-CW%f%H2D_145_ServerDatacenterACor_RS5 -e49c08e7-da82-42f8-bde2-b570fbcae76c_2H%f%XDN-KRX%f%HB-GP%f%YC7-YCKF%f%J-7F%f%VDG_145_ServerDatacenterACor_RS3 -f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67%f%KN8-4FY%f%JW-24%f%87Q-MQ2J%f%7-4C%f%4RG_146_ServerStandardACor_FE -73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2%f%KJX-J94%f%YW-TQ%f%VFB-DG9Y%f%T-72%f%4CC_146_ServerStandardACor_RS5 -61c5ef22-f14f-4553-a824-c4b31e84b100_PT%f%XN8-JFH%f%JM-4W%f%C78-MPCB%f%R-9W%f%4KR_146_ServerStandardACor_RS3 -82bbc092-bc50-4e16-8e18-b74fc486aec3_NR%f%G8B-VKK%f%3Q-CX%f%VCJ-9G2X%f%F-6Q%f%84J_161_ProfessionalWorkstation -4b1571d3-bafb-4b40-8087-a961be2caf65_9F%f%NHH-K3H%f%BT-3W%f%4TD-6383%f%H-6X%f%YWF_162_ProfessionalWorkstationN -3f1afc82-f8ac-4f6c-8005-1d233e606eee_6T%f%P4R-GNP%f%TD-KY%f%YHQ-7B7D%f%P-J4%f%47Y_164_ProfessionalEducation -5300b18c-2e33-4dc2-8291-47ffcec746dd_YV%f%WGF-BXN%f%MC-HT%f%QYQ-CPQ9%f%9-66%f%QFC_165_ProfessionalEducationN -45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_QN%f%7G3-4RM%f%92-MT%f%6QR-PR96%f%6-FV%f%YV7_168_ServerAzureCor_Ge -8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N%f%379-GGT%f%MK-23%f%C6M-XVVT%f%C-CK%f%FRQ_168_ServerAzureCor_FE -a99cc1f0-7719-4306-9645-294102fbff95_FD%f%NH6-VW9%f%RW-BX%f%PJ7-4XTY%f%G-23%f%9TB_168_ServerAzureCor_RS5 -3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP%f%34G-4NP%f%PG-79%f%JTQ-864T%f%4-R3%f%MQX_168_ServerAzureCor_RS1 -e0b2d383-d112-413f-8a80-97f373a5820c_YY%f%VX9-NTF%f%WV-6M%f%DM3-9PT4%f%T-4M%f%68B_171_EnterpriseG -e38454fb-41a4-4f59-a5dc-25080e354730_44%f%RPN-FTY%f%23-9V%f%TTB-MP9B%f%X-T8%f%4FV_172_EnterpriseGN -ec868e65-fadf-4759-b23e-93fe37f2cc29_CP%f%WHC-NT2%f%C7-VY%f%W78-DHDB%f%2-PG%f%3GK_175_ServerRdsh_RS5 -e4db50ea-bda1-4566-b047-0ca50abc6f07_7N%f%BT4-WGB%f%QX-MP%f%4H7-QXFF%f%8-YP%f%3KX_175_ServerRdsh_RS3 -0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NB%f%TWJ-3DR%f%69-3C%f%4V8-C26M%f%C-GQ%f%9M6_183_CloudE -59eb965c-9150-42b7-a0ec-22151b9897c5_KB%f%N8V-HFG%f%Q4-MG%f%XVD-347P%f%6-PD%f%QGT_191_IoTEnterpriseS_VB,NI -d30136fc-cb4b-416e-a23d-87207abc44a9_6X%f%N7V-PCB%f%DC-BD%f%BRH-8DQY%f%7-G6%f%R44_202_CloudEditionN -ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37%f%D7F-N49%f%CB-WQ%f%R8W-TBJ7%f%3-FM%f%8RX_203_CloudEdition -c2e946d1-cfa2-4523-8c87-30bc696ee584_NQ%f%8HH-FTD%f%TM-6V%f%GY7-TQ3D%f%V-XF%f%BV2_407_ServerTurbine_Ge -19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NT%f%BV8-9K7%f%Q8-V2%f%7C6-M2BT%f%V-KH%f%MXV_407_ServerTurbine_RS5 +:: Windows 10/11 +73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43___4_Enterprise +e272e3e2-732f-4c65-a8f0-484747d0d947_DPH2V-TTNVB-4X9Q3-TJR4H-KH%f%JW4__27_EnterpriseN +2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX__48_Professional +a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH37W-N47XK-V7XM9-C7227-GC%f%QG9__49_ProfessionalN +7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3KHY7-WNT83-DGQKR-F7HPR-84%f%4BM__98_CoreN +a9107544-f4a0-4053-a96a-1479abdef912_PVMJN-6DFY6-9CCP6-7BKTT-D3%f%WVR__99_CoreCountrySpecific +cd918a57-a41b-4c82-8dce-1a538e221a83_7HNRX-D7KGG-3K4RQ-4WPJ4-YT%f%DFH_100_CoreSingleLanguage +58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX9XD-98N7V-6WMQ6-BX7FG-H8%f%Q99_101_Core +e0c42288-980c-4788-a014-c080d2e1926e_NW6C2-QMPVW-D7KKK-3GKT6-VC%f%FB2_121_Education +3c102355-d027-42c6-ad23-2e7ef8a02585_2WH4N-8QGBV-H22JP-CT43Q-MD%f%WWJ_122_EducationN +32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_125_EnterpriseS_RS5,VB,Ge +2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCPHK-NFMTC-H88MJ-PFHPY-QJ%f%4BJ_125_EnterpriseS_RS1 +7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNMTR-4C88C-JK8YV-HQ7T2-76%f%DF9_125_EnterpriseS_TH1 +7103a333-b8c8-49cc-93ce-d37c09687f92_92NFX-8DJQP-P6BBQ-THF9C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge +9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFFDN-GRT3P-VKWWX-X7T3R-8B%f%639_126_EnterpriseSN_RS1 +87b838b7-41b6-4590-8318-5797951d8529_2F77B-TNFGY-69QQF-B8YKP-D6%f%9TJ_126_EnterpriseSN_TH1 +82bbc092-bc50-4e16-8e18-b74fc486aec3_NRG8B-VKK3Q-CXVCJ-9G2XF-6Q%f%84J_161_ProfessionalWorkstation +4b1571d3-bafb-4b40-8087-a961be2caf65_9FNHH-K3HBT-3W4TD-6383H-6X%f%YWF_162_ProfessionalWorkstationN +3f1afc82-f8ac-4f6c-8005-1d233e606eee_6TP4R-GNPTD-KYYHQ-7B7DP-J4%f%47Y_164_ProfessionalEducation +5300b18c-2e33-4dc2-8291-47ffcec746dd_YVWGF-BXNMC-HTQYQ-CPQ99-66%f%QFC_165_ProfessionalEducationN +e0b2d383-d112-413f-8a80-97f373a5820c_YYVX9-NTFWV-6MDM3-9PT4T-4M%f%68B_171_EnterpriseG +e38454fb-41a4-4f59-a5dc-25080e354730_44RPN-FTY23-9VTTB-MP9BX-T8%f%4FV_172_EnterpriseGN +ec868e65-fadf-4759-b23e-93fe37f2cc29_CPWHC-NT2C7-VYW78-DHDB2-PG%f%3GK_175_ServerRdsh_RS5 +e4db50ea-bda1-4566-b047-0ca50abc6f07_7NBT4-WGBQX-MP4H7-QXFF8-YP%f%3KX_175_ServerRdsh_RS3 +0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBTWJ-3DR69-3C4V8-C26MC-GQ%f%9M6_183_CloudE +59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_191_IoTEnterpriseS_VB,NI +d30136fc-cb4b-416e-a23d-87207abc44a9_6XN7V-PCBDC-BDBRH-8DQY7-G6%f%R44_202_CloudEditionN +ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D7F-N49CB-WQR8W-TBJ73-FM%f%8RX_203_CloudEdition +:: Windows 2016/19/22/25 LTSC/SAC +7dc26449-db21-4e09-ba37-28f2958506a6_TVRH6-WHNXV-R9WG3-9XRFY-MY%f%832___7_ServerStandard_Ge +9bd77860-9b31-4b7b-96ad-2564017315bf_VDYBN-27WPP-V4HQT-9VMD4-VM%f%K7H___7_ServerStandard_FE +de32eafd-aaee-4662-9444-c1befb41bde2_N69G4-B89J2-4G8F4-WWYCC-J4%f%64C___7_ServerStandard_RS5 +8c1c5410-9f39-4805-8c9d-63a07706358f_WC2BQ-8NRM3-FDDYY-2BFGV-KH%f%KQY___7_ServerStandard_RS1 +c052f164-cdf6-409a-a0cb-853ba0f0f55a_D764K-2NDRG-47T6Q-P8T8W-YP%f%6DF___8_ServerDatacenter_Ge +ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX4NM-KYWYW-QJJR4-XV3QB-6V%f%M33___8_ServerDatacenter_FE +34e1ae55-27f8-4950-8877-7a03be5fb181_WMDGN-G9PQG-XVVXX-R3X43-63%f%DFG___8_ServerDatacenter_RS5 +21c56779-b449-4d20-adfc-eece0e1ad74b_CB7KF-BWN84-R7R2Y-793K2-8X%f%DDG___8_ServerDatacenter_RS1 +034d3cbb-5d4b-4245-b3f8-f84571314078_WVDHN-86M7X-466P6-VHXV7-YY%f%726__50_ServerSolution_RS5 +2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JCKRF-N37P4-C2D82-9YXRT-4M%f%63B__50_ServerSolution_RS1 +7b4433f4-b1e7-4788-895a-c45378d38253_QN4C6-GBJD2-FB422-GHWJK-GJ%f%G2R_110_ServerCloudStorage +8de8eb62-bbe0-40ac-ac17-f75595071ea3_GRFBW-QNDC4-6QBHG-CCK3B-2P%f%R88_120_ServerARM64_RS5 +43d9af6e-5e86-4be8-a797-d072a046896c_K9FYF-G6NCK-73M32-XMVPY-F9%f%DRR_120_ServerARM64_RS4 +39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFND9-D3Y9C-J3KKY-6RPVP-2D%f%PYV_145_ServerDatacenterACor_FE +90c362e5-0da1-4bfd-b53b-b87d309ade43_6NMRW-2C8FM-D24W7-TQWMY-CW%f%H2D_145_ServerDatacenterACor_RS5 +e49c08e7-da82-42f8-bde2-b570fbcae76c_2HXDN-KRXHB-GPYC7-YCKFJ-7F%f%VDG_145_ServerDatacenterACor_RS3 +f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67KN8-4FYJW-2487Q-MQ2J7-4C%f%4RG_146_ServerStandardACor_FE +73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2KJX-J94YW-TQVFB-DG9YT-72%f%4CC_146_ServerStandardACor_RS5 +61c5ef22-f14f-4553-a824-c4b31e84b100_PTXN8-JFHJM-4WC78-MPCBR-9W%f%4KR_146_ServerStandardACor_RS3 +45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_FCNV3-279Q9-BQB46-FTKXX-9H%f%PRH_168_ServerAzureCor_Ge +8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N379-GGTMK-23C6M-XVVTC-CK%f%FRQ_168_ServerAzureCor_FE +a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_ServerAzureCor_RS5 +3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP34G-4NPPG-79JTQ-864T4-R3%f%MQX_168_ServerAzureCor_RS1 +c2e946d1-cfa2-4523-8c87-30bc696ee584_XGN3F-F394H-FD2MY-PP6FD-8M%f%CRC_407_ServerTurbine_Ge +19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTBV8-9K7Q8-V27C6-M2BTV-KH%f%MXV_407_ServerTurbine_RS5 ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( -set skufound=1 -if %1==getkey if not defined key echo "!applist!" | find /i "%%A" %nul1% && set key=%%B +if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) ) exit /b @@ -3818,17 +4264,17 @@ set notfoundaltactID= if %_NoEditionChange%==1 exit /b 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 -206_IoTEnterpriseK_________________80083eae-7031-4394-9e88-4901973d56fe_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 -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 -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 +188_IoTEnterprise__________________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +206_IoTEnterpriseK_________________80083eae-7031-4394-9e88-4901973d56fe_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +191_IoTEnterpriseS-2021____________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_EnterpriseS-2021 +205_IoTEnterpriseSK________________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_IoTEnterpriseS +138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional ) do ( for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( -echo "!applist!" | find /i "%%C" %nul1% && ( -echo "!applist!" | find /i "%%D" %nul1% && ( +echo "!allapps!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( set altkey=%%E set altedition=%%F ) || ( @@ -3843,3078 +4289,1391 @@ exit /b :+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :KMSActivation -@setlocal DisableDelayedExpansion -@echo off -cls -color 07 -title Online KMS Activation %masver% +:: To activate Windows with K-M-S activation, run the script with "/K-Windows" parameter or change 0 to 1 in below line +set _actwin=0 -:: You are not supposed to edit anything below this. +:: To activate all Office apps (including Project/Visio) with K-M-S activation, run the script with "/K-Office" parameter or change 0 to 1 in below line +set _actoff=0 -set WMI_VBS=0 -set _Debug=0 -set Silent=0 -set Logger=0 -set AutoR2V=1 -set SkipKMS38=1 -set vNextOverride=1 -set ActWindows=1 -set ActOffice=1 +:: To activate only Project/Visio with K-M-S activation, run the script with "/K-ProjectVisio" parameter or change 0 to 1 in below line +set _actprojvis=0 -set _uni= -set _args= -set _elev= -set _renetask= -set _renacttask= -set _unattended= -set _unattendedact= +:: To activate all Windows/Office with K-M-S activation, run the script with "/K-WindowsOffice" parameter or change 0 to 1 in below line +set _actwinoff=0 -set _args=%* -if defined _args set _args=%_args:"=% -if defined _args ( -echo "%_args%" | find /i "/KMS" >nul && set _unattended=1 +:: To disable changing Windows/Office edition if current edition doesn't support K-M-S activation, run the script with "/K-NoEditionChange" parameter or change 0 to 1 in below line +set _NoEditionChange=0 -for %%A in (%_args%) do ( -if /i "%%A"=="-el" (set _elev=1 -) else if /i "%%A"=="/KMS-RenewalTask" (set _renetask=1 -) else if /i "%%A"=="/KMS-ActAndRenewalTask" (set _renacttask=1 -) else if /i "%%A"=="/KMS-Uninstall" (set _uni=1 -) else if /i "%%A"=="/KMS-Windows" (set ActWindows=1&set ActOffice=0&set _unattendedact=1 -) else if /i "%%A"=="/KMS-Office" (set ActWindows=0&set ActOffice=1&set _unattendedact=1 -) else if /i "%%A"=="/KMS-WindowsOffice" (set ActWindows=1&set ActOffice=1&set _unattendedact=1 -) else if /i "%%A"=="/KMS-KeepvNext" (set vNextOverride=0 -) else if /i "%%A"=="/KMS-Debug" (set _Debug=1 -) else if /i "%%A"=="/KMS-Logger" (set Logger=1&set Silent=1 -) -) -) +:: To NOT auto-install renewal task with activation, run the script with "/K-NoRenewalTask" parameter or change 0 to 1 in below line +set _norentsk=0 -::======================================================================================================================================== +:: To uninstall K-M-S, run the script with "/K-Uninstall" parameter or change 0 to 1 in below line. It'll take preference over any other parameter. +set _uni=0 -set "nul=>nul 2>&1" -set psc=powershell.exe -set winbuild=1 -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +:: Advanced options: +:: Don't use renewal task option if you are going to use a specific server name instead of public servers used in the script -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) +:: To specify a server address for activation, run the script with "/K-Server-YOURKMSSERVERNAME" parameter or add it in below line after = sign +set _server= -call :_colorprep -set "_buf={$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +:: To specify a port for activation, run the script with "/K-Port-YOURPORTNAME" parameter or add it in below line after = sign +set _port= -set "nceline=echo. &echo ==== ERROR ==== &echo." -set "eline=echo. &call :_color %Red% "==== ERROR ====" &echo." -if %_Debug% EQU 1 set _unattended=1 +:: Script will run in unattended mode if parameters are used OR value is changed in above lines FOR activation or uninstall. ::======================================================================================================================================== -:: Fix special characters limitation in path name - -set "_work=%~dp0" -if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" - -set "_batf=%~f0" -set "_batp=%_batf:'=''%" +cls +color 07 +set KS=K%blank%MS +title Online %KS% Activation %masver% -set _PSarg="""%~f0""" -el %_args% +set _args= +set _elev= +set _unattended=0 -set "_ttemp=%userprofile%\AppData\Local\Temp" -set "_Local=%LocalAppData%" +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"=="/K-Windows" (set _actwin=1) +if /i "%%A"=="/K-Office" (set _actoff=1) +if /i "%%A"=="/K-ProjectVisio" (set _actprojvis=1) +if /i "%%A"=="/K-WindowsOffice" (set _actwinoff=1) +if /i "%%A"=="/K-NoEditionChange" (set _NoEditionChange=1) +if /i "%%A"=="/K-NoRenewalTask" (set _norentsk=1) +if /i "%%A"=="/K-Uninstall" (set _uni=1) +echo "%%A" | find /i "/K-Port-" >nul && (set "_port=%%A" & call set "_port=%%_port:~8%%") +echo "%%A" | find /i "/K-Server-" >nul && (set "_server=%%A" & call set "_server=%%_server:~10%%") +) -setlocal EnableDelayedExpansion +for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +if %_uni%==1 goto :ks_uninstall -:: Check not x86 Windows +:ks_menu -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 +if defined _server set _norentsk=1 +if not defined _server set _port= -::======================================================================================================================================== +if %_unattended%==0 ( +cls +if not defined terminal mode 76, 30 +title Online %KS% Activation %masver% -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find wmic.exe in the system. -if %winbuild% GEQ 22621 echo Make sure WMIC is enabled in optional features. -goto Done +echo: +echo: +echo: +echo: +if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" ( +find /i "Ver:2.7" "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" %nul% || ( +call :dk_color %_Yellow% " Old renewal task found, run activation to update it." ) - -wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul || ( -%nceline% -echo WMI is not responding in the system. +) +echo ______________________________________________________________ +echo: +echo [1] Activate - Windows +echo [2] Activate - Office [All] +echo [3] Activate - Office [Project/Visio] +echo [4] Activate - All +echo _______________________________________________ +echo: +if %_norentsk%==0 ( +echo [5] Renewal Task With Activation [Yes] +) else ( +call :dk_color2 %_White% " [5] Renewal Task With Activation " %_Yellow% "[No]" +) +if %_NoEditionChange%==0 ( +echo [6] Change Edition If Needed [Yes] +) else ( +call :dk_color2 %_White% " [6] Change Edition If Needed " %_Yellow% "[No]" +) +echo [7] Uninstall Online %KS% +echo _______________________________________________ echo: -echo In MAS, Goto Troubleshoot and run Fix WMI option. -goto Done +if defined _server ( +echo [8] Set %KS% Server/Port [%_server%] [%_port%] +) else ( +echo [8] Set %KS% Server/Port ) +echo [9] Download Office +echo [0] %_exitmsg% +echo ______________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,6,7,8,9,0]" +choice /C:1234567890 /N +set _el=!errorlevel! -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 "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if defined notx86 reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% +if !_el!==10 exit /b +if !_el!==9 start %mas%genuine-installation-media & goto :ks_menu +if !_el!==8 goto :ks_ip +if !_el!==7 cls & call :ks_uninstall & cls & goto :ks_menu +if !_el!==6 (if %_NoEditionChange%==0 (set _NoEditionChange=1) else (set _NoEditionChange=0)) & goto :ks_menu +if !_el!==5 (if %_norentsk%==0 (set _norentsk=1) else (set _norentsk=0)) & goto :ks_menu +if !_el!==4 cls & setlocal & set "_actwin=1" & set "_actoff=1" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==3 cls & setlocal & set "_actwin=0" & set "_actoff=0" & set "_actprojvis=1" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==2 cls & setlocal & set "_actwin=0" & set "_actoff=1" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==1 cls & setlocal & set "_actwin=1" & set "_actoff=0" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +goto :ks_menu ) ::======================================================================================================================================== -if defined _uni goto _Complete_Uninstall +:ks_start -if defined _renetask set ActTask=&call:RenTask&timeout /t 2 cls -if defined _renacttask set ActTask=1&call:RenTask&timeout /t 2 -cls -if defined _unattended if not defined _unattendedact goto Done +if not defined terminal ( +mode 115, 32 +if exist "%SysPath%\spp\store_test\" mode 135, 32 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +) +title Online %KS% Activation %masver% -::======================================================================================================================================== +echo: +echo Initializing... +call :dk_chkmal -set "_title=Online KMS Activation %masver%" -set _gui= +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) -:_KMS_Menu +::======================================================================================================================================== -set sub_next=0 -set sub_o365=0 -set sub_proj=0 -set sub_vsio=0 -set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext -reg query %kNext% /v MigrationToV5Done 2>nul | find /i "0x1" %nul% && call :officeSub %nul% +if %_actprojvis%==1 (set "_actoff=1") +if %_actwinoff%==1 (set "_actwin=1" & set "_actoff=1") -set _tskinstalled= -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && ( -find /i "Ver:1.9" "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" %nul% && set _tskinstalled=1 -) +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -set _oldtsk= -if not defined _tskinstalled ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | findstr /i "\Activation-Renewal \Online_KMS_Activation_Script-Renewal" >nul && ( -set _oldtsk=1 -) -) +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue -if defined _unattended ( -call :Activation_Start -timeout /t 2 -goto Done -) +::======================================================================================================================================== + +set error= cls -set _gui=1 -title %_title% -mode con: cols=76 lines=30 - -echo. -echo. -echo. -echo. -echo. ______________________________________________________________ -echo. -echo. [1] Activate - Windows -echo. [2] Activate - Office -echo. [3] Activate - All -echo. -if defined _tskinstalled call :_color2 %_White% " [4] Install Auto-Renewal " %_Green% "[Installed]" -if defined _oldtsk call :_color2 %_White% " [4] Install Auto-Renewal " %_Red% "[Old Installed]" -if not defined _tskinstalled if not defined _oldtsk echo. [4] Install Auto-Renewal -echo. [5] Uninstall -echo. _______________________________________________ -echo. -if %_Debug%==0 ( -echo. [6] Enable Debug Mode [No] -) else ( -call :_color2 %_White% " [6] Enable Debug Mode " %_Red% "[Yes]" +echo: +call :dk_showosinfo + +:: Check Internet connection + +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) -if %vNextOverride% EQU 1 ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Red% "[Yes]" -) else ( -echo [7] Override Office vNext [Yes] + +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1&set ping_f= But Ping Failed) ) + +if defined _int ( +echo Checking Internet Connection [Connected%ping_f%] ) else ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Yellow% "[No]" -) else ( -echo [7] Override Office vNext [No] -) +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Online %KS% Activation." ) -echo. _______________________________________________ -echo. -echo. [0] %_exitmsg% -echo. ______________________________________________________________ -echo. -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,0]" -choice /C:12345670 /N -set _el=%errorlevel% - -if %_el%==8 exit /b -if %_el%==7 (if %vNextOverride% EQU 0 (set vNextOverride=1) else (set vNextOverride=0))&goto _KMS_Menu -if %_el%==6 (if %_Debug%==0 (set _Debug=1) else (set _Debug=0)) &goto _KMS_Menu -if %_el%==5 call:_Complete_Uninstall&cls&goto _KMS_Menu -if %_el%==4 set ActTask=&call:RenTask&goto _KMS_Menu -if %_el%==3 cls&setlocal&set "ActWindows=1"&set "ActOffice=1"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -if %_el%==2 cls&setlocal&set "ActWindows=0"&set "ActOffice=1"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -if %_el%==1 cls&setlocal&set "ActWindows=1"&set "ActOffice=0"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -goto _KMS_Menu ::======================================================================================================================================== -:Done - -if defined _unattended exit /b +echo Initiating Diagnostic Tests... -echo. -echo Press any key to exit... -pause >nul -exit /b +set "_serv=sppsvc Winmgmt" -:========================================================================================================================================= +:: Software Protection +:: Windows Management Instrumentation -:Activation_Start +call :dk_errorcheck -@setlocal DisableDelayedExpansion +::======================================================================================================================================== -set nil= -for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe,osppsvc.exe) do ( -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" /f %nul%) -) +call :_taskclear-cache +call :_tasksetserv -call :Clear-KMS-Cache %nul% +if not %_actwin%==1 goto :ks_office -set "_Null=1>nul 2>nul" -set KMS_Port=1688 -if %_Debug% EQU 1 set _unattended=1 -set "_run=nul" -if %Logger% EQU 1 set _run="%~dpn0_Silent.log" +:: Process Windows +:: Check if system is permanently activated or not -set "SysPath=%SystemRoot%\System32" -set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "SysPath=%SystemRoot%\Sysnative" -set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" -) -set "_bit=64" -set "_wow=1" -if /i "%PROCESSOR_ARCHITECTURE%"=="amd64" set "xBit=x64"&set "xOS=x64" -if /i "%PROCESSOR_ARCHITECTURE%"=="arm64" set "xBit=x86"&set "xOS=A64" -if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "xBit=x86"&set "xOS=x86"&set "_wow=0"&set "_bit=32" -if /i "%PROCESSOR_ARCHITEW6432%"=="amd64" set "xBit=x64"&set "xOS=x64" -if /i "%PROCESSOR_ARCHITEW6432%"=="arm64" set "xBit=x86"&set "xOS=A64" -if not defined xBit set "xBit=x64"&set "xOS=x64" - -set _cwmi=0 -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 +echo: +echo Processing Windows... +call :dk_checkperm +if defined _perm ( +call :dk_color %Gray% "Checking OS Activation [Windows is already permanently activated]" +goto :ks_office ) -set "_Local=%LocalAppData%" -set "_temp=%SystemRoot%\Temp" -set "_log=%~dpn0" -set "_work=%~dp0" -if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" -set _UNC=0 -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" -if exist "%PUBLIC%\Desktop\desktop.ini" set "_dsk=%PUBLIC%\Desktop" -set "_mO21a=Detected Office 2021 C2R Retail is activated" -set "_mO19a=Detected Office 2019 C2R Retail is activated" -set "_mO16a=Detected Office 2016 C2R Retail is activated" -set "_mO15a=Detected Office 2013 C2R Retail is activated" -set "_mO21c=Detected Office 2021 C2R Retail could not be converted to Volume" -set "_mO19c=Detected Office 2019 C2R Retail could not be converted to Volume" -set "_mO16c=Detected Office 2016 C2R Retail could not be converted to Volume" -set "_mO15c=Detected Office 2013 C2R Retail could not be converted to Volume" -set "_mO14c=Detected Office 2010 C2R Retail is not supported by this script" -set "_mO14m=Detected Office 2010 MSI Retail is not supported by this script" -set "_mO15m=Detected Office 2013 MSI Retail is not supported by this script" -set "_mO16m=Detected Office 2016 MSI Retail is not supported by this script" -set "_mOuwp=Detected Office 365/2016 UWP is not supported by this script" -set DO15Ids=ProPlus,Standard,Access,Lync,Excel,Groove,InfoPath,OneNote,Outlook,PowerPoint,Publisher,Word -set DO16Ids=ProPlus,Standard,Access,SkypeforBusiness,Excel,Outlook,PowerPoint,Publisher,Word -set LV16Ids=Mondo,ProPlus,ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness,OneNote,Excel,Outlook,PowerPoint,Publisher,Word -set LR16Ids=%LV16Ids%,Professional,HomeBusiness,HomeStudent,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud -set "ESUEditions=Enterprise,EnterpriseE,EnterpriseN,Professional,ProfessionalE,ProfessionalN,Ultimate,UltimateE,UltimateN" -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -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 -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 "_csm=cscript.exe //NoLogo //Job:WmiMethod "%~nx0?.wsf"" -set "_csp=cscript.exe //NoLogo //Job:WmiPKey "%~nx0?.wsf"" -set "_csd=cscript.exe //NoLogo //Job:MPS "%~nx0?.wsf"" -if %_cwmi% EQU 0 set WMI_VBS=1 -if %WMI_VBS% EQU 0 ( -set "_zz1=wmic path" -set "_zz2=where" -set "_zz3=get" -set "_zz4=/value" -set "_zz5=(" -set "_zz6=)" -set "_zz7="wmic path" -set "_zz8=/value"" -) else ( -set "_zz1=%_csq%" -set "_zz2=" -set "_zz3=" -set "_zz4=" -set "_zz5="" -set "_zz6="" -set "_zz7=%_csq%" -set "_zz8=" -) +:: Check Evaluation version -setlocal EnableDelayedExpansion -pushd "!_work!" +set _eval= +set _evalserv= -if not defined _unattended ( -mode con cols=98 lines=31 -%psc% "&%_buf%" -title %_title% -) else ( -title Online KMS Activation %masver% -) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1 +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set _evalserv=1 +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1 -if defined _gui if %_Debug%==1 mode con cols=98 lines=30 +if defined _eval ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +call :dk_color %Red% "Checking Evaluation Edition [Evaluation editions cannot be activated outside of evaluation period.]" -if %_Debug% EQU 0 ( - set "_Nul1=1>nul" - set "_Nul2=2>nul" - set "_Nul6=2^>nul" - set "_Nul3=1>nul 2>nul" - set "_Pause=pause >nul" - if %Silent% EQU 0 (call :Begin) else (call :Begin >!_run! 2>&1) +if defined _evalserv ( +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( - set "_Nul1=" - set "_Nul2=" - set "_Nul6=" - set "_Nul3=" - set "_log=!_dsk!\%~n0" - if %Silent% EQU 0 ( - echo. - echo Running in Debug Mode... - if not defined _args (echo The window will be closed when finished) else (echo please wait...) - echo. - echo Writing debug log to: - echo "!_log!_Debug.log" - ) - @echo on - @prompt $G - @call :Begin >"!_log!_tmp.log" 2>&1 &cmd /u /c type "!_log!_tmp.log">"!_log!_Debug.log"&del "!_log!_tmp.log" -) -@echo off -if defined _gui if %_Debug%==1 ( -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) -@exit /b -:Begin +goto :ks_office +) +) ::======================================================================================================================================== -set act_failed=0 -set /a act_attempt=0 +:: Check if GVLK is already installed or not -echo. -echo Initializing... +call :k_channel -:: Check Internet connection. Works even if ICMP echo is disabled. +:: Detect Key -call :setserv -for %%a in (%srvlist%) do ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto IntConnected +set key= +set pkey= +set altkey= +set changekey= +set altedition= + +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :ksdata winkey +if not defined key call :k_gvlk %nul% +if defined allapps if not defined key call :kms38fallback + +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 %nul6%') do if not errorlevel 1 set /a UBR=%%b +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( +call :dk_color %Blue% "Windows must be updated to build 19044.2788 or higher for IotEnterpriseS %KS% activation." ) ) -nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto IntConnected - -cls -if %_Debug%==1 ( -echo Error: Internet is not connected. -exit /b +if not defined key if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Activation ID Not Found]" ) -if defined _unattended ( -echo. -call :_color %_Red% "Internet is not connected, continuing the process anyway." +if not defined key if not defined _gvlk ( +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +if not defined skunotfound ( +echo This product does not support %KS% activation. +set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" ) else ( -%eline% -echo Internet is not connected. +echo Required license files not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b +goto :ks_office ) -:IntConnected - -call :getserv - ::======================================================================================================================================== -set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" -set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" -set "_oA14=59a52881-a989-479d-af46-f275c6370663" -set "IFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" -set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -set SSppHook=0 -for /f %%A in ('dir /b /ad %SysPath%\spp\tokens\skus') do ( - if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*GVLK*.xrm-ms" set SSppHook=1 - if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*VLKMS*.xrm-ms" set SSppHook=1 - if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*VL-BYPASS*.xrm-ms" set SSppHook=1 -) -set OsppHook=1 -sc query osppsvc %_Nul3% -if %errorlevel% EQU 1060 set OsppHook=0 +:: Install key -set ESU_KMS=0 -if %winbuild% LSS 9200 for /f %%A in ('dir /b /ad %SysPath%\spp\tokens\channels') do ( - if exist "%SysPath%\spp\tokens\channels\%%A\*VL-BYPASS*.xrm-ms" set ESU_KMS=1 -) -if %ESU_KMS% EQU 1 (set "adoff=and LicenseDependsOn is NULL"&set "addon=and LicenseDependsOn is not NULL") else (set "adoff="&set "addon=") -set ESU_EDT=0 -if %ESU_KMS% EQU 1 for %%A in (%ESUEditions%) do ( - if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%%A\*.xrm-ms" set ESU_EDT=1 +if defined changekey ( +call :dk_color %Blue% "[%altedition%] edition product key will be used to enable %KS% activation." +echo: ) -:: if %ESU_EDT% EQU 1 set SSppHook=1 -set ESU_ADD=0 -if %winbuild% GEQ 9200 ( - set OSType=Win8 - set SppVer=SppExtComObj.exe -) else if %winbuild% GEQ 7600 ( - set OSType=Win7 - set SppVer=sppsvc.exe -) else ( - goto :UnsupportedVersion -) -if %OSType% EQU Win8 reg query "%IFEO%\sppsvc.exe" %_Nul3% && ( -reg delete "%IFEO%\sppsvc.exe" /f %_Nul3% -call :StopService sppsvc +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: ) -if %ActWindows% EQU 0 if %ActOffice% EQU 0 set ActWindows=1 -set _AUR=1 -if %winbuild% GEQ 9600 ( - reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoGenTicket /t REG_DWORD /d 1 /f %_Nul3% - if %winbuild% EQU 14393 reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoAcquireGT /t REG_DWORD /d 1 /f %_Nul3% -) -call :StopService sppsvc -if %OsppHook% NEQ 0 call :StopService osppsvc - -:ReturnHook -call :UpdateOSPPEntry osppsvc.exe - -SET Win10Gov=0 -SET "EditionWMI=" -SET "EditionID=" -IF %winbuild% LSS 14393 if %SSppHook% NEQ 0 GOTO :Main -SET "RegKey=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages" -SET "Pattern=Microsoft-Windows-*Edition~31bf3856ad364e35" -SET "EditionPKG=FFFFFFFF" -FOR /F "TOKENS=8 DELIMS=\" %%A IN ('REG QUERY "%RegKey%" /f "%Pattern%" /k %_Nul6% ^| FIND /I "CurrentVersion"') DO ( - REG QUERY "%RegKey%\%%A" /v "CurrentState" %_Nul2% | FIND /I "0x70" %_Nul1% && ( - FOR /F "TOKENS=3 DELIMS=-~" %%B IN ('ECHO %%A') DO SET "EditionPKG=%%B" - ) -) -IF /I "%EditionPKG:~-7%"=="Edition" ( -SET "EditionID=%EditionPKG:~0,-7%" -) ELSE ( -FOR /F "TOKENS=3 DELIMS=: " %%A IN ('DISM /English /Online /Get-CurrentEdition %_Nul6% ^| FIND /I "Current Edition :"') DO SET "EditionID=%%A" -) -net start sppsvc /y %_Nul3% -set "_qr=%_zz7% SoftwareLicensingProduct %_zz2% %_zz5%ApplicationID='%_wApp%' %adoff% AND PartialProductKey is not NULL%_zz6% %_zz3% LicenseFamily %_zz8%" -FOR /F "TOKENS=2 DELIMS==" %%A IN ('%_qr% %_Nul6%') DO SET "EditionWMI=%%A" -IF "%EditionWMI%"=="" ( -IF %winbuild% GEQ 17063 FOR /F "SKIP=2 TOKENS=2*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionId') DO SET "EditionID=%%B" -IF %winbuild% LSS 14393 ( - FOR /F "SKIP=2 TOKENS=2*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionId') DO SET "EditionID=%%B" - GOTO :Main - ) -) -IF NOT "%EditionWMI%"=="" SET "EditionID=%EditionWMI%" -IF /I "%EditionID%"=="IoTEnterprise" SET "EditionID=Enterprise" -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%"=="ProfessionalCountrySpecific" SET "EditionID=Professional" -IF /I "%EditionID%"=="EnterpriseG" SET Win10Gov=1 -IF /I "%EditionID%"=="EnterpriseGN" SET Win10Gov=1 - -:Main -if defined EditionID (set "_winos=Windows %EditionID% edition") else (set "_winos=Detected Windows") -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %_Nul6%') do if not errorlevel 1 set "_winos=%%b" -set "nKMS=does not support KMS activation..." -set "nEval=Evaluation Editions cannot be activated. Please install full Windows OS." -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1 -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set "nEval=Server Evaluation cannot be activated. Please convert to full Server OS." -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1&set "nEval=Server Evaluation cannot be activated. Please convert to full Server OS." -set "_C16R=" -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && set "_C16R=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" -) -if not defined _C16R reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && set "_C16R=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration" +set _partial= +if not defined key ( +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null AND LicenseDependsOn is NULL" Get PartialProductKey /value %nul6%') do set "_partial=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#" +call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK] ) -set "_C15R=" -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && call set "_C15R=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration" -if not defined _C15R reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && call set "_C15R=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag" + +if defined key ( +call :dk_inskey "[%key%]" ) -set "_C14R=" -if %_wow%==0 (reg query HKLM\SOFTWARE\Microsoft\Office\14.0\CVH /f Click2run /k %_Nul3% && set "_C14R=1") else (reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\CVH /f Click2run /k %_Nul3% && set "_C14R=1") -for %%A in (14,15,16,19,21) do call :officeLoc %%A -if %_O14MSI% EQU 1 set "_C14R=" -set S_OK=1 -call :RunSPP -if %ActOffice% NEQ 0 call :RunOSPP -if %ActOffice% EQU 0 (echo.&echo Office activation is OFF...) +::======================================================================================================================================== -if exist "!_temp!\crv*.txt" del /f /q "!_temp!\crv*.txt" -if exist "!_temp!\*chk.txt" del /f /q "!_temp!\*chk.txt" -if exist "!_temp!\slmgr.vbs" del /f /q "!_temp!\slmgr.vbs" -call :StopService sppsvc -if %OsppHook% NEQ 0 call :StopService osppsvc +:ks_office -sc start sppsvc trigger=timer;sessionid=0 %_Nul3% +if not %_actoff%==1 goto :ks_activate -goto TheEnd +call :ks_setspp -:RunSPP -set spp=SoftwareLicensingProduct -set sps=SoftwareLicensingService -set W1nd0ws=1 -set WinPerm=0 -set WinVL=0 -set Off1ce=0 -set RanR2V=0 -set aC2R21=0 -set aC2R19=0 -set aC2R16=0 -set aC2R15=0 -if %winbuild% GEQ 9200 if %ActOffice% NEQ 0 call :sppoff -set "_qr=%_zz1% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set WinVL=1) -if %WinVL% EQU 0 ( -if %ActWindows% EQU 0 ( - echo.&echo Windows activation is OFF... - ) else ( - if %SSppHook% EQU 0 ( - echo.&echo %_winos% %nKMS% - if defined _eval echo %nEval% - ) else ( - echo.&echo Failed checking KMS Activation ID^(s^) for Windows. &call :CheckWS - exit /b - ) - ) -) -if %WinVL% EQU 0 if %Off1ce% EQU 0 exit /b -set _gvlk=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -if %winbuild% GEQ 10240 %_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set _gvlk=1) -set gpr=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% GracePeriodRemaining %_zz8%" -if %winbuild% GEQ 10240 if %SkipKMS38% NEQ 0 if %_gvlk% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set "gpr=%%A" -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL" %_zz3% LicenseFamily %_zz4%" -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set W1nd0ws=0 -%_qr% %_Nul2% | findstr /i EnterpriseG %_Nul1% && (call set W1nd0ws=1) -) -set "_qr=%_zz7% %sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr%') do set slsv=%%A -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -if %winbuild% GEQ 9200 ( -if not %xOS%==x86 ( -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 %_Nul3% -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" /reg:32 %_Nul3% -reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 %_Null% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 %_Nul3% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" /reg:32 %_Nul3% -) -reg delete "HKLM\%SPPk%\%_oApp%" /f %_Null% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -if %W1nd0ws% EQU 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkwin) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %adoff% %_zz6% %_zz3% ID %_zz8%" -if %W1nd0ws% EQU 1 if %ActWindows% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkwin) -:: set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %addon% %_zz6% %_zz3% ID %_zz8%" -:: if %ESU_EDT% EQU 1 if %ActWindows% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :esuchk) -if %W1nd0ws% EQU 1 if %ActWindows% EQU 0 (echo.&echo Windows activation is OFF...) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' and Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -if %Off1ce% EQU 1 if %ActOffice% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkoff 1) -reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing %_Null% -reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching %_Null% -exit /b +:: Check ohook install -:sppoff -set OffUWP=0 -if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %_Nul3% && ( -dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %_Nul3% && set OffUWP=1 -if not %xOS%==x86 dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %_Nul3% && set OffUWP=1 -) -rem nothing installed -if %loc_off21% EQU 0 if %loc_off19% EQU 0 if %loc_off16% EQU 0 if %loc_off15% EQU 0 ( -if %winbuild% GEQ 9200 ( - if %OffUWP% EQU 0 (echo.&echo No Installed Office 2013-2021 Product Detected...) else (echo.&echo %_mOuwp%) - exit /b - ) -if %winbuild% LSS 9200 (if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b)) -) -if %vNextOverride% EQU 1 if %AutoR2V% EQU 1 ( -set sub_o365=0 -set sub_proj=0 -set sub_vsio=0 -if %sub_next% EQU 1 reg delete HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing /f %_Nul3% -) -set Off1ce=1 -set _sC2R=sppoff -set _fC2R=ReturnSPP - -set vol_off14=0&set vol_off15=0&set vol_off16=0&set vol_off19=0&set vol_off21=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' AND NOT Name like '%%MondoR_KMS_Automation%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" 2>&1 -find /i "Office 21" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off21=1) -find /i "Office 19" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off19=1) -find /i "Office 16" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off16=1) -find /i "Office 15" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off15=1) -if %winbuild% LSS 9200 find /i "Office 14" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off14=1) -for %%A in (14,15,16,19,21) do if !loc_off%%A! EQU 0 set vol_off%%A=0 -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%'" %_zz3% LicenseFamily %_zz4%" -if %vol_off16% EQU 1 find /i "Office16MondoVL_KMS_Client" "!_temp!\sppchk.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% || (set vol_off16=0) -) -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%'" %_zz3% LicenseFamily %_zz4%" -if %vol_off15% EQU 1 find /i "OfficeMondoVL_KMS_Client" "!_temp!\sppchk.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% || (set vol_off15=0) -) - -set ret_off14=0&set ret_off15=0&set ret_off16=0&set ret_off19=0&set ret_off21=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND NOT Name like '%%O365%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" 2>&1 -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 21" %_Nul1% && (set ret_off21=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 19" %_Nul1% && (set ret_off19=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 16" %_Nul1% && (set ret_off16=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 15" %_Nul1% && (set ret_off15=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oA14%'%_zz6% %_zz3% Description %_zz4%" -if %winbuild% LSS 9200 if %vol_off14% EQU 0 %_qr% %_Nul2% | findstr /i channel %_Nul1% && (set ret_off14=1) - -set run_off21=0&set prr_off21=0&set prv_off21=0 -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 0 set run_off21=1 -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 1 ( -for %%a in (%DO16Ids%) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -for %%a in (Professional) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21ProPlus2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21Standard2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -) -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 1 if %prv_off21% LSS %prr_off21% (set vol_off21=0&set run_off21=1) - -set run_off19=0&set prr_off19=0&set prv_off19=0 -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 0 set run_off19=1 -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 1 ( -for %%a in (%DO16Ids%) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -for %%a in (Professional) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19ProPlus2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19Standard2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -) -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 1 if %prv_off19% LSS %prr_off19% (set vol_off19=0&set run_off19=1) - -set run_off16=0&set prr_off16=0&set prv_off16=0 -if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R ( -for %%a in (%DO16Ids%) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -for %%a in (Professional) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16ProPlusVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21ProPlus2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19ProPlus2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16StandardVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21Standard2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19Standard2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -) -if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R if %prv_off16% LSS %prr_off16% (set vol_off16=0&set run_off16=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%' %_zz6% %_zz3% LicenseFamily %_zz4%" -if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_o365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( -find /i "Office16MondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off16=1 -) - -set run_off15=0&set prr_off15=0&set prv_off15=0 -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 0 if defined _C15R set run_off15=1 -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 1 if defined _C15R ( -for %%a in (%DO15Ids%) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -for %%a in (Professional) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "OfficeProPlusVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "OfficeStandardVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -) -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 1 if defined _C15R if %prv_off15% LSS %prr_off15% (set vol_off15=0&set run_off15=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%' %_zz6% %_zz3% LicenseFamily %_zz4%" -if %loc_off15% EQU 1 if %run_off15% EQU 0 if defined _C15R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( -find /i "OfficeMondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off15=1 -) - -set vol_offgl=1 -if %vol_off21% EQU 0 if %vol_off19% EQU 0 if %vol_off16% EQU 0 if %vol_off15% EQU 0 ( -if %winbuild% GEQ 9200 set vol_offgl=0 -if %winbuild% LSS 9200 if %vol_off14% EQU 0 set vol_offgl=0 -) -rem mixed Volume + Retail -if %run_off21% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off19% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off16% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off15% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -rem all supported Volume + message for unsupported -if %loc_off16% EQU 0 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if %OffUWP% EQU 1 (echo.&echo %_mOuwp%) -if %vol_offgl% EQU 1 ( -if %ret_off16% EQU 1 if %_O16MSI% EQU 1 (echo.&echo %_mO16m%) -if %ret_off15% EQU 1 if %_O15MSI% EQU 1 (echo.&echo %_mO15m%) -if %winbuild% LSS 9200 if %loc_off14% EQU 1 if %vol_off14% EQU 0 (if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%)) -exit /b -) -set Off1ce=0 -rem Retail C2R -if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -:ReturnSPP -rem Retail MSI/C2R or failed C2R-R2V -if %loc_off21% EQU 1 if %vol_off21% EQU 0 ( -if %aC2R21% EQU 1 (echo.&echo %_mO21a%) else (echo.&echo %_mO21c%) +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 ) -if %loc_off19% EQU 1 if %vol_off19% EQU 0 ( -if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%) ) -if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( -if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) + +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 ) -if %loc_off15% EQU 1 if %vol_off15% EQU 0 ( -if defined _C15R (if %aC2R15% EQU 1 (echo.&echo %_mO15a%) else (echo.&echo %_mO15c%)) else if %_O15MSI% EQU 1 (if %ret_off15% EQU 1 echo.&echo %_mO15m%) ) -if %winbuild% LSS 9200 if %loc_off14% EQU 1 if %vol_off14% EQU 0 ( -if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%) ) -exit /b -:sppchkoff -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" -if %winbuild% LSS 9200 find /i "Office 14" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off14% EQU 0 exit /b) -find /i "Office 15" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off15% EQU 0 exit /b) -find /i "Office 16" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off16% EQU 0 exit /b) -find /i "Office 19" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off19% EQU 0 exit /b) -find /i "Office 21" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off21% EQU 0 exit /b) -if %1 EQU 1 (set _officespp=1) else (set _officespp=0) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -for /f "tokens=3 delims==, " %%G in ('%_qr%') do set OffVer=%%G -call :offchk%OffVer% -exit /b +if defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) -:sppchkwin -set _officespp=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -if %winbuild% GEQ 14393 if %WinPerm% EQU 0 if %_gvlk% EQU 0 %_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set _gvlk=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% LicenseStatus %_zz4%" -%_qr% %_Nul2% | findstr "1" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -if %winbuild% GEQ 14393 if %_gvlk% EQU 1 exit /b -if %WinPerm% EQU 1 exit /b -if %winbuild% LSS 10240 (call :winchk&exit /b) -for %%A in ( -b71515d9-89a2-4c60-88c8-656fbcca7f3a,af43f7f0-3b1e-4266-a123-1fdb53f4323b,075aca1f-05d7-42e5-a3ce-e349e7be7078 -11a37f09-fb7f-4002-bd84-f3ae71d11e90,43f2ab05-7c87-4d56-b27c-44d0f9a3dabd,2cf5af84-abab-4ff0-83f8-f040fb2576eb -6ae51eeb-c268-4a21-9aae-df74c38b586d,ff808201-fec6-4fd4-ae16-abbddade5706,34260150-69ac-49a3-8a0d-4a403ab55763 -4dfd543d-caa6-4f69-a95f-5ddfe2b89567,5fe40dd6-cf1f-4cf2-8729-92121ac2e997,903663f7-d2ab-49c9-8942-14aa9e0a9c72 -2cc171ef-db48-4adc-af09-7c574b37f139,5b2add49-b8f4-42e0-a77c-adad4efeeeb1 -) do ( -if /i '%app%' EQU '%%A' exit /b -) -if not defined EditionID (call :winchk&exit /b) -if %winbuild% LSS 14393 (call :winchk&exit /b) -if /i '%app%' EQU '32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee' if /i %EditionID% NEQ EnterpriseS exit /b -if /i '%app%' EQU 'ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69' if /i %EditionID% NEQ CloudEdition exit /b -if /i '%app%' EQU 'd30136fc-cb4b-416e-a23d-87207abc44a9' if /i %EditionID% NEQ CloudEditionN exit /b -if /i '%app%' EQU '0df4f814-3f57-4b8b-9a9d-fddadcd69fac' if /i %EditionID% NEQ CloudE exit /b -if /i '%app%' EQU 'e0c42288-980c-4788-a014-c080d2e1926e' if /i %EditionID% NEQ Education exit /b -if /i '%app%' EQU '73111121-5638-40f6-bc11-f1d7b0d64300' if /i %EditionID% NEQ Enterprise exit /b -if /i '%app%' EQU '2de67392-b7a7-462a-b1ca-108dd189f588' if /i %EditionID% NEQ Professional exit /b -if /i '%app%' EQU '3f1afc82-f8ac-4f6c-8005-1d233e606eee' if /i %EditionID% NEQ ProfessionalEducation exit /b -if /i '%app%' EQU '82bbc092-bc50-4e16-8e18-b74fc486aec3' if /i %EditionID% NEQ ProfessionalWorkstation exit /b -if /i '%app%' EQU '3c102355-d027-42c6-ad23-2e7ef8a02585' if /i %EditionID% NEQ EducationN exit /b -if /i '%app%' EQU 'e272e3e2-732f-4c65-a8f0-484747d0d947' if /i %EditionID% NEQ EnterpriseN exit /b -if /i '%app%' EQU 'a80b5abf-76ad-428b-b05d-a47d2dffeebf' if /i %EditionID% NEQ ProfessionalN exit /b -if /i '%app%' EQU '5300b18c-2e33-4dc2-8291-47ffcec746dd' if /i %EditionID% NEQ ProfessionalEducationN exit /b -if /i '%app%' EQU '4b1571d3-bafb-4b40-8087-a961be2caf65' if /i %EditionID% NEQ ProfessionalWorkstationN exit /b -if /i '%app%' EQU '58e97c99-f377-4ef1-81d5-4ad5522b5fd8' if /i %EditionID% NEQ Core exit /b -if /i '%app%' EQU 'cd918a57-a41b-4c82-8dce-1a538e221a83' if /i %EditionID% NEQ CoreSingleLanguage exit /b -if /i '%app%' EQU 'ec868e65-fadf-4759-b23e-93fe37f2cc29' if /i %EditionID% NEQ ServerRdsh exit /b -if /i '%app%' EQU 'e4db50ea-bda1-4566-b047-0ca50abc6f07' if /i %EditionID% NEQ ServerRdsh exit /b -set "_qr=%_zz1% %spp% %_zz2% "Description like '%%KMSCLIENT%%'" %_zz3% ID %_zz4%" -if /i "%app%" EQU "e4db50ea-bda1-4566-b047-0ca50abc6f07" ( -%_qr% | findstr /i "ec868e65-fadf-4759-b23e-93fe37f2cc29" %_Nul3% && (exit /b) -) -call :winchk -exit /b +:: Check unsupported office versions -:winchk -if not defined tok (if %winbuild% GEQ 9200 (set "tok=4") else (set "tok=7")) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%LicenseStatus='1' and Description like '%%KMSCLIENT%%' %adoff% %_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && (exit /b) -echo. -set "_qr=%_zz1% %spp% %_zz2% %_zz5%LicenseStatus='1' and GracePeriodRemaining='0' %adoff% and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && ( -set WinPerm=1 -) -set WinOEM=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Name %_zz4%" -if %WinPerm% EQU 0 %_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && set WinOEM=1 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Description %_zz8%" -if %WinOEM% EQU 1 ( -for /f "tokens=%tok% delims=, " %%G in ('%_qr%') do set "channel=%%G" -for %%A in (VOLUME_MAK, RETAIL, OEM_DM, OEM_SLP, OEM_COA, OEM_COA_SLP, OEM_COA_NSLP, OEM_NONSLP, OEM) do if /i "%%A"=="!channel!" set WinPerm=1 -) -if %WinPerm% EQU 0 ( -copy /y %SysPath%\slmgr.vbs "!_temp!\slmgr.vbs" %_Nul3% -cscript //nologo "!_temp!\slmgr.vbs" /xpr %_Nul2% | findstr /i "permanently" %_Nul3% && set WinPerm=1 -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Name %_zz8%" -if %WinPerm% EQU 1 ( -for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Checking: %%x -echo Product is Permanently Activated. -exit /b -) -call :insKey -exit /b +set o14c2r= +set o16uwp= -:esuchk -set _officespp=0 -set ESU_ADD=1 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% LicenseStatus %_zz4%" -%_qr% %_Nul2% | findstr "1" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='77db037b-95c3-48d7-a3ab-a9c6d41093e0'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "3fcc2df2-f625-428d-909a-1f76efc849b6" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='0e00c25d-8795-4fb7-9572-3803d91b6880'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "dadfcd24-6e37-47be-8f7f-4ceda614cece" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='4220f546-f522-46df-8202-4d07afd26454'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "0c29c85e-12d7-4af8-8e4d-ca1e424c480c" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='553673ed-6ddf-419c-a153-b760283472fd'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "f2b21bfc-a6b0-4413-b4bb-9f06b55f2812" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='04fa0286-fa74-401e-bbe9-fbfbb158010d'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "bfc078d0-8c7f-475c-8519-accc46773113" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='16c08c85-0c8b-4009-9b2b-f1f7319e45f9'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "23c6188f-c9d8-457e-81b6-adb6dacb8779" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='8e7bfb1e-acc1-4f56-abae-b80fce56cd4b'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "e7cce015-33d6-41c1-9831-022ba63fe1da" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -call :insKey -exit /b +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office +%nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R +%nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -:RunOSPP -set spp=OfficeSoftwareProtectionProduct -set sps=OfficeSoftwareProtectionService -set Off1ce=0 -set RanR2V=0 -set aC2R21=0 -set aC2R19=0 -set aC2R16=0 -set aC2R15=0 -if %winbuild% LSS 9200 (set "aword=2010-2021") else (set "aword=2010") -if %OsppHook% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b) -if %winbuild% GEQ 9200 if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b) -set err_offsvc=0 -net start osppsvc /y %_Nul3% || ( -sc start osppsvc %_Nul3% -if !errorlevel! EQU 1053 set err_offsvc=1 -) -if %err_offsvc% EQU 1 (echo.&echo Error: osppsvc service is not running...&exit /b) -if %winbuild% GEQ 9200 call :oppoff -if %winbuild% LSS 9200 call :sppoff -if %Off1ce% EQU 0 exit /b -set "vPrem="&set "vProf=" -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='OfficeVisioPrem-MAK'%_zz6% %_zz3% LicenseStatus %_zz8%" -if %loc_off14% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set vPrem=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='OfficeVisioPro-MAK'%_zz6% %_zz3% LicenseStatus %_zz8%" -if %loc_off14% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set vProf=%%A -set "_qr=%_zz7% %sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set slsv=%%A -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -set "_qr=%_zz7% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkoff 2) -reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing %_Null% -reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching %_Null% -exit /b +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP -:oppoff -set "_qr=%_zz1% %spp% %_zz3% Description %_zz4%" -%_qr% %_Nul2% | findstr /i KMSCLIENT %_Nul1% && ( -set Off1ce=1 -exit /b +if not "%o14c2r%%o16uwp%"=="" ( +echo: +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" ) -set ret_off14=0 -%_qr% %_Nul2% | findstr /i channel %_Nul1% && (set ret_off14=1) -if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%) -exit /b -:offchk -set ls=0 -set ls2=0 -set ls3=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~1'%_zz6% %_zz3% LicenseStatus %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~3'%_zz6% %_zz3% LicenseStatus %_zz8%" -if /i not "%~3"=="" for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls2=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~5'%_zz6% %_zz3% LicenseStatus %_zz8%" -if /i not "%~5"=="" for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls3=%%A -if "%ls3%"=="1" ( -echo Checking: %~6 -echo Product is Permanently Activated. -exit /b -) -if "%ls2%"=="1" ( -echo Checking: %~4 -echo Product is Permanently Activated. -exit /b -) -if "%ls%"=="1" ( -echo Checking: %~2 -echo Product is Permanently Activated. -exit /b +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 ) -call :insKey -exit /b -:offchk21 -if /i '%app%' EQU 'f3fb2d68-83dd-4c8b-8f09-08e0d950ac3b' exit /b -if /i '%app%' EQU '76093b1b-7057-49d7-b970-638ebcbfd873' exit /b -if /i '%app%' EQU 'a3b44174-2451-4cd6-b25f-66638bfb9046' exit /b -if /i '%app%' EQU 'fbdb3e18-a8ef-4fb3-9183-dffd60bd0984' ( -call :offchk "21ProPlus2021VL_MAK_AE1" "Office ProPlus 2021" "21ProPlus2021VL_MAK_AE2" -exit /b -) -if /i '%app%' EQU '080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3' ( -call :offchk "21Standard2021VL_MAK_AE" "Office Standard 2021" -exit /b -) -if /i '%app%' EQU '76881159-155c-43e0-9db7-2d70a9a3a4ca' ( -call :offchk "21ProjectPro2021VL_MAK_AE1" "Project Pro 2021" "21ProjectPro2021VL_MAK_AE2" -exit /b -) -if /i '%app%' EQU '6dd72704-f752-4b71-94c7-11cec6bfc355' ( -call :offchk "21ProjectStd2021VL_MAK_AE" "Project Standard 2021" -exit /b -) -if /i '%app%' EQU 'fb61ac9a-1688-45d2-8f6b-0674dbffa33c' ( -call :offchk "21VisioPro2021VL_MAK_AE" "Visio Pro 2021" -exit /b -) -if /i '%app%' EQU '72fce797-1884-48dd-a860-b2f6a5efd3ca' ( -call :offchk "21VisioStd2021VL_MAK_AE" "Visio Standard 2021" -exit /b -) -call :insKey -exit /b +::======================================================================================================================================== -:offchk19 -if /i '%app%' EQU '0bc88885-718c-491d-921f-6f214349e79c' exit /b -if /i '%app%' EQU 'fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9' exit /b -if /i '%app%' EQU '500f6619-ef93-4b75-bcb4-82819998a3ca' exit /b -if /i '%app%' EQU '85dd8b5f-eaa4-4af3-a628-cce9e77c9a03' ( -call :offchk "19ProPlus2019VL_MAK_AE" "Office ProPlus 2019" -exit /b -) -if /i '%app%' EQU '6912a74b-a5fb-401a-bfdb-2e3ab46f4b02' ( -call :offchk "19Standard2019VL_MAK_AE" "Office Standard 2019" -exit /b -) -if /i '%app%' EQU '2ca2bf3f-949e-446a-82c7-e25a15ec78c4' ( -call :offchk "19ProjectPro2019VL_MAK_AE" "Project Pro 2019" -exit /b -) -if /i '%app%' EQU '1777f0e3-7392-4198-97ea-8ae4de6f6381' ( -call :offchk "19ProjectStd2019VL_MAK_AE" "Project Standard 2019" -exit /b -) -if /i '%app%' EQU '5b5cf08f-b81a-431d-b080-3450d8620565' ( -call :offchk "19VisioPro2019VL_MAK_AE" "Visio Pro 2019" -exit /b -) -if /i '%app%' EQU 'e06d7df3-aad0-419d-8dfb-0ac37e2bdf39' ( -call :offchk "19VisioStd2019VL_MAK_AE" "Visio Standard 2019" -exit /b -) -call :insKey -exit /b +:: Check supported office versions -:offchk16 -if /i '%app%' EQU 'd450596f-894d-49e0-966a-fd39ed4c4c64' ( -call :offchk "16ProPlusVL_MAK" "Office ProPlus 2016" -exit /b -) -if /i '%app%' EQU 'dedfa23d-6ed1-45a6-85dc-63cae0546de6' ( -call :offchk "16StandardVL_MAK" "Office Standard 2016" -exit /b -) -if /i '%app%' EQU '4f414197-0fc2-4c01-b68a-86cbb9ac254c' ( -call :offchk "16ProjectProVL_MAK" "Project Pro 2016" -exit /b -) -if /i '%app%' EQU 'da7ddabc-3fbe-4447-9e01-6ab7440b4cd4' ( -call :offchk "16ProjectStdVL_MAK" "Project Standard 2016" -exit /b -) -if /i '%app%' EQU '6bf301c1-b94a-43e9-ba31-d494598c47fb' ( -call :offchk "16VisioProVL_MAK" "Visio Pro 2016" -exit /b -) -if /i '%app%' EQU 'aa2a7821-1827-4c2c-8f1d-4513a34dda97' ( -call :offchk "16VisioStdVL_MAK" "Visio Standard 2016" -exit /b -) -if /i '%app%' EQU '829b8110-0e6f-4349-bca4-42803577788d' ( -call :offchk "16ProjectProXC2RVL_MAKC2R" "Project Pro 2016 C2R" -exit /b -) -if /i '%app%' EQU 'cbbaca45-556a-4416-ad03-bda598eaa7c8' ( -call :offchk "16ProjectStdXC2RVL_MAKC2R" "Project Standard 2016 C2R" -exit /b -) -if /i '%app%' EQU 'b234abe3-0857-4f9c-b05a-4dc314f85557' ( -call :offchk "16VisioProXC2RVL_MAKC2R" "Visio Pro 2016 C2R" -exit /b -) -if /i '%app%' EQU '361fe620-64f4-41b5-ba77-84f8e079b1f7' ( -call :offchk "16VisioStdXC2RVL_MAKC2R" "Visio Standard 2016 C2R" -exit /b -) -call :insKey -exit /b +call :ks_getpath -:offchk15 -if /i '%app%' EQU 'b322da9c-a2e2-4058-9e4e-f59a6970bd69' ( -call :offchk "ProPlusVL_MAK" "Office ProPlus 2013" -exit /b -) -if /i '%app%' EQU 'b13afb38-cd79-4ae5-9f7f-eed058d750ca' ( -call :offchk "StandardVL_MAK" "Office Standard 2013" -exit /b -) -if /i '%app%' EQU '4a5d124a-e620-44ba-b6ff-658961b33b9a' ( -call :offchk "ProjectProVL_MAK" "Project Pro 2013" -exit /b -) -if /i '%app%' EQU '427a28d1-d17c-4abf-b717-32c780ba6f07' ( -call :offchk "ProjectStdVL_MAK" "Project Standard 2013" -exit /b -) -if /i '%app%' EQU 'e13ac10e-75d0-4aff-a0cd-764982cf541c' ( -call :offchk "VisioProVL_MAK" "Visio Pro 2013" -exit /b -) -if /i '%app%' EQU 'ac4efaf0-f81f-4f61-bdf7-ea32b02ab117' ( -call :offchk "VisioStdVL_MAK" "Visio Standard 2013" -exit /b -) -call :insKey -exit /b +sc query ClickToRunSvc %nul% +set error1=%errorlevel% -:offchk14 -if /i '%app%' EQU '6f327760-8c5c-417c-9b61-836a98287e0c' ( -call :offchk "ProPlus-MAK" "Office ProPlus 2010" "ProPlusAcad-MAK" "Office Professional Academic 2010" -exit /b -) -if /i '%app%' EQU '9da2a678-fb6b-4e67-ab84-60dd6a9c819a' ( -call :offchk "Standard-MAK" "Office Standard 2010" "StandardAcad-MAK" "Office Standard Academic 2010" -exit /b -) -if /i '%app%' EQU 'ea509e87-07a1-4a45-9edc-eba5a39f36af' ( -call :offchk "SmallBusBasics-MAK" "Office Small Business Basics 2010" -exit /b -) -if /i '%app%' EQU 'df133ff7-bf14-4f95-afe3-7b48e7e331ef' ( -call :offchk "ProjectPro-MAK" "Project Pro 2010" -exit /b -) -if /i '%app%' EQU '5dc7bf61-5ec9-4996-9ccb-df806a2d0efe' ( -call :offchk "ProjectStd-MAK" "Project Standard 2010" "ProjectStd-MAK2" "Project Standard 2010" -exit /b -) -if /i '%app%' EQU '92236105-bb67-494f-94c7-7f7a607929bd' ( -call :offchk "VisioPrem-MAK" "Visio Premium 2010" "VisioPro-MAK" "Visio Pro 2010" -exit /b -) -if defined vPrem exit /b -if /i '%app%' EQU 'e558389c-83c3-4b29-adfe-5e4d7f46c358' ( -call :offchk "VisioPro-MAK" "Visio Pro 2010" "VisioStd-MAK" "Visio Standard 2010" -exit /b -) -if defined vProf exit /b -if /i '%app%' EQU '9ed833ff-4f92-4f36-b370-8683a4f13275' ( -call :offchk "VisioStd-MAK" "Visio Standard 2010" -exit /b +if defined o16c2r if %error1% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" +set o16c2r= +set error=1 ) -call :insKey -exit /b -:officeLoc -set loc_off%1=0 -set _O%1MSI=0 -if %1 EQU 19 ( -if defined _C16R reg query %_C16R% /v ProductReleaseIds %_Nul2% | findstr 2019 %_Nul1% && set loc_off%1=1 -exit /b +sc query OfficeSvc %nul% +set error2=%errorlevel% + +if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" +set o15c2r= +set error=1 ) -if %1 EQU 21 ( -if defined _C16R reg query %_C16R% /v ProductReleaseIds %_Nul2% | findstr 2021 %_Nul1% && set loc_off%1=1 -exit /b + +if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( +set error=1 +echo: +if not "%o14c2r%%o16uwp%"=="" ( +call :dk_color %Red% "Checking Supported Office Install [Not Found]" +) else ( +call :dk_color %Red% "Checking Installed Office [Not Found]" ) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\%1.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" ( -set loc_off%1=1 -set _O%1MSI=1 +if defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. ) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\%1.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" ( -set loc_off%1=1 -set _O%1MSI=1 +call :dk_color %Blue% "Download and install Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :ks_activate ) -if %1 EQU 16 if defined _C16R ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_C16R% /v ProductReleaseIds') do echo %%b> "!_temp!\c2rchk.txt" -for %%a in (%LV16Ids%,ProjectProX,ProjectStdX,VisioProX,VisioStdX) do ( - findstr /I /C:"%%aVolume" "!_temp!\c2rchk.txt" %_Nul1% && set loc_off%1=1 - ) -for %%a in (%LR16Ids%) do ( - findstr /I /C:"%%aRetail" "!_temp!\c2rchk.txt" %_Nul1% && set loc_off%1=1 - ) -exit /b -) +set multioffice= +if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%%o16uwp%"=="" set multioffice=1 -if %1 EQU 15 if defined _C15R ( -set loc_off%1=1 -exit /b +if defined multioffice ( +echo: +call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommended to install one version only]" ) -if exist "%ProgramFiles%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 -if not %xOS%==x86 if exist "%ProgramW6432%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 -if not %xOS%==x86 if exist "%ProgramFiles(x86)%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 -exit /b +::======================================================================================================================================== -:officeSub -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vsio=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vsio=1 -if %sub_o365% EQU 1 set sub_next=1 -if %sub_proj% EQU 1 set sub_next=1 -if %sub_vsio% EQU 1 set sub_next=1 -exit /b +:: Process Office 15.0 C2R -:insKey -set S_OK=1 -echo. -set "_key=" -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %ESU_ADD% EQU 0 for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Installing Key: %%x -if %ESU_ADD% EQU 1 for /f "tokens=2 delims==f" %%x in ('%_qr%') do echo Installing Key: %%x -set ESU_ADD=0 -call :keys %app% -if "%_key%"=="" (echo No associated KMS Client key found&exit /b) -set "_qr=wmic path %sps% where Version='%slsv%' call InstallProductKey ProductKey="%_key%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %sps% "%_key%"" -%_qr% %_Nul3% -set ERRORCODE=%ERRORLEVEL% -if %ERRORCODE% NEQ 0 ( -cmd /c exit /b %ERRORCODE% -echo Failed: 0x!=ExitCode! -set S_OK=0 -exit /b -) -set "_qr=wmic path %sps% where Version='%slsv%' call RefreshLicenseStatus" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%sps%.Version='%slsv%'" RefreshLicenseStatus" -if %sps% EQU SoftwareLicensingService %_qr% %_Nul3% +if not defined o15c2r goto :ks_starto16c2r -:activate -set S_OK=1 -if %sps% EQU SoftwareLicensingService ( -if %_officespp% EQU 0 (reg delete "HKLM\%SPPk%\%_wApp%\%app%" /f %_Null%) else (reg delete "HKLM\%SPPk%\%_oApp%\%app%" /f %_Null%) -) else ( -reg delete "HKLM\%OPPk%\%_oA14%\%app%" /f %_Null% -reg delete "HKLM\%OPPk%\%_oApp%\%app%" /f %_Null% -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %W1nd0ws% EQU 0 if %_officespp% EQU 0 if %sps% EQU SoftwareLicensingService ( -reg add "HKLM\%SPPk%\%_wApp%\%app%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" %_Nul3% -reg add "HKLM\%SPPk%\%_wApp%\%app%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Checking: %%x -echo Product is KMS 2038 Activated. -set _keepkms38=1 -exit /b -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %act_attempt% LSS 1 ( -if %ESU_ADD% EQU 0 for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Activating: %%x -if %ESU_ADD% EQU 1 for /f "tokens=2 delims==f" %%x in ('%_qr%') do echo Activating: %%x -) - -set ESU_ADD=0 -set "_qr=wmic path %spp% where ID='%app%' call Activate" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%spp%.ID='%app%'" Activate" -%_qr% %_Nul3% -call set ERRORCODE=%ERRORLEVEL% -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073418187 ( -echo Product Activation Failed: 0xC004F035 -if %OSType% EQU Win7 echo Windows 7 cannot be KMS-activated on this computer due to unqualified OEM BIOS. -echo See Read Me for details. -exit /b -) -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -echo See KB2736303 for details. -exit /b -) -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073422315 ( -echo Product Activation Failed: 0xC004E015 -echo Running slmgr.vbs /rilc to mitigate. -cscript //Nologo //B %SysPath%\slmgr.vbs /rilc -) -set gpr=0 -set gpr2=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% GracePeriodRemaining %_zz8%" -for /f "tokens=2 delims==" %%x in ('%_qr%') do (set gpr=%%x&set /a "gpr2=(%%x+1440-1)/1440") -if %act_attempt% LSS 1 if %ERRORCODE% EQU 0 if %gpr% EQU 0 ( -echo Product Activation succeeded, but Remaining Period failed to increase. -if %OSType% EQU Win7 echo This could be related to the error described in KB4487266 -exit /b -) -set Act_OK=0 -if %gpr% EQU 43200 if %_officespp% EQU 0 if %winbuild% GEQ 9200 set Act_OK=1 -if %gpr% EQU 64800 set Act_OK=1 -if %gpr% GTR 259200 if %Win10Gov% EQU 1 set Act_OK=1 -if %gpr% EQU 259200 set Act_OK=1 +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 -if %ERRORCODE% EQU 0 if %Act_OK% EQU 1 ( -call :_color %_Green% "Product Activation Successful" -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set /a act_attempt=0 -exit /b -) +set oVer=15 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") -if not !server_num! gtr %max_servers% ( -if %act_attempt% LSS 3 ( -set /a act_attempt+=1 -call :getserv -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" -if %winbuild% GEQ 9200 ( -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" /reg:32 -) -) -goto :activate -) +echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") ) -cmd /c exit /b %ERRORCODE% -if %ERRORCODE% NEQ 0 ( -call :_color %_Red% "Product Activation Failed: 0x!=ExitCode!" -) else ( -call :_color %_Red% "Product Activation Failed" -) -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set S_OK=0 -set act_failed=1 -set /a act_attempt=0 -exit /b +set "_oLPath=%_oRoot%\Licenses" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" -:StopService -sc query %1 | find /i "STOPPED" %_Nul1% || net stop %1 /y %_Nul3% -sc query %1 | find /i "STOPPED" %_Nul1% || sc stop %1 %_Nul3% -goto :eof +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] -:UpdateOSPPEntry -if /i %1 EQU osppsvc.exe ( -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" %_Nul3% -reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto16c2r ) -goto :eof -:CheckFR +if "%_actprojvis%"=="0" call :oh_fixprids +call :ks_process -set WMIe=0 -call :CheckWS -if %WMIe% EQU 1 ( -echo. -echo %_err% -echo Failed running WMI query check. -) -goto :eof - -:CheckWS -set "_qrw=%_zz1% Win32_ComputerSystem %_zz3% CreationClassName %_zz4%" -set "_qrs=%_zz1% SoftwareLicensingService %_zz3% Version %_zz4%" +::======================================================================================================================================== -%_qrs% %_Nul2% | findstr /r "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" %_Nul1% || ( - set WMIe=1 - %_qrw% %_Nul2% | find /i "ComputerSystem" %_Nul1% && ( - echo Error: SPP is not responding - ) || ( - echo Error: WMI ^& SPP are not responding - ) -) -goto :eof +:ks_starto16c2r -:C2RR2V -set RanR2V=1 -set "_SLMGR=%SysPath%\slmgr.vbs" -if %_Debug% EQU 0 ( -set "_cscript=cscript //Nologo //B" -) else ( -set "_cscript=cscript //Nologo" -) -set _LTSC=0 -set "_tag="&set "_ons= 2016" -sc query ClickToRunSvc %_Nul3% -set error1=%errorlevel% -sc query OfficeSvc %_Nul3% -set error2=%errorlevel% -if %error1% EQU 1060 if %error2% EQU 1060 ( -echo Error: Office C2R service is not detected -goto :%_fC2R% -) -set _Office16=0 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( - set _Office16=1 -) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( - set _Office16=1 -) -set _Office15=0 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( - set _Office15=1 -) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( - set _Office15=1 -) -if %_Office16% EQU 0 if %_Office15% EQU 0 ( -echo Error: Office C2R InstallPath is not detected -goto :%_fC2R% -) - -:Reg16istry -if %_Office16% EQU 0 goto :Reg15istry -set "_InstallRoot=" -set "_ProductIds=" -set "_GUID=" -set "_Config=" -set "_PRIDs=" -set "_LicensesPath=" -set "_Integrator=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_InstallRoot=%%b\root") -if not "%_InstallRoot%"=="" ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_OSPPVBS=%%b\Office16\OSPP.VBS") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul6%') do (set "_GUID=%%b") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_ProductIds=%%b") - set "_Config=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" - set "_PRIDs=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\ProductReleaseIDs" -) else ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_InstallRoot=%%b\root") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_OSPPVBS=%%b\Office16\OSPP.VBS") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul6%') do (set "_GUID=%%b") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_ProductIds=%%b") - set "_Config=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration" - set "_PRIDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\ProductReleaseIDs" -) -set "_LicensesPath=%_InstallRoot%\Licenses16" -set "_Integrator=%_InstallRoot%\integration\integrator.exe" -for /f "skip=2 tokens=2*" %%a in ('"reg query %_PRIDs% /v ActiveConfiguration" %_Nul6%') do set "_PRIDs=%_PRIDs%\%%b" -if "%_ProductIds%"=="" ( -if %_Office15% EQU 0 (echo Error: Office C2R ProductIDs are not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if not exist "%_LicensesPath%\ProPlus*.xrm-ms" ( -if %_Office15% EQU 0 (echo Error: Office C2R Licenses files are not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if not exist "%_Integrator%" ( -if %_Office15% EQU 0 (echo Error: Office C2R Licenses Integrator is not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if exist "%_LicensesPath%\Word2019VL_KMS_Client_AE*.xrm-ms" (set "_tag=2019"&set "_ons= 2019") -if exist "%_LicensesPath%\Word2021VL_KMS_Client_AE*.xrm-ms" (set _LTSC=1) -if %winbuild% LSS 10240 if !_LTSC! EQU 1 (set "_tag=2021"&set "_ons= 2021") -if %_Office15% EQU 0 goto :CheckC2R - -:Reg15istry -set "_Install15Root=" -set "_Product15Ids=" -set "_Con15fig=" -set "_PR15IDs=" -set "_OSPP15Ready=" -set "_Licenses15Path=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do (set "_Install15Root=%%b\root") -if not "%_Install15Root%"=="" ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" - set "_PR15IDs=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\ProductReleaseIDs" - set "_OSPP15Ready=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration" -) else ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do (set "_Install15Root=%%b\root") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" - set "_PR15IDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\ProductReleaseIDs" - set "_OSPP15Ready=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration" -) -set "_OSPP15ReadT=REG_SZ" -if "%_Product15Ids%"=="" ( -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" - set "_OSPP15Ready=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun" - set "_OSPP15ReadT=REG_DWORD" - ) -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" - set "_OSPP15Ready=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun" - set "_OSPP15ReadT=REG_DWORD" - ) -) -set "_Licenses15Path=%_Install15Root%\Licenses" -if exist "%ProgramFiles%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramFiles%\Microsoft Office\Office15\OSPP.VBS" -) else if exist "%ProgramW6432%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramW6432%\Microsoft Office\Office15\OSPP.VBS" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramFiles(x86)%\Microsoft Office\Office15\OSPP.VBS" -) -if "%_Product15Ids%"=="" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R ProductIDs are not detected&goto :%_fC2R%) else (goto :CheckC2R) -) -if not exist "%_Licenses15Path%\ProPlus*.xrm-ms" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R Licenses files are not detected&goto :%_fC2R%) else (goto :CheckC2R) -) -if %winbuild% LSS 9200 if not exist "%_OSPP15VBS%" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R Licensing tool OSPP.vbs is not detected&goto :%_fC2R%) else (goto :CheckC2R) -) - -:CheckC2R -set _OMSI=0 -if %_Office16% EQU 0 ( -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -) -if %_Office15% EQU 0 ( -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -) -if %winbuild% GEQ 9200 ( -set _spp=SoftwareLicensingProduct -set _sps=SoftwareLicensingService -set "_vbsi=%_SLMGR% /ilc " -set "_vbsf=%_SLMGR% /ilc " -) else ( -set _spp=OfficeSoftwareProtectionProduct -set _sps=OfficeSoftwareProtectionService -set _vbsi="!_OSPP15VBS!" /inslic: -set _vbsf="!_OSPPVBS!" /inslic: -) -set "_wmi=" -set "_qr=%_zz7% %_sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do set _wmi=%%# -if "%_wmi%"=="" ( -echo Error: %_sps% WMI version is not detected -call :CheckWS -goto :%_fC2R% -) -set _Retail=0 -set "_ocq=ApplicationID='%_oApp%' AND LicenseStatus='1' AND PartialProductKey is not NULL" -if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get Description %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt" -set "_qr=%_csq% %_spp% "%_ocq%" Description" -if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvRetail.txt" -find /i "RETAIL channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -find /i "RETAIL(MAK) channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -find /i "TIMEBASED_SUB channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -set rancopp=0 -if %_Retail% EQU 0 if %_OMSI% EQU 0 ( -set rancopp=1 -%_Nul3% powershell "$f=[io.file]::ReadAllText('!_batp!') -split ':cleanlicense\:.*';iex ($f[1]);" -) -set _O16O365=0 -set _C16Msg=0 -set _C15Msg=0 -set "_qr=%_csq% %_spp% "%_ocq%" LicenseFamily" -if %_Retail% EQU 1 if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get LicenseFamily %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt" -if %_Retail% EQU 1 if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvRetail.txt" -set "_qr=%_csq% %_spp% "ApplicationID='%_oApp%'" LicenseFamily" -if %WMI_VBS% EQU 0 wmic path %_spp% where "ApplicationID='%_oApp%'" get LicenseFamily %_Nul2% |findstr /V /R "^$" >"!_temp!\crvVolume.txt" 2>&1 -if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvVolume.txt" 2>&1 - -if %_Office16% EQU 0 goto :R15V - -set _O21Ids=ProPlus2021,ProjectPro2021,VisioPro2021,Standard2021,ProjectStd2021,VisioStd2021,Access2021,SkypeforBusiness2021 -set _O19Ids=ProPlus2019,ProjectPro2019,VisioPro2019,Standard2019,ProjectStd2019,VisioStd2019,Access2019,SkypeforBusiness2019 -set _O16Ids=ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness -set _A21Ids=Excel2021,Outlook2021,PowerPoint2021,Publisher2021,Word2021 -set _A19Ids=Excel2019,Outlook2019,PowerPoint2019,Publisher2019,Word2019 -set _A16Ids=Excel,Outlook,PowerPoint,Publisher,Word -set _V21Ids=%_O21Ids%,%_A21Ids% -set _V19Ids=%_O19Ids%,%_A19Ids% -set _V16Ids=Mondo,%_O16Ids%,%_A16Ids%,OneNote -set _R16Ids=%_V16Ids%,Professional,HomeBusiness,HomeStudent,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud -set _RetIds=%_V21Ids%,Professional2021,HomeBusiness2021,HomeStudent2021,%_V19Ids%,Professional2019,HomeBusiness2019,HomeStudent2019,%_R16Ids% -set _Suites=Mondo,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud,ProPlus,Standard,Professional,HomeBusiness,HomeStudent,ProPlus2019,Standard2019,Professional2019,HomeBusiness2019,HomeStudent2019,ProPlus2021,Standard2021,Professional2021,HomeBusiness2021,HomeStudent2021 -set _PrjSKU=ProjectPro,ProjectStd,ProjectPro2019,ProjectStd2019,ProjectPro2021,ProjectStd2021 -set _VisSKU=VisioPro,VisioStd,VisioPro2019,VisioStd2019,VisioPro2021,VisioStd2021 - -echo %_ProductIds%>"!_temp!\crvProductIds.txt" -for %%a in (%_RetIds%,ProPlus) do ( -set _%%a=0 -) -for %%a in (%_RetIds%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProductIds.txt" %_Nul1% && set _%%a=1 -) -if !_LTSC! EQU 0 for %%a in (%_V21Ids%) do ( -set _%%a=0 -) -if !_LTSC! EQU 1 for %%a in (%_V21Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office21%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -for %%a in (%_V19Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office19%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -for %%a in (%_V16Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office16%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -reg query %_PRIDs%\ProPlusRetail.16 %_Nul3% && ( - find /i "Office16ProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -reg query %_PRIDs%\ProPlusVolume.16 %_Nul3% && ( - find /i "Office16ProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -if %_Retail% EQU 1 for %%a in (%_RetIds%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office16%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_Sub" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_PIN" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aE5R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aEDUR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aCO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aXC2RVL_MAKC2R" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office19%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office21%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - ) -) -if %_Retail% EQU 1 reg query %_PRIDs%\ProPlusRetail.16 %_Nul3% && ( - find /i "Office16ProPlusR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) -) -set "_qr=%_zz1% %_spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%'" %_zz3% LicenseFamily %_zz4%" -find /i "Office16MondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% && ( - for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud) do set _%%a=0 - ) -) -if %sub_o365% EQU 1 ( - for %%a in (%_Suites%) do set _%%a=0 -echo. -echo Microsoft Office is activated with a vNext license. -) -if %sub_proj% EQU 1 ( - for %%a in (%_PrjSKU%) do set _%%a=0 -echo. -echo Microsoft Project is activated with a vNext license. -) -if %sub_vsio% EQU 1 ( - for %%a in (%_VisSKU%) do set _%%a=0 -echo. -echo Microsoft Visio is activated with a vNext license. -) - -for %%a in (%_RetIds%,ProPlus) do if !_%%a! EQU 1 ( -set _C16Msg=1 -) -if %_C16Msg% EQU 1 ( -echo. -echo Converting Office C2R Retail-to-Volume: -) -if %_C16Msg% EQU 0 (if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R)) - -for %%# in ("!_LicensesPath!\client-issuance-*.xrm-ms") do ( -%_cscript% %_vbsf%"!_LicensesPath!\%%~nx#" -) -%_cscript% %_vbsf%"!_LicensesPath!\pkeyconfig-office.xrm-ms" - -if !_Mondo! EQU 1 ( -call :InsLic Mondo -) -if !_O365ProPlus! EQU 1 ( -echo O365ProPlus 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365Business! EQU 1 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365Business 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365Business NCHRJ-3VPGW-X73DM-6B36K-3RQ6B -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365SmallBusPrem! EQU 1 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365SmallBusPrem 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365SmallBusPrem 3FBRX-NFP7C-6JWVK-F2YGK-H499R -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365HomePrem! EQU 1 if !_O365SmallBusPrem! EQU 0 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365HomePrem 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365HomePrem 9FNY8-PWWTY-8RY4F-GJMTV-KHGM9 -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365EduCloud! EQU 1 if !_O365HomePrem! EQU 0 if !_O365SmallBusPrem! EQU 0 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365EduCloud 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365EduCloud 8843N-BCXXD-Q84H8-R4Q37-T3CPT -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365ProPlus! EQU 1 set _O16O365=1 -if !_Mondo! EQU 1 if !_O365ProPlus! EQU 0 ( -echo Mondo 2016 Suite -call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R) -) -if !_ProPlus2021! EQU 1 if !_O365ProPlus! EQU 0 ( -echo ProPlus 2021 Suite -call :InsLic ProPlus2021 -) -if !_ProPlus2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 ( -echo ProPlus 2019 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_ProPlus! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 ( -echo ProPlus 2016 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Professional2021! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 ( -echo Professional 2021 Suite -^> ProPlus 2021 Licenses -call :InsLic ProPlus2021 -) -if !_Professional2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 ( -echo Professional 2019 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Professional! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 ( -echo Professional 2016 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Standard2021! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 ( -echo Standard 2021 Suite -call :InsLic Standard2021 -) -if !_Standard2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 ( -echo Standard 2019 Suite -^> Standard%_ons% Licenses -call :InsLic Standard%_tag% -) -if !_Standard! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 ( -echo Standard 2016 Suite -^> Standard%_ons% Licenses -call :InsLic Standard%_tag% -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a2021! EQU 1 ( - echo %%a 2021 SKU - call :InsLic %%a2021 -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a2019! EQU 1 ( -if !_%%a2021! EQU 0 ( - echo %%a 2019 SKU -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a! EQU 1 ( -if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 SKU -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 ( - set _Standard2021=1 - echo %%a 2021 Suite -^> Standard 2021 Licenses - call :InsLic Standard2021 - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 ( - set _Standard2019=1 - echo %%a 2019 Suite -^> Standard%_ons% Licenses - call :InsLic Standard%_tag% - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - set _Standard=1 - echo %%a 2016 Suite -^> Standard%_ons% Licenses - call :InsLic Standard%_tag% - ) -) -for %%a in (%_A21Ids%,OneNote) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 ( - echo %%a App - call :InsLic %%a - ) -) -for %%a in (%_A16Ids%) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (%_A16Ids%) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (Access) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 ( - echo %%a 2021 App - call :InsLic %%a2021 - ) -) -for %%a in (Access) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (Access) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (SkypeforBusiness) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 ( - echo %%a 2021 App - call :InsLic %%a2021 - ) -) -for %%a in (SkypeforBusiness) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (SkypeforBusiness) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R) - -:R15V -set _O15Ids=Standard,ProjectPro,VisioPro,ProjectStd,VisioStd,Access,Lync -set _A15Ids=Excel,Groove,InfoPath,OneNote,Outlook,PowerPoint,Publisher,Word -set _R15Ids=SPD,Mondo,%_O15Ids%,%_A15Ids%,Professional,HomeBusiness,HomeStudent,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem -set _V15Ids=Mondo,%_O15Ids%,%_A15Ids% - -echo %_Product15Ids%>"!_temp!\crvProduct15s.txt" -for %%a in (%_R15Ids%,ProPlus) do ( -set _%%a=0 -) -for %%a in (%_R15Ids%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProduct15s.txt" %_Nul1% && set _%%a=1 -) -for %%a in (%_V15Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProduct15s.txt" %_Nul1% && ( - find /i "Office%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -reg query %_PR15IDs%\Active\ProPlusRetail\x-none %_Nul3% && ( - find /i "OfficeProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -reg query %_PR15IDs%\Active\ProPlusVolume\x-none %_Nul3% && ( - find /i "OfficeProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -if %_Retail% EQU 1 for %%a in (%_R15Ids%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProduct15s.txt" %_Nul1% && ( - find /i "Office%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_Sub" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_PIN" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aCO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - ) -) -if %_Retail% EQU 1 reg query %_PR15IDs%\Active\ProPlusRetail\x-none %_Nul3% && ( - find /i "OfficeProPlusR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) -) -set "_qr=%_zz1% %_spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%'" %_zz3% LicenseFamily %_zz4%" -find /i "OfficeMondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% && ( - for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem) do set _%%a=0 - ) -) - -for %%a in (%_R15Ids%,ProPlus) do if !_%%a! EQU 1 ( -set _C15Msg=1 -) -if %_C15Msg% EQU 1 if %_C16Msg% EQU 0 ( -echo. -echo Converting Office C2R Retail-to-Volume: -) -if %_C15Msg% EQU 0 goto :GVLKC2R - -for %%# in ("!_Licenses15Path!\client-issuance-*.xrm-ms") do ( -%_cscript% %_vbsi%"!_Licenses15Path!\%%~nx#" -) -%_cscript% %_vbsi%"!_Licenses15Path!\pkeyconfig-office.xrm-ms" - -if !_Mondo! EQU 1 ( -call :Ins15Lic Mondo -) -if !_O365ProPlus! EQU 1 if !_O16O365! EQU 0 ( -echo O365ProPlus 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365SmallBusPrem! EQU 1 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365SmallBusPrem 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365SmallBusPrem 3FBRX-NFP7C-6JWVK-F2YGK-H499R -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365HomePrem! EQU 1 if !_O365SmallBusPrem! EQU 0 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365HomePrem 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365HomePrem 9FNY8-PWWTY-8RY4F-GJMTV-KHGM9 -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365Business! EQU 1 if !_O365HomePrem! EQU 0 if !_O365SmallBusPrem! EQU 0 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365Business 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365Business MCPBN-CPY7X-3PK9R-P6GTT-H8P8Y -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_Mondo! EQU 1 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -echo Mondo 2013 Suite -call :Ins15Lic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -goto :GVLKC2R -) -if !_SPD! EQU 1 if !_Mondo! EQU 0 if !_O365ProPlus! EQU 0 ( -echo SharePoint Designer 2013 App -^> Mondo 2013 Licenses -call :Ins15Lic Mondo -goto :GVLKC2R -) -if !_ProPlus! EQU 1 if !_O365ProPlus! EQU 0 ( -echo ProPlus 2013 Suite -call :Ins15Lic ProPlus -) -if !_Professional! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 ( -echo Professional 2013 Suite -^> ProPlus 2013 Licenses -call :Ins15Lic ProPlus -) -if !_Standard! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 ( -echo Standard 2013 Suite -call :Ins15Lic Standard -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a! EQU 1 ( -echo %%a 2013 SKU -call :Ins15Lic %%a -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 if !_Standard! EQU 0 ( - set _Standard=1 - echo %%a 2013 Suite -^> Standard 2013 Licenses - call :Ins15Lic Standard - ) -) -for %%a in (%_A15Ids%) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 if !_Standard! EQU 0 ( - echo %%a 2013 App - call :Ins15Lic %%a - ) -) -for %%a in (Access) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 ( - echo %%a 2013 App - call :Ins15Lic %%a - ) -) -for %%a in (Lync) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 ( - echo SkypeforBusiness 2015 App - call :Ins15Lic %%a - ) -) -goto :GVLKC2R - -:InsLic -set "_ID=%1Volume" -set "_patt=%1VL_" -set "_pkey=" -set "_kpey=" -if not "%2"=="" ( -set "_ID=%1Retail" -set "_patt=%1R_" -set "_pkey=PidKey=%2" -set "_kpey=%2" -) -reg delete %_Config% /f /v %_ID%.OSPPReady %_Nul3% -"!_Integrator!" /I /License PRIDName=%_ID%.16 %_pkey% PackageGUID="%_GUID%" PackageRoot="!_InstallRoot!" %_Nul1% - -set fallback=0 -set "_qr=wmic path %_spp% where ApplicationID='%_oApp%' get LicenseFamily" -if %WMI_VBS% NEQ 0 set "_qr=%_csq% %_spp% "ApplicationID='%_oApp%'" LicenseFamily" -%_qr% %_Nul2% | find /i "%_patt%" %_Nul1% || (set fallback=1) -if %fallback% equ 0 goto :IntOK - -set "_lsfs=" -for %%# in ("!_LicensesPath!\%_patt%*.xrm-ms") do ( -set "_lsfs=!_lsfs! %%~nx#" -) -if defined _kpey ( - for %%# in ("!_LicensesPath!\%1DemoR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1E5R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1EDUR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1MSDNR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1O365R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1CO365R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) -) -for %%# in (!_lsfs!) do ( -%_cscript% %_vbsf%"!_LicensesPath!\%%#" -) -set "_qr=wmic path %_sps% where Version='%_wmi%' call InstallProductKey ProductKey="%_kpey%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %_sps% "%_kpey%"" -if defined _kpey %_qr% %_Nul3% - -:IntOK -reg add %_Config% /f /v %_ID%.OSPPReady /t REG_SZ /d 1 %_Nul1% -reg query %_Config% /v ProductReleaseIds | findstr /I "%_ID%" %_Nul1% -if %errorlevel% NEQ 0 ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_Config% /v ProductReleaseIds') do reg add %_Config% /v ProductReleaseIds /t REG_SZ /d "%%b,%_ID%" /f %_Nul1% -) -exit /b +:: Process Office 16.0 C2R -:Ins15Lic -set "_ID=%1Volume" -set "_patt=%1VL_" -set "_pkey=" -if not "%2"=="" ( -set "_ID=%1Retail" -set "_patt=%1R_" -set "_pkey=%2" -) -reg delete %_OSPP15Ready% /f /v %_ID%.OSPPReady %_Nul3% -for %%# in ("!_Licenses15Path!\%_patt%*.xrm-ms") do ( -%_cscript% %_vbsi%"!_Licenses15Path!\%%~nx#" -) -set "_qr=wmic path %_sps% where Version='%_wmi%' call InstallProductKey ProductKey="%_pkey%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %_sps% "%_pkey%"" -if defined _pkey %_qr% %_Nul3% -reg add %_OSPP15Ready% /f /v %_ID%.OSPPReady /t %_OSPP15ReadT% /d 1 %_Nul1% -reg query %_Con15fig% %_Nul2% | findstr /I "%_ID%" %_Nul1% -if %errorlevel% NEQ 0 ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_Con15fig% %_Nul6%') do reg add %_Con15fig% /t REG_SZ /d "%%b,%_ID%" /f %_Nul1% -) -exit /b +if not defined o16c2r goto :ks_startmsi -:GVLKC2R -set _CtRMsg=0 -if %_C16Msg% EQU 1 set _CtRMsg=1 -if %_C15Msg% EQU 1 set _CtRMsg=1 -if %_Office16% EQU 1 ( -for %%a in (%_RetIds%,ProPlus) do set "_%%a=" -for %%A in (19,21) do call :officeLoc %%A -) -if %_Office15% EQU 1 ( -for %%a in (%_R15Ids%,ProPlus) do set "_%%a=" -) -set "_qr=wmic path %_sps% where version='%_wmi%' call RefreshLicenseStatus" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%_sps%.Version='%_wmi%'" RefreshLicenseStatus" -if %winbuild% GEQ 9200 %_qr% %_Nul3% -if exist "%SysPath%\spp\store_test\2.0\tokens.dat" if %rancopp% EQU 1 if %_CtRMsg% EQU 1 ( -%_cscript% %_SLMGR% /rilc -if !ERRORLEVEL! NEQ 0 %_cscript% %_SLMGR% /rilc -) -goto :%_sC2R% - -:keys -if "%~1"=="" exit /b -set yh=- -goto :%1 %_Nul2% - -:: Windows 11 [Ni] -:59eb965c-9150-42b7-a0ec-22151b9897c5 -set "_key=KBN8V%yh%HFGQ4%yh%MGXVD%yh%347P6%yh%PDQGT" &:: IoT Enterprise LTSC -exit /b +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 -:: Windows 11 [Co] -:ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69 -set "_key=37D7F%yh%N49CB%yh%WQR8W%yh%TBJ73%yh%FM8RX" &:: SE {Cloud} -exit /b +set oVer=16 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") -:d30136fc-cb4b-416e-a23d-87207abc44a9 -set "_key=6XN7V%yh%PCBDC%yh%BDBRH%yh%8DQY7%yh%G6R44" &:: SE N {Cloud N} -exit /b +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) +set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% -:: Windows 10 [RS5] -:32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee -set "_key=M7XTQ%yh%FN8P6%yh%TTKYV%yh%9D4CC%yh%J462D" &:: Enterprise LTSC 2019 -exit /b +set "_oLPath=%_oRoot%\Licenses16" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" -:7103a333-b8c8-49cc-93ce-d37c09687f92 -set "_key=92NFX%yh%8DJQP%yh%P6BBQ%yh%THF9C%yh%7CG2H" &:: Enterprise LTSC 2019 N -exit /b +echo: +echo Processing Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] -:ec868e65-fadf-4759-b23e-93fe37f2cc29 -set "_key=CPWHC%yh%NT2C7%yh%VYW78%yh%DHDB2%yh%PG3GK" &:: Enterprise for Virtual Desktops -exit /b +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_startmsi +) -:0df4f814-3f57-4b8b-9a9d-fddadcd69fac -set "_key=NBTWJ%yh%3DR69%yh%3C4V8%yh%C26MC%yh%GQ9M6" &:: Lean -exit /b +if "%_actprojvis%"=="0" call :oh_fixprids +call :ks_process -:: Windows 10 [RS3] -:82bbc092-bc50-4e16-8e18-b74fc486aec3 -set "_key=NRG8B%yh%VKK3Q%yh%CXVCJ%yh%9G2XF%yh%6Q84J" &:: Pro Workstation -exit /b +::======================================================================================================================================== -:4b1571d3-bafb-4b40-8087-a961be2caf65 -set "_key=9FNHH%yh%K3HBT%yh%3W4TD%yh%6383H%yh%6XYWF" &:: Pro Workstation N -exit /b +:ks_startmsi -:e4db50ea-bda1-4566-b047-0ca50abc6f07 -set "_key=7NBT4%yh%WGBQX%yh%MP4H7%yh%QXFF8%yh%YP3KX" &:: Enterprise Remote Server -exit /b +if defined o14msi call :ks_setspp 14 +if defined o14msi call :ks_processmsi 14 %o14msi_reg% +call :ks_setspp +if defined o15msi call :ks_processmsi 15 %o15msi_reg% +if defined o16msi call :ks_processmsi 16 %o16msi_reg% -:: Windows 10 [RS2] -:e0b2d383-d112-413f-8a80-97f373a5820c -set "_key=YYVX9%yh%NTFWV%yh%6MDM3%yh%9PT4T%yh%4M68B" &:: Enterprise G -exit /b +::======================================================================================================================================== -:e38454fb-41a4-4f59-a5dc-25080e354730 -set "_key=44RPN%yh%FTY23%yh%9VTTB%yh%MP9BX%yh%T84FV" &:: Enterprise G N -exit /b +echo: +call :oh_clearblock +if "%o16msi%%o15msi%"=="" if not "%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey +call :oh_licrefresh -:: Windows 10 [RS1] -:2d5a5a60-3040-48bf-beb0-fcd770c20ce0 -set "_key=DCPHK%yh%NFMTC%yh%H88MJ%yh%PFHPY%yh%QJ4BJ" &:: Enterprise 2016 LTSB -exit /b +::======================================================================================================================================== -:9f776d83-7156-45b2-8a5c-359b9c9f22a3 -set "_key=QFFDN%yh%GRT3P%yh%VKWWX%yh%X7T3R%yh%8B639" &:: Enterprise 2016 LTSB N -exit /b +:ks_activate -:3f1afc82-f8ac-4f6c-8005-1d233e606eee -set "_key=6TP4R%yh%GNPTD%yh%KYYHQ%yh%7B7DP%yh%J447Y" &:: Pro Education -exit /b +:: Opt out of sending KMSclient activation data to Microsoft +:: https://learn.microsoft.com/windows/privacy/manage-connections-from-windows-operating-system-components-to-microsoft-services#19-software-protection-platform -:5300b18c-2e33-4dc2-8291-47ffcec746dd -set "_key=YVWGF%yh%BXNMC%yh%HTQYQ%yh%CPQ99%yh%66QFC" &:: Pro Education N -exit /b +if %winbuild% GEQ 9600 ( +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoGenTicket /t REG_DWORD /d 1 /f %nul% +if %winbuild% EQU 14393 reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoAcquireGT /t REG_DWORD /d 1 /f %nul% +echo Turn off %KS% AVS Validation [Successful] +) -:: Windows 10 [TH] -:58e97c99-f377-4ef1-81d5-4ad5522b5fd8 -set "_key=TX9XD%yh%98N7V%yh%6WMQ6%yh%BX7FG%yh%H8Q99" &:: Home -exit /b +set "slp=SoftwareLicensingProduct" +set "ospp=OfficeSoftwareProtectionProduct" -:7b9e1751-a8da-4f75-9560-5fadfe3d8e38 -set "_key=3KHY7%yh%WNT83%yh%DGQKR%yh%F7HPR%yh%844BM" &:: Home N -exit /b +echo: +echo Activating Volume Products... +if %_actwin%==1 call :_taskgetids sppwid %slp% windows +if %_actoff%==1 call :_taskgetids sppoid %slp% office +if %_actoff%==1 call :_taskgetids osppid %ospp% office -:cd918a57-a41b-4c82-8dce-1a538e221a83 -set "_key=7HNRX%yh%D7KGG%yh%3K4RQ%yh%4WPJ4%yh%YTDFH" &:: Home Single Language -exit /b +if not defined sppwid if not defined sppoid if not defined osppid ( +if not defined keyerror ( +echo No installed Volume Windows / Office products found. +) else ( +call :dk_color %Red% "Failed to get installed Volume Windows / Office products." +) +call :_taskgetserv +call :_taskregserv +) -:a9107544-f4a0-4053-a96a-1479abdef912 -set "_key=PVMJN%yh%6DFY6%yh%9CCP6%yh%7BKTT%yh%D3WVR" &:: Home China -exit /b +call :_taskact +if not defined showfix if defined _tserror (call :dk_color %Blue% "%_fixmsg%" & set showfix=1) -:2de67392-b7a7-462a-b1ca-108dd189f588 -set "_key=W269N%yh%WFGWX%yh%YVC9B%yh%4J6C9%yh%T83GX" &:: Pro -exit /b +:: Don't create renewal task if Windows/Office volume IDs are not found, even if script is set to create it by default +:: Don't create renewal task if only Windows volume ID is found and OEM BIOS error is present on Windows 7, even if script is set to create it by default -:a80b5abf-76ad-428b-b05d-a47d2dffeebf -set "_key=MH37W%yh%N47XK%yh%V7XM9%yh%C7227%yh%GCQG9" &:: Pro N -exit /b +set _deltask= +if not %_norentsk%==0 set _deltask=1 +if not defined _deltask ( +if %_actwin%==0 call :_taskgetids sppwid %slp% windows +if %_actoff%==0 call :_taskgetids sppoid %slp% office +if %_actoff%==0 call :_taskgetids osppid %ospp% office +) -:e0c42288-980c-4788-a014-c080d2e1926e -set "_key=NW6C2%yh%QMPVW%yh%D7KKK%yh%3GKT6%yh%VCFB2" &:: Education -exit /b +if not defined sppwid if not defined sppoid if not defined osppid (set _deltask=1) +if defined oemerr if not defined sppoid if not defined osppid (set _deltask=1) -:3c102355-d027-42c6-ad23-2e7ef8a02585 -set "_key=2WH4N%yh%8QGBV%yh%H22JP%yh%CT43Q%yh%MDWWJ" &:: Education N -exit /b +if not defined _deltask ( +call :ks_renewal +) else ( +if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" call :dk_color %Gray% "Deleting activation renewal task..." +call :dk_color %Gray% "Skipping creation of activation renewal task..." +call :ks_clearstuff %nul% +if not defined _server ( +if %winbuild% GEQ 9200 ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +if defined _C16R ( +REM mass grave[.]dev/office-license-is-not-genuine +set _server=10.0.0.10 +call :_taskregserv +echo Keeping the non-existent IP address 10.0.0.10 as %KS% Server. +) +) +if not defined _C16R ( +call :_taskclear-cache +echo Cleared %KS% Server from the registry. +) +) +) -:73111121-5638-40f6-bc11-f1d7b0d64300 -set "_key=NPPR9%yh%FWDCX%yh%D2C8J%yh%H872K%yh%2YT43" &:: Enterprise -exit /b +:: https://learn.microsoft.com/azure/virtual-desktop/windows-10-multisession-faq -:e272e3e2-732f-4c65-a8f0-484747d0d947 -set "_key=DPH2V%yh%TTNVB%yh%4X9Q3%yh%TJR4H%yh%KHJW4" &:: Enterprise N -exit /b +if %_actwin%==1 for %%# in (407) do if %osSKU%==%%# ( +call :dk_color %Red% "%winos% does not support activation on non-azure platforms." +) -:7b51a46c-0c04-4e8f-9af4-8496cca90d5e -set "_key=WNMTR%yh%4C88C%yh%JK8YV%yh%HQ7T2%yh%76DF9" &:: Enterprise 2015 LTSB -exit /b +if %_actoff%==1 if defined sppoid if not defined _tserror if %_NoEditionChange%==0 if defined ohub ( +echo: +call :dk_color %Gray% "Office apps such as Word, Excel are activated, use them directly. Ignore 'Buy' button in Office dashboard app." +) -:87b838b7-41b6-4590-8318-5797951d8529 -set "_key=2F77B%yh%TNFGY%yh%69QQF%yh%B8YKP%yh%D69TJ" &:: Enterprise 2015 LTSB N -exit /b +:: Trigger reevaluation of SPP's Scheduled Tasks -:: Windows Server 2022 [Fe] -:9bd77860-9b31-4b7b-96ad-2564017315bf -set "_key=VDYBN%yh%27WPP%yh%V4HQT%yh%9VMD4%yh%VMK7H" &:: Standard -exit /b +call :dk_reeval %nul% +goto :dk_done -:ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03 -set "_key=WX4NM%yh%KYWYW%yh%QJJR4%yh%XV3QB%yh%6VM33" &:: Datacenter -exit /b +::======================================================================================================================================== -:8c8f0ad3-9a43-4e05-b840-93b8d1475cbc -set "_key=6N379%yh%GGTMK%yh%23C6M%yh%XVVTC%yh%CKFRQ" &:: Azure Core -exit /b +:ks_ip -:f5e9429c-f50b-4b98-b15c-ef92eb5cff39 -set "_key=67KN8%yh%4FYJW%yh%2487Q%yh%MQ2J7%yh%4C4RG" &:: Standard ACor -exit /b +cls +set _server= +echo: +echo Enter / Paste the %KS% Server address, or just press Enter to return: +echo: +set /p _server= +if not defined _server goto :ks_menu +set "_server=%_server: =%" -:39e69c41-42b4-4a0a-abad-8e3c10a797cc -set "_key=QFND9%yh%D3Y9C%yh%J3KKY%yh%6RPVP%yh%2DPYV" &:: Datacenter ACor -exit /b +echo: +echo Enter / Paste the %KS% Port address, or just press Enter to use default: +echo: +set /p _port= +if not defined _port goto :ks_menu +set "_port=%_port: =%" -:: Windows Server 2019 [RS5] -:de32eafd-aaee-4662-9444-c1befb41bde2 -set "_key=N69G4%yh%B89J2%yh%4G8F4%yh%WWYCC%yh%J464C" &:: Standard -exit /b +goto :ks_menu -:34e1ae55-27f8-4950-8877-7a03be5fb181 -set "_key=WMDGN%yh%G9PQG%yh%XVVXX%yh%R3X43%yh%63DFG" &:: Datacenter -exit /b +::======================================================================================================================================== -:a99cc1f0-7719-4306-9645-294102fbff95 -set "_key=FDNH6%yh%VW9RW%yh%BXPJ7%yh%4XTYG%yh%239TB" &:: Azure Core -exit /b +:ks_reset -:73e3957c-fc0c-400d-9184-5f7b6f2eb409 -set "_key=N2KJX%yh%J94YW%yh%TQVFB%yh%DG9YT%yh%724CC" &:: Standard ACor +set key= +set _oRoot= +set _oArch= +set _oIds= +set _oLPath= +set _actid= +set _prod= +set _lic= +set _arr= +set _prids= +set _config= +set _version= +set _License= +set _oBranding= exit /b -:90c362e5-0da1-4bfd-b53b-b87d309ade43 -set "_key=6NMRW%yh%2C8FM%yh%D24W7%yh%TQWMY%yh%CWH2D" &:: Datacenter ACor -exit /b +::======================================================================================================================================== -:034d3cbb-5d4b-4245-b3f8-f84571314078 -set "_key=WVDHN%yh%86M7X%yh%466P6%yh%VHXV7%yh%YY726" &:: Essentials -exit /b +:ks_getpath -:8de8eb62-bbe0-40ac-ac17-f75595071ea3 -set "_key=GRFBW%yh%QNDC4%yh%6QBHG%yh%CCK3B%yh%2PR88" &:: ServerARM64 -exit /b +set o16c2r= +set o15c2r= +set o16msi= +set o15msi= +set o14msi= -:19b5e0fb-4431-46bc-bac1-2f1873e4ae73 -set "_key=NTBV8%yh%9K7Q8%yh%V27C6%yh%M2BTV%yh%KHMXV" &:: Azure Datacenter - ServerTurbine -exit /b +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -:: Windows Server 2016 [RS4] -:43d9af6e-5e86-4be8-a797-d072a046896c -set "_key=K9FYF%yh%G6NCK%yh%73M32%yh%XMVPY%yh%F9DRR" &:: ServerARM64 -exit /b +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -:: Windows Server 2016 [RS3] -:61c5ef22-f14f-4553-a824-c4b31e84b100 -set "_key=PTXN8%yh%JFHJM%yh%4WC78%yh%MPCBR%yh%9W4KR" &:: Standard ACor -exit /b +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) -:e49c08e7-da82-42f8-bde2-b570fbcae76c -set "_key=2HXDN%yh%KRXHB%yh%GPYC7%yh%YCKFJ%yh%7FVDG" &:: Datacenter ACor exit /b -:: Windows Server 2016 [RS1] -:8c1c5410-9f39-4805-8c9d-63a07706358f -set "_key=WC2BQ%yh%8NRM3%yh%FDDYY%yh%2BFGV%yh%KHKQY" &:: Standard -exit /b +::======================================================================================================================================== -:21c56779-b449-4d20-adfc-eece0e1ad74b -set "_key=CB7KF%yh%BWN84%yh%R7R2Y%yh%793K2%yh%8XDDG" &:: Datacenter -exit /b +:: After retail to volume conversion, new product ID needs .OSPPReady key in registry, otherwise product info may not fully reflect -:3dbf341b-5f6c-4fa7-b936-699dce9e263f -set "_key=VP34G%yh%4NPPG%yh%79JTQ%yh%864T4%yh%R3MQX" &:: Azure Core -exit /b +:ks_osppready -:2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283 -set "_key=JCKRF%yh%N37P4%yh%C2D82%yh%9YXRT%yh%4M63B" &:: Essentials -exit /b +echo: %_config% | find /i "propertyBag" %nul1% && ( +set "_osppt=REG_DWORD" +set "_osppready=%o15c2r_reg%" +) || ( +set "_osppt=REG_SZ" +set "_osppready=%_config%" +) -:7b4433f4-b1e7-4788-895a-c45378d38253 -set "_key=QN4C6%yh%GBJD2%yh%FB422%yh%GHWJK%yh%GJG2R" &:: Cloud Storage -exit /b +reg add %_osppready% /f /v %_altoffid%.OSPPReady /t %_osppt% /d 1 %nul1% -:: Windows 8.1 -:fe1c3238-432a-43a1-8e25-97e7d1ef10f3 -set "_key=M9Q9P%yh%WNJJT%yh%6PXPY%yh%DWX8H%yh%6XWKK" &:: Core -exit /b +:: Office builds before 16.0.10730.20102 need the Installed license product ID in ProductReleaseIds, otherwise product info may not fully reflect -:78558a64-dc19-43fe-a0d0-8075b2a370a3 -set "_key=7B9N3%yh%D94CG%yh%YTVHR%yh%QBPX3%yh%RJP64" &:: Core N -exit /b +if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" exit /b -:c72c6a1d-f252-4e7e-bdd1-3fca342acb35 -set "_key=BB6NG%yh%PQ82V%yh%VRDPW%yh%8XVD2%yh%V8P66" &:: Core Single Language +reg query %_prids% | findstr /I "%_altoffid%" %nul1% +if %errorlevel% NEQ 0 ( +for /f "skip=2 tokens=2*" %%a in ('reg query %_prids%') do reg add %_prids% /t REG_SZ /d "%%b,%_altoffid%" /f %nul1% +) exit /b -:db78b74f-ef1c-4892-abfe-1e66b8231df6 -set "_key=NCTT7%yh%2RGK8%yh%WMHRF%yh%RY7YQ%yh%JTXG3" &:: Core China -exit /b +::======================================================================================================================================== -:ffee456a-cd87-4390-8e07-16146c672fd0 -set "_key=XYTND%yh%K6QKT%yh%K2MRH%yh%66RTM%yh%43JKP" &:: Core ARM -exit /b +:ks_setspp -:c06b6981-d7fd-4a35-b7b4-054742b7af67 -set "_key=GCRJD%yh%8NW9H%yh%F2CDX%yh%CCM8D%yh%9D6T9" &:: Pro +if %winbuild% GEQ 9200 ( +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService +) else ( +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +if "%1"=="14" ( +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) exit /b -:7476d79f-8e48-49b4-ab63-4d0b813a16e4 -set "_key=HMCNV%yh%VVBFX%yh%7HMBH%yh%CTY9B%yh%B4FXY" &:: Pro N -exit /b +::======================================================================================================================================== -:096ce63d-4fac-48a9-82a9-61ae9e800e5f -set "_key=789NJ%yh%TQK6T%yh%6XTH8%yh%J39CJ%yh%J8D3P" &:: Pro with Media Center -exit /b +:ks_process -:81671aaf-79d1-4eb1-b004-8cbbe173afea -set "_key=MHF9N%yh%XY6XB%yh%WVXMC%yh%BTDCT%yh%MKKG7" &:: Enterprise -exit /b +for %%# in (%_oIds%) do ( -:113e705c-fa49-48a4-beea-7dd879b46b14 -set "_key=TT4HM%yh%HN7YT%yh%62K67%yh%RGRQJ%yh%JFFXW" &:: Enterprise N -exit /b +set skipprocess= +if %_NoEditionChange%==1 if not defined _oBranding ( +set foundprod= +call :ksdata chkprod %%# +if not defined foundprod ( +set skipprocess=1 +call :dk_color %Gray% "Skipping Because NoEditionChange Mode [%%#]" +) +) -:0ab82d54-47f4-4acb-818c-cc5bf0ecb649 -set "_key=NMMPB%yh%38DD4%yh%R2823%yh%62W8D%yh%VXKJB" &:: Embedded Industry Pro -exit /b -:cd4e2d9f-5059-4a50-a92d-05d5bb1267c7 -set "_key=FNFKF%yh%PWTVT%yh%9RC8H%yh%32HB2%yh%JB34X" &:: Embedded Industry Enterprise -exit /b +if "%_actprojvis%"=="1" if not defined skipprocess ( +echo %%# | findstr /i "Project Visio" %nul% || ( +set skipprocess=1 +call :dk_color %Gray% "Skipping Because Project/Visio Mode [%%#]" +) +) -:f7e88590-dfc7-4c78-bccb-6f3865b99d1a -set "_key=VHXM3%yh%NR6FT%yh%RY6RT%yh%CK882%yh%KW2CJ" &:: Embedded Industry Automotive -exit /b +if "%_actprojvis%"=="0" if not defined skipprocess echo %_oIds% | findstr /i "O365" %nul% && ( +echo %%# | findstr /i "Project Visio" %nul% && ( +set skipprocess=1 +echo Skipping Because Mondo Is Available [%%#] +) +) -:e9942b32-2e55-4197-b0bd-5ff58cba8860 -set "_key=3PY8R%yh%QHNP9%yh%W7XQD%yh%G6DPH%yh%3J2C9" &:: with Bing -exit /b +if not defined skipprocess ( +set key= +set _actid= +set _preview= +set _License=%%# +set _altoffid= -:c6ddecd6-2354-4c19-909b-306a3058484e -set "_key=Q6HTR%yh%N24GM%yh%PMJFP%yh%69CD8%yh%2GXKR" &:: with Bing N -exit /b +echo %%# | find /i "2024" %nul% && ( +if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview +) +set _prod=%%#!_preview! -:b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c -set "_key=KF37N%yh%VDV38%yh%GRRTV%yh%XH8X6%yh%6F3BB" &:: with Bing Single Language -exit /b +call :ksdata getinfo !_prod! -:ba998212-460a-44db-bfb5-71bf09d1c68b -set "_key=R962J%yh%37N87%yh%9VVK2%yh%WJ74P%yh%XTMHR" &:: with Bing China -exit /b +if defined _altoffid ( +set _License=!_altoffid! +echo Converting Retail To Volume [!_prod! To !_altoffid!] +set _prod=!_altoffid! +call :ks_osppready +) -:e58d87b5-8126-4580-80fb-861b22f79296 -set "_key=MX3RK%yh%9HNGX%yh%K3QKC%yh%6PJ3F%yh%W8D7B" &:: Pro for Students -exit /b +if not "!key!"=="" ( +echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +call :dk_inskey "[!key!] [!_prod!]" +) else ( +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" +call :dk_color %Blue% "Make sure you are using Latest MAS script." +) else ( +call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" +call :dk_color %Blue% "Uninstall this and Install C2R or MSI VL version of Office." +) +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +) +) +) -:cab491c7-a918-4f60-b502-dab75e334f40 -set "_key=TNFGH%yh%2R6PB%yh%8XM3K%yh%QYHX2%yh%J4296" &:: Pro for Students N exit /b -:: Windows Server 2012 R2 -:b3ca044e-a358-4d68-9883-aaa2941aca99 -set "_key=D2N9P%yh%3P6X9%yh%2R39C%yh%7RTCD%yh%MDVJX" &:: Standard -exit /b +::======================================================================================================================================== -:00091344-1ea4-4f37-b789-01750ba6988c -set "_key=W3GGN%yh%FT8W3%yh%Y4M27%yh%J84CP%yh%Q3VJ9" &:: Datacenter -exit /b +:ks_processmsi -:21db6ba4-9a7b-4a14-9e29-64a60c59301d -set "_key=KNC87%yh%3J2TX%yh%XB4WP%yh%VCPJV%yh%M4FWM" &:: Essentials -exit /b +:: Process Office MSI Version -:b743a2be-68d4-4dd3-af32-92425b7bb623 -set "_key=3NPTF%yh%33KPT%yh%GGBPR%yh%YX76B%yh%39KDD" &:: Cloud Storage -exit /b +call :ks_reset -:: Windows 8 -:c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60 -set "_key=BN3D2%yh%R7TKB%yh%3YPBD%yh%8DRP2%yh%27GG4" &:: Core -exit /b +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +) -:197390a0-65f6-4a95-bdc4-55d58a3b0253 -set "_key=8N2M2%yh%HWPGY%yh%7PGT9%yh%HGDD8%yh%GVGGY" &:: Core N -exit /b +set oVer=%1 +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") +if "%_oRoot:~-1%"=="\" set "_oRoot=%_oRoot:~0,-1%" -:8860fcd4-a77b-4a20-9045-a150ff11d609 -set "_key=2WN2H%yh%YGCQR%yh%KFX6K%yh%CD6TF%yh%84YXQ" &:: Core Single Language -exit /b +echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 +if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 +if "%osarch%"=="x86" set _oArch=x86 -:9d5584a2-2d85-419a-982c-a00888bb9ddf -set "_key=4K36P%yh%JN4VD%yh%GDC6V%yh%KDT89%yh%DYFKP" &:: Core China -exit /b +set "_common=%CommonProgramFiles%" +if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" +set "_common2=%CommonProgramFiles(x86)%" -:af35d7b7-5035-4b63-8972-f0b747b9f4dc -set "_key=DXHJF%yh%N9KQX%yh%MFPVR%yh%GHGQK%yh%Y7RKV" &:: Core ARM -exit /b +for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" +if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -:a98bcd6d-5343-4603-8afe-5908e4611112 -set "_key=NG4HW%yh%VH26C%yh%733KW%yh%K6F98%yh%J8CK4" &:: Pro -exit /b +call :ksdata getmsiprod %2 +call :ks_msiretaildata getmsiret %2 -:ebf245c1-29a8-4daf-9cb1-38dfc608a8c8 -set "_key=XCVCF%yh%2NXM9%yh%723PB%yh%MHCB7%yh%2RYQQ" &:: Pro N -exit /b +echo: +echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -:a00018a3-f20f-4632-bf7c-8daa5351c914 -set "_key=GNBB8%yh%YVD74%yh%QJHX6%yh%27H4K%yh%8QHDG" &:: Pro with Media Center +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" exit /b +) -:458e1bec-837a-45f6-b9d5-925ed5d299de -set "_key=32JNW%yh%9KQ84%yh%P47T8%yh%D8GGY%yh%CWCK7" &:: Enterprise +if not defined _oIds ( +set error=1 +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" exit /b +) -:e14997e7-800a-4cf7-ad10-de4b45b578db -set "_key=JMNMF%yh%RHW7P%yh%DMY6X%yh%RF3DR%yh%X2BQT" &:: Enterprise N +call :ks_process exit /b -:10018baf-ce21-4060-80bd-47fe74ed4dab -set "_key=RYXVT%yh%BNQG7%yh%VD29F%yh%DBMRY%yh%HT73M" &:: Embedded Industry Pro -exit /b +::======================================================================================================================================== -:18db1848-12e0-4167-b9d7-da7fcda507db -set "_key=NKB3R%yh%R2F8T%yh%3XCDP%yh%7Q2KW%yh%XWYQ2" &:: Embedded Industry Enterprise -exit /b +:ks_uninstall -:: Windows Server 2012 -:f0f5ec41-0d55-4732-af02-440a44a3cf0f -set "_key=XC9B7%yh%NBPP2%yh%83J2H%yh%RHMBY%yh%92BT4" &:: Standard -exit /b +cls +if not defined terminal mode 91, 30 +title Online %KS% Complete Uninstall %masver% -:d3643d60-0c42-412d-a7d6-52e6635327f6 -set "_key=48HP8%yh%DN98B%yh%MYWDG%yh%T2DCC%yh%8W83P" &:: Datacenter -exit /b +set "uline=__________________________________________________________________________________________" -:7d5486c7-e120-4771-b7f1-7b56c6d3170c -set "_key=HM7DN%yh%YVMH3%yh%46JC3%yh%XYTG7%yh%CYQJJ" &:: MultiPoint Standard -exit /b +set "_C16R=" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +if %winbuild% GEQ 9200 if defined _C16R ( +echo: +call :dk_color %Gray% "Notice-" +echo: +echo To make sure Office programs do not show a non-genuine banner, +echo please run the activation option once, and don't uninstall afterward. +echo %uline% +) -:95fd1c83-7df5-494a-be8b-1300e1c9d1cd -set "_key=XNH6W%yh%2V9GX%yh%RGJ4K%yh%Y8X6F%yh%QGJ2G" &:: MultiPoint Premium -exit /b +echo: +set error_= +call :_taskclear-cache +call :ks_clearstuff -:: Windows 7 -:b92e9980-b9d5-4821-9c94-140f632f6312 -set "_key=FJ82H%yh%XT6CR%yh%J8D7P%yh%XQJJ2%yh%GPDD4" &:: Professional -exit /b +:: check KMS38 lock -:54a09a0d-d57b-4c10-8b69-a842d6590ad5 -set "_key=MRPKT%yh%YTG23%yh%K7D7T%yh%X2JMM%yh%QY7MG" &:: Professional N -exit /b +%nul% reg query "HKLM\%SPPk%\%_wApp%" && ( +set error_=9 +echo Failed to completely clear %KS% Cache. +reg query "HKLM\%SPPk%\%_wApp%" /s %nul2% | findstr /i "127.0.0.2" %nul1% && echo KMS38 activation is locked. +) || ( +echo Cleared %KS% Cache successfully. +) -:5a041529-fef8-4d07-b06f-b59b573b32d2 -set "_key=W82YF%yh%2Q76Y%yh%63HXB%yh%FGJG9%yh%GF7QX" &:: Professional E -exit /b +if defined error_ ( +if "%error_%"=="1" ( +echo %uline% +%eline% +echo Try Again / Restart the System +echo %uline% +) +) else ( +echo %uline% +echo: +call :dk_color %Green% "Online %KS% has been successfully uninstalled." +echo %uline% +) -:ae2ee509-1b34-41c0-acb7-6d4650168915 -set "_key=33PXH%yh%7Y6KF%yh%2VJC9%yh%XBBR8%yh%HVTHH" &:: Enterprise -exit /b +goto :dk_done -:1cb6d605-11b3-4e14-bb30-da91c8e3983a -set "_key=YDRBP%yh%3D83W%yh%TY26F%yh%D46B2%yh%XCKRJ" &:: Enterprise N -exit /b +:ks_clearstuff -:46bbed08-9c7b-48fc-a614-95250573f4ea -set "_key=C29WB%yh%22CC8%yh%VJ326%yh%GHFJW%yh%H9DH4" &:: Enterprise E -exit /b +set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" -:db537896-376f-48ae-a492-53d0547773d0 -set "_key=YBYF6%yh%BHCR3%yh%JPKRB%yh%CDW7B%yh%F9BK4" &:: Embedded POSReady 7 -exit /b +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && ( +echo Deleting [Task] Activation-Renewal +schtasks /delete /tn Activation-Renewal /f %nul% +) -:e1a8296a-db37-44d1-8cce-7bc961d59c54 -set "_key=XGY72%yh%BRBBT%yh%FF8MH%yh%2GG8H%yh%W7KCW" &:: Embedded Standard -exit /b +reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" %nul1% && ( +echo Deleting [Task] Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) -:aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395 -set "_key=73KQT%yh%CD9G6%yh%K7TQG%yh%66MRP%yh%CQ22C" &:: Embedded ThinPC -exit /b +If exist "%ProgramFiles%\Activation-Renewal\" ( +echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ +rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% +) -:: Windows Server 2008 R2 -:a78b8bd9-8017-4df5-b86a-09f756affa7c -set "_key=6TPJF%yh%RBVHG%yh%WBW2R%yh%86QPH%yh%6RTM4" &:: Web -exit /b +:: Stuff from old MAS versions -:cda18cf3-c196-46ad-b289-60c072869994 -set "_key=TT8MH%yh%CG224%yh%D3D7Q%yh%498W2%yh%9QCTX" &:: HPC -exit /b +schtasks /delete /tn Online_%KS%_Activation_Script-Renewal /f %nul% +schtasks /delete /tn Online_%KS%_Activation_Script-Run_Once /f %nul% +del /f /q "%ProgramData%\Online_%KS%_Activation.cmd" %nul% +rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% +rmdir /s /q "%ProgramData%\Online_%KS%_Activation\" %nul% +rmdir /s /q "%windir%\Online_%KS%_Activation_Script\" %nul% +reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% -:68531fb9-5511-4989-97be-d11a0f55633f -set "_key=YC6KT%yh%GKW9T%yh%YTKYR%yh%T4X34%yh%R7VHC" &:: Standard -exit /b +:: Check if all is removed -:7482e61b-c589-4b7f-8ecc-46d455ac3b87 -set "_key=74YFP%yh%3QFB3%yh%KQT8W%yh%PMXWJ%yh%7M648" &:: Datacenter +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && (set error_=1) +reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" %nul1% && (set error_=1) +reg query "%key%" /f Path /s | find /i "\Online_%KS%_Activation_Script" %nul1% && (set error_=1) +If exist "%windir%\Online_%KS%_Activation_Script\" (set error_=1) +reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (set error_=1) +if exist "%ProgramData%\Online_%KS%_Activation.cmd" (set error_=1) +if exist "%ProgramData%\Online_%KS%_Activation\" (set error_=1) +if exist "%ProgramData%\Activation-Renewal\" (set error_=1) +if exist "%ProgramFiles%\Activation-Renewal\" (set error_=1) exit /b -:620e2b3d-09e7-42fd-802a-17a13652fe7a -set "_key=489J6%yh%VHDMP%yh%X63PK%yh%3K798%yh%CPX3Y" &:: Enterprise -exit /b +::======================================================================================================================================== -:8a26851c-1c7e-48d3-a687-fbca9b9ac16b -set "_key=GT63C%yh%RJFQ3%yh%4GMB6%yh%BRFB9%yh%CB83V" &:: Itanium -exit /b +:_extracttask: +@echo off -:f772515c-0e87-48d5-a676-e6962c3e1195 -set "_key=736RG%yh%XDKJK%yh%V34PF%yh%BHK87%yh%J6X3K" &:: MultiPoint Server - ServerEmbeddedSolution -exit /b +:: Renew K-M-S activation with Online servers via scheduled task -:: Office 2021 -:fbdb3e18-a8ef-4fb3-9183-dffd60bd0984 -set "_key=FXYTK%yh%NJJ8C%yh%GB6DW%yh%3DYQT%yh%6F7TH" &:: Professional Plus -exit /b +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ -:080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3 -set "_key=KDX7X%yh%BNVR8%yh%TXXGX%yh%4Q7Y8%yh%78VT3" &:: Standard -exit /b -:76881159-155c-43e0-9db7-2d70a9a3a4ca -set "_key=FTNWT%yh%C6WBT%yh%8HMGF%yh%K9PRX%yh%QV9H8" &:: Project Professional +if not "%~1"=="Task" ( +echo: +echo ====== Error ====== +echo: +echo This file is supposed to be run only by the scheduled task. +echo: +echo Press any key to exit +pause >nul exit /b +) -:6dd72704-f752-4b71-94c7-11cec6bfc355 -set "_key=J2JDC%yh%NJCYY%yh%9RGQ4%yh%YXWMH%yh%T3D4T" &:: Project Standard -exit /b +:: Set Environment variables, it helps if they are misconfigured in the system -:fb61ac9a-1688-45d2-8f6b-0674dbffa33c -set "_key=KNH8D%yh%FGHT4%yh%T8RK3%yh%CTDYJ%yh%K2HT4" &:: Visio Professional -exit /b +setlocal EnableExtensions +setlocal DisableDelayedExpansion -:72fce797-1884-48dd-a860-b2f6a5efd3ca -set "_key=MJVNY%yh%BYWPY%yh%CWV6J%yh%2RKRT%yh%4M8QG" &:: Visio Standard -exit /b +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" -:1fe429d8-3fa7-4a39-b6f0-03dded42fe14 -set "_key=WM8YG%yh%YNGDD%yh%4JHDC%yh%PG3F4%yh%FC4T4" &:: Access -exit /b +set "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) -:ea71effc-69f1-4925-9991-2f5e319bbc24 -set "_key=NWG3X%yh%87C9K%yh%TC7YY%yh%BC2G7%yh%G6RVC" &:: Excel -exit /b +set "ComSpec=%SysPath%\cmd.exe" +set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" -:a5799e4c-f83c-4c6e-9516-dfe9b696150b -set "_key=C9FM6%yh%3N72F%yh%HFJXB%yh%TM3V9%yh%T86R9" &:: Outlook -exit /b +>nul fltmc || exit /b -:6e166cc3-495d-438a-89e7-d7c9e6fd4dea -set "_key=TY7XF%yh%NFRBR%yh%KJ44C%yh%G83KF%yh%GX27K" &:: PowerPoint -exit /b +::======================================================================================================================================== -:aa66521f-2370-4ad8-a2bb-c095e3e4338f -set "_key=2MW9D%yh%N4BXM%yh%9VBPG%yh%Q7W6M%yh%KFBGQ" &:: Publisher -exit /b +set _tserror= +set winbuild=1 +set "nul=>nul 2>&1" +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set psc=powershell.exe -:1f32a9af-1274-48bd-ba1e-1ab7508a23e8 -set "_key=HWCXN%yh%K3WBT%yh%WJBKY%yh%R8BD9%yh%XK29P" &:: Skype for Business -exit /b +set run_once= +set t_name=Renewal Task +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( +set run_once=1 +set t_name=Run Once Task +) -:abe28aea-625a-43b1-8e30-225eb8fbd9e5 -set "_key=TN8H9%yh%M34D3%yh%Y64V9%yh%TR72V%yh%X79KV" &:: Word -exit /b +set _wmic=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" 2>nul | find /i "computersystem" 1>nul && set _wmic=1 +) -:: Office 2019 -:85dd8b5f-eaa4-4af3-a628-cce9e77c9a03 -set "_key=NMMKJ%yh%6RK4F%yh%KMJVX%yh%8D9MJ%yh%6MWKP" &:: Professional Plus -exit /b +setlocal EnableDelayedExpansion +if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" +exit -:6912a74b-a5fb-401a-bfdb-2e3ab46f4b02 -set "_key=6NWWJ%yh%YQWMR%yh%QKGCB%yh%6TMB3%yh%9D9HK" &:: Standard -exit /b - -:2ca2bf3f-949e-446a-82c7-e25a15ec78c4 -set "_key=B4NPR%yh%3FKK7%yh%T2MBV%yh%FRQ4W%yh%PKD2B" &:: Project Professional -exit /b - -:1777f0e3-7392-4198-97ea-8ae4de6f6381 -set "_key=C4F7P%yh%NCP8C%yh%6CQPT%yh%MQHV9%yh%JXD2M" &:: Project Standard -exit /b - -:5b5cf08f-b81a-431d-b080-3450d8620565 -set "_key=9BGNQ%yh%K37YR%yh%RQHF2%yh%38RQ3%yh%7VCBB" &:: Visio Professional -exit /b - -:e06d7df3-aad0-419d-8dfb-0ac37e2bdf39 -set "_key=7TQNQ%yh%K3YQQ%yh%3PFH7%yh%CCPPM%yh%X4VQ2" &:: Visio Standard -exit /b - -:9e9bceeb-e736-4f26-88de-763f87dcc485 -set "_key=9N9PT%yh%27V4Y%yh%VJ2PD%yh%YXFMF%yh%YTFQT" &:: Access -exit /b - -:237854e9-79fc-4497-a0c1-a70969691c6b -set "_key=TMJWT%yh%YYNMB%yh%3BKTF%yh%644FC%yh%RVXBD" &:: Excel -exit /b - -:c8f8a301-19f5-4132-96ce-2de9d4adbd33 -set "_key=7HD7K%yh%N4PVK%yh%BHBCQ%yh%YWQRW%yh%XW4VK" &:: Outlook -exit /b +::======================================================================================================================================== -:3131fd61-5e4f-4308-8d6d-62be1987c92c -set "_key=RRNCX%yh%C64HY%yh%W2MM7%yh%MCH9G%yh%TJHMQ" &:: PowerPoint -exit /b +:_taskstart -:9d3e4cca-e172-46f1-a2f4-1d2107051444 -set "_key=G2KWX%yh%3NW6P%yh%PY93R%yh%JXK2T%yh%C9Y9V" &:: Publisher -exit /b +echo: +echo %date%, %time% -:734c6c6e-b0ba-4298-a891-671772b2bd1b -set "_key=NCJ33%yh%JHBBY%yh%HTK98%yh%MYCV8%yh%HMKHJ" &:: Skype for Business -exit /b +set /a loop=1 +set /a max_loop=4 -:059834fe-a8ea-4bff-b67b-4d006b5447d3 -set "_key=PBX3G%yh%NWMT6%yh%Q7XBW%yh%PYJGG%yh%WXD33" &:: Word -exit /b +call :_tasksetserv -:0bc88885-718c-491d-921f-6f214349e79c -set "_key=VQ9DP%yh%NVHPH%yh%T9HJC%yh%J9PDT%yh%KTQRG" &:: Pro Plus 2019 Preview -exit /b +:_intrepeat -:fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9 -set "_key=XM2V9%yh%DN9HH%yh%QB449%yh%XDGKC%yh%W2RMW" &:: Project Pro 2019 Preview -exit /b +:: Check Internet connection. Works even if ICMP echo is disabled. -:500f6619-ef93-4b75-bcb4-82819998a3ca -set "_key=N2CG9%yh%YD3YK%yh%936X4%yh%3WR82%yh%Q3X4H" &:: Visio Pro 2019 Preview -exit /b +for %%a in (%srvlist%) do ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( +if not "%%#"=="" goto _taskIntConnected +) +) -:f3fb2d68-83dd-4c8b-8f09-08e0d950ac3b -set "_key=HFPBN%yh%RYGG8%yh%HQWCW%yh%26CH6%yh%PDPVF" &:: Pro Plus 2021 Preview -exit /b +nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul +if "%errorlevel%"=="0" goto _taskIntConnected -:76093b1b-7057-49d7-b970-638ebcbfd873 -set "_key=WDNBY%yh%PCYFY%yh%9WP6G%yh%BXVXM%yh%92HDV" &:: Project Pro 2021 Preview -exit /b +if %loop%==%max_loop% ( +set _tserror=1 +goto _taskend +) -:a3b44174-2451-4cd6-b25f-66638bfb9046 -set "_key=2XYX7%yh%NXXBK%yh%9CK7W%yh%K2TKW%yh%JFJ7G" &:: Visio Pro 2021 Preview -exit /b +echo: +echo Error: Internet is not connected +echo Waiting 30 seconds -:: Office 2016 -:829b8110-0e6f-4349-bca4-42803577788d -set "_key=WGT24%yh%HCNMF%yh%FQ7XH%yh%6M8K7%yh%DRTW9" &:: Project Professional C2R-P -exit /b +timeout /t 30 >nul +set /a loop=%loop%+1 +goto _intrepeat -:cbbaca45-556a-4416-ad03-bda598eaa7c8 -set "_key=D8NRQ%yh%JTYM3%yh%7J2DX%yh%646CT%yh%6836M" &:: Project Standard C2R-P -exit /b +:_taskIntConnected -:b234abe3-0857-4f9c-b05a-4dc314f85557 -set "_key=69WXN%yh%MBYV6%yh%22PQG%yh%3WGHK%yh%RM6XC" &:: Visio Professional C2R-P -exit /b +::======================================================================================================================================== -:361fe620-64f4-41b5-ba77-84f8e079b1f7 -set "_key=NY48V%yh%PPYYH%yh%3F4PX%yh%XJRKJ%yh%W4423" &:: Visio Standard C2R-P -exit /b +call :_taskclear-cache -:e914ea6e-a5fa-4439-a394-a9bb3293ca09 -set "_key=DMTCJ%yh%KNRKX%yh%26982%yh%JYCKT%yh%P7KB6" &:: MondoR -exit /b +:: Check WMI and sppsvc Errors -:9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce -set "_key=HFTND%yh%W9MK4%yh%8B7MJ%yh%B6C4G%yh%XQBR2" &:: Mondo -exit /b +set applist= +net start sppsvc /y %nul% +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" +%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) -:d450596f-894d-49e0-966a-fd39ed4c4c64 -set "_key=XQNVK%yh%8JYDB%yh%WJ9W3%yh%YJ8YR%yh%WFG99" &:: Professional Plus -exit /b +if not defined applist ( +set _tserror=1 +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if !errorlevel! NEQ 0 (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) +echo: +echo Error: Not Respoding- !e_wmispp! +echo: +) -:dedfa23d-6ed1-45a6-85dc-63cae0546de6 -set "_key=JNRGM%yh%WHDWX%yh%FJJG3%yh%K47QV%yh%DRTFM" &:: Standard -exit /b +::======================================================================================================================================== -:4f414197-0fc2-4c01-b68a-86cbb9ac254c -set "_key=YG9NW%yh%3K39V%yh%2T3HJ%yh%93F3Q%yh%G83KT" &:: Project Professional -exit /b +:: Check installed volume products activation ID's -:da7ddabc-3fbe-4447-9e01-6ab7440b4cd4 -set "_key=GNFHQ%yh%F6YQM%yh%KQDGJ%yh%327XX%yh%KQBVC" &:: Project Standard -exit /b +call :_taskgetids sppwid %slp% windows +call :_taskgetids sppoid %slp% office +call :_taskgetids osppid %ospp% office -:6bf301c1-b94a-43e9-ba31-d494598c47fb -set "_key=PD3PC%yh%RHNGV%yh%FXJ29%yh%8JK7D%yh%RJRJK" &:: Visio Professional -exit /b +::======================================================================================================================================== -:aa2a7821-1827-4c2c-8f1d-4513a34dda97 -set "_key=7WHWN%yh%4T7MP%yh%G96JF%yh%G33KR%yh%W8GF4" &:: Visio Standard -exit /b +echo: +echo Renewing K-M-S activation for all installed Volume products -:67c0fc0c-deba-401b-bf8b-9c8ad8395804 -set "_key=GNH9Y%yh%D2J4T%yh%FJHGG%yh%QRVH7%yh%QPFDW" &:: Access -exit /b +if not defined sppwid if not defined sppoid if not defined osppid ( +echo: +echo No installed Volume Windows / Office product found +echo: +echo Renewing K-M-S server +call :_taskgetserv +call :_taskregserv +goto :_skipact +) -:c3e65d36-141f-4d2f-a303-a842ee756a29 -set "_key=9C2PK%yh%NWTVB%yh%JMPW8%yh%BFT28%yh%7FTBF" &:: Excel -exit /b +::======================================================================================================================================== -:d8cace59-33d2-4ac7-9b1b-9b72339c51c8 -set "_key=DR92N%yh%9HTF2%yh%97XKM%yh%XW2WJ%yh%XW3J6" &:: OneNote -exit /b +call :_taskact -:ec9d9265-9d1e-4ed0-838a-cdc20f2551a1 -set "_key=R69KK%yh%NTPKF%yh%7M3Q4%yh%QYBHW%yh%6MT9B" &:: Outlook -exit /b +:_skipact -:d70b1bba-b893-4544-96e2-b7a318091c33 -set "_key=J7MQP%yh%HNJ4Y%yh%WJ7YM%yh%PFYGF%yh%BY6C6" &:: Powerpoint -exit /b +::======================================================================================================================================== -:041a06cb-c5b8-4772-809f-416d03d16654 -set "_key=F47MM%yh%N3XJP%yh%TQXJ9%yh%BP99D%yh%8K837" &:: Publisher -exit /b +if defined run_once ( +echo: +echo Deleting Scheduled Task Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) -:83e04ee1-fa8d-436d-8994-d31a862cab77 -set "_key=869NQ%yh%FJ69K%yh%466HW%yh%QYCP2%yh%DDBV6" &:: Skype for Business -exit /b +::======================================================================================================================================== -:bb11badf-d8aa-470e-9311-20eaf80fe5cc -set "_key=WXY84%yh%JN2Q9%yh%RBCCQ%yh%3Q3J3%yh%3PFJ6" &:: Word -exit /b +:_taskend -:: Office 2013 -:dc981c6b-fc8e-420f-aa43-f8f33e5c0923 -set "_key=42QTK%yh%RN8M7%yh%J3C4G%yh%BBGYM%yh%88CYV" &:: Mondo -exit /b +echo: +echo Exiting +echo ______________________________________________________________________ -:b322da9c-a2e2-4058-9e4e-f59a6970bd69 -set "_key=YC7DK%yh%G2NP3%yh%2QQC3%yh%J6H88%yh%GVGXT" &:: Professional Plus -exit /b +if defined _tserror (exit /b 123456789) else (exit /b 0) -:b13afb38-cd79-4ae5-9f7f-eed058d750ca -set "_key=KBKQT%yh%2NMXY%yh%JJWGP%yh%M62JB%yh%92CD4" &:: Standard -exit /b +::======================================================================================================================================== -:4a5d124a-e620-44ba-b6ff-658961b33b9a -set "_key=FN8TT%yh%7WMH6%yh%2D4X9%yh%M337T%yh%2342K" &:: Project Professional -exit /b +:_act -:427a28d1-d17c-4abf-b717-32c780ba6f07 -set "_key=6NTH3%yh%CW976%yh%3G3Y2%yh%JK3TX%yh%8QHTT" &:: Project Standard -exit /b +set prodname= +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get LicenseFamily /VALUE" 2^>nul') do (call set "prodname=%%#") +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM !_path! WHERE ID=''!_actid!''').Get()).LicenseFamily | %% {echo ('LicenseFamily='+$_)}" 2^>nul') do (call set "prodname=%%#") +for /f "tokens=1 delims=-_" %%a in ("%prodname%") do set "prodname=%%a" -:e13ac10e-75d0-4aff-a0cd-764982cf541c -set "_key=C2FG9%yh%N6J68%yh%H8BTJ%yh%BW3QX%yh%RM3B3" &:: Visio Professional -exit /b +set _taskskip= +if "%_actprojvis%"=="1" ( +echo: %prodname% | find /i "Office" %nul% && ( +echo: %prodname% | findstr /i "Project Visio" %nul% || (set _taskskip=1& exit /b) +) +) -:ac4efaf0-f81f-4f61-bdf7-ea32b02ab117 -set "_key=J484Y%yh%4NKBF%yh%W2HMG%yh%DBMJC%yh%PGWR7" &:: Visio Standard -exit /b +if defined t_name Activating: %prodname% -:6ee7622c-18d8-4005-9fb7-92db644a279b -set "_key=NG2JY%yh%H4JBT%yh%HQXYP%yh%78QH9%yh%4JM2D" &:: Access -exit /b +set errorcode=12345 +set /a act_attempt=0 -:f7461d52-7c2b-43b2-8744-ea958e0bd09a -set "_key=VGPNG%yh%Y7HQW%yh%9RHP7%yh%TKPV3%yh%BG7GB" &:: Excel -exit /b +:_act2 -:fb4875ec-0c6b-450f-b82b-ab57d8d1677f -set "_key=H7R7V%yh%WPNXQ%yh%WCYYC%yh%76BGV%yh%VT7GH" &:: Groove -exit /b +if %act_attempt% GTR 4 exit /b -:a30b8040-d68a-423f-b0b5-9ce292ea5a8f -set "_key=DKT8B%yh%N7VXH%yh%D963P%yh%Q4PHY%yh%F8894" &:: InfoPath -exit /b +if not "%act_ok%"=="1" ( +if not defined _server call :_taskgetserv +call :_taskregserv +) -:1b9f11e3-c85c-4e1b-bb29-879ad2c909e3 -set "_key=2MG3G%yh%3BNTT%yh%3MFW9%yh%KDQW3%yh%TCK7R" &:: Lync -exit /b +if not !server_num! GTR %max_servers% ( -:efe1f3e6-aea2-4144-a208-32aa872b6545 -set "_key=TGN6P%yh%8MMBC%yh%37P2F%yh%XHXXK%yh%P34VW" &:: OneNote +if "%1"=="act_win" if %_kms38% EQU 1 ( +set act_ok=1 exit /b +) -:771c3afa-50c5-443f-b151-ff2546d863a0 -set "_key=QPN8Q%yh%BJBTJ%yh%334K3%yh%93TGY%yh%2PMBT" &:: Outlook -exit /b +if %_wmic% EQU 1 wmic path !_path! where ID='!_actid!' call Activate %nul% +if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM !_path! where ID=''!_actid!''').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" -:8c762649-97d1-4953-ad27-b7e2c25b972e -set "_key=4NT99%yh%8RJFH%yh%Q2VDH%yh%KYG2C%yh%4RD4F" &:: Powerpoint -exit /b +call set errorcode=!errorlevel! -:00c79ff1-6850-443d-bf61-71cde0de305f -set "_key=PN2WF%yh%29XG2%yh%T9HJ7%yh%JQPJR%yh%FCXK4" &:: Publisher +if !errorcode! EQU 0 ( +set act_ok=1 exit /b - -:d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3 -set "_key=6Q7VD%yh%NX8JD%yh%WJ2VH%yh%88V73%yh%4GBJ7" &:: Word +) +if "%1"=="act_win" if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( +set act_ok=1 exit /b +) -:: Office 2010 -:09ed9640-f020-400a-acd8-d7d867dfd9c2 -set "_key=YBJTT%yh%JG6MD%yh%V9Q7P%yh%DBKXJ%yh%38W9R" &:: Mondo +set act_ok=0 +set /a act_attempt+=1 +if not defined _server goto _act2 +) exit /b -:ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c -set "_key=7TC2V%yh%WXF6P%yh%TD7RT%yh%BQRXR%yh%B8K32" &:: Mondo2 -exit /b +::======================================================================================================================================== -:6f327760-8c5c-417c-9b61-836a98287e0c -set "_key=VYBBJ%yh%TRJPB%yh%QFQRF%yh%QFT4D%yh%H3GVB" &:: Professional Plus -exit /b +:_actinfo -:9da2a678-fb6b-4e67-ab84-60dd6a9c819a -set "_key=V7QKV%yh%4XVVR%yh%XYV4D%yh%F7DFM%yh%8R6BM" &:: Standard -exit /b +if "%1"=="act_win" if not defined t_name (set prodname=%winos%) -:df133ff7-bf14-4f95-afe3-7b48e7e331ef -set "_key=YGX6F%yh%PGV49%yh%PGW3J%yh%9BTGG%yh%VHKC6" &:: Project Professional +if "%1"=="act_win" if %_kms38% EQU 1 ( +if defined t_name ( +echo %prodname% is already activated with KMS38. +) else ( +call :dk_color %Green% "%prodname% is already activated with KMS38." +) exit /b +) -:5dc7bf61-5ec9-4996-9ccb-df806a2d0efe -set "_key=4HP3K%yh%88W3F%yh%W2K3D%yh%6677X%yh%F9PGB" &:: Project Standard +if %errorcode% EQU 12345 ( +if defined t_name ( +echo %prodname% activation failed due to restricted or no Internet. +) else ( +call :dk_color %Red% "%prodname% activation failed due to restricted or no Internet." +) +set showfix=1 +set _tserror=1 exit /b +) -:92236105-bb67-494f-94c7-7f7a607929bd -set "_key=D9DWC%yh%HPYVV%yh%JGF4P%yh%BTWQB%yh%WX8BJ" &:: Visio Premium +if %errorcode% EQU -1073418187 if "%1"=="act_win" if %winbuild% LSS 9200 ( +if defined t_name ( +echo %prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]. +) else ( +call :dk_color %Red% "%prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]." +set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" +) +set oemerr=1 +set showfix=1 exit /b +) -:e558389c-83c3-4b29-adfe-5e4d7f46c358 -set "_key=7MCW8%yh%VRQVK%yh%G677T%yh%PDJCM%yh%Q8TCP" &:: Visio Professional +if %errorcode% EQU -1073418124 ( +if defined t_name ( +echo %prodname% activation failed due to Internet issue [0xC004F074]. +) else ( +call :dk_color %Red% "%prodname% activation failed due to Internet issue [0xC004F074]." +if not defined _tserror ( +call :dk_color %Blue% "Make sure that system files are not blocked by firewall." +call :dk_color %Blue% "If the issue persists, try another Internet connection or VPN such as https://1.1.1.1" +) +) +set showfix=1 +set _tserror=1 exit /b +) -:9ed833ff-4f92-4f36-b370-8683a4f13275 -set "_key=767HD%yh%QGMWX%yh%8QTDB%yh%9G3R2%yh%KHFGJ" &:: Visio Standard -exit /b -:8ce7e872-188c-4b98-9d90-f8f90b7aad02 -set "_key=V7Y44%yh%9T38C%yh%R2VJK%yh%666HK%yh%T7DDX" &:: Access -exit /b +set gpr=0 +set gpr2=0 +call :_taskgetgrace +set /a "gpr2=(%gpr%+1440-1)/1440" -:cee5d470-6e3b-4fcc-8c2b-d17428568a9f -set "_key=H62QG%yh%HXVKF%yh%PP4HP%yh%66KMR%yh%CW9BM" &:: Excel +if %errorcode% EQU 0 if %gpr% EQU 0 ( +if defined t_name ( +echo %prodname% activation succeeded, but Remaining Period failed to increase. +) else ( +call :dk_color %Red% "%prodname% activation succeeded, but Remaining Period failed to increase." +) +set _tserror=1 exit /b +) -:8947d0b8-c33b-43e1-8c56-9b674c052832 -set "_key=QYYW6%yh%QP4CB%yh%MBV6G%yh%HYMCJ%yh%4T3J4" &:: Groove - SharePoint Workspace -exit /b +set _actpass=1 +if %gpr% EQU 43200 if "%1"=="act_win" if %winbuild% GEQ 9200 set _actpass=0 +if %gpr% EQU 64800 set _actpass=0 +if %gpr% GTR 259200 if "%1"=="act_win" call :_taskchkEnterpriseG _actpass +if %gpr% EQU 259200 set _actpass=0 -:ca6b6639-4ad6-40ae-a575-14dee07f6430 -set "_key=K96W8%yh%67RPQ%yh%62T9Y%yh%J8FQJ%yh%BT37T" &:: InfoPath +if %errorcode% EQU 0 if %_actpass% EQU 0 ( +if defined t_name ( +echo %prodname% is successfully activated for %gpr2% days. +) else ( +call :dk_color %Green% "%prodname% is successfully activated for %gpr2% days." +) exit /b +) -:ab586f5c-5256-4632-962f-fefd8b49e6f4 -set "_key=Q4Y4M%yh%RHWJM%yh%PY37F%yh%MTKWH%yh%D3XHX" &:: OneNote +cmd /c exit /b %errorcode% +if defined t_name ( +echo %prodname% has failed to activate [0x!=ExitCode!]. Remaining Period: %gpr2% days [%gpr% minutes]. +) else ( +call :dk_color %Red% "%prodname% has failed to activate [0x!=ExitCode!]. Remaining Period: %gpr2% days [%gpr% minutes]." +) +set _tserror=1 exit /b -:ecb7c192-73ab-4ded-acf4-2399b095d0cc -set "_key=7YDC2%yh%CWM8M%yh%RRTJC%yh%8MDVC%yh%X3DWQ" &:: Outlook -exit /b +::======================================================================================================================================== -:45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a -set "_key=RC8FX%yh%88JRY%yh%3PF7C%yh%X8P67%yh%P4VTT" &:: Powerpoint -exit /b +:_taskact -:b50c4f75-599b-43e8-8dcd-1081a7967241 -set "_key=BFK7F%yh%9MYHM%yh%V68C7%yh%DRQ66%yh%83YTP" &:: Publisher -exit /b +:: Check KMS38 activation -:2d0882e7-a4e7-423b-8ccc-70d91e0158b1 -set "_key=HVHB3%yh%C6FV7%yh%KQX9W%yh%YQG79%yh%CRY7T" &:: Word -exit /b +set gpr=0 +set _kms38=0 +if defined sppwid if %winbuild% GEQ 14393 ( +set _path=%slp% +set _actid=%sppwid% +call :_taskgetgrace +) -:ea509e87-07a1-4a45-9edc-eba5a39f36af -set "_key=D6QFG%yh%VBYP2%yh%XQHM7%yh%J97RH%yh%VVRCK" &:: Small Business Basics -exit /b +if %gpr% NEQ 0 if %gpr% GTR 259200 ( +set _kms38=1 +call :_taskchkEnterpriseG _kms38 +) -:TheEnd +:: Set specific K-M-S host to Local Host so that global K-M-S IP can not replace KMS38 activation but can be used with Office and other Windows Editions. -if %act_failed% EQU 1 ( -echo ____________________________________________________________________ -echo. -call :_errorinfo +if %_kms38% EQU 1 ( +%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" +%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" ) -if not defined _tskinstalled if not defined _oldtsk ( -echo. -if %winbuild% GEQ 9200 ( -call :leavenonexistentkms %nul% -echo Keeping the non-existent IP address 10.0.0.10 as KMS Server. +echo: +if defined sppwid ( +set _path=%slp% +set _actid=%sppwid% +call :_act act_win +call :_actinfo act_win ) else ( -call :Clear-KMS-Cache +if defined t_name echo Checking: Volume version of Windows is not installed +) + +if defined sppoid ( +set _path=%slp% +for %%# in (%sppoid%) do ( +set _actid=%%# +call :_act +if not defined _taskskip call :_actinfo ) ) -if not [%Act_OK%]==[1] ( -echo. -echo In case of any issues, check https://mass%-%grave.dev/troubleshoot +if defined osppid ( +set _path=%ospp% +for %%# in (%osppid%) do ( +set _actid=%%# +call :_act +if not defined _taskskip call :_actinfo +) ) -if defined _unattended exit /b +if not defined sppoid if not defined osppid if defined t_name ( +echo: +echo Checking: Volume version of Office is not installed +) -echo ____________________________________________________________________ -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul exit /b ::======================================================================================================================================== -:_errorinfo - -call :CheckFR - -set _intcon= -for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _intcon ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _intcon=1) -) +:_taskgetids -if not defined _intcon ( -call :_color %_Red% "Internet is not connected." +set %1= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %2 where (Name like '%%%3%%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get ID /VALUE" 2^>nul')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %2 WHERE Name like ''%%%3%%'' and Description like ''%%KMSCLIENT%%'' and PartialProductKey is not NULL AND LicenseDependsOn is NULL').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" +%chkapp% do (if defined %1 (call set "%1=!%1! %%a") else (call set "%1=%%a")) exit /b -) -if [%ERRORCODE%]==[-1073418124] ( -echo Checking Port 1688 connection, it may take a while... -echo. +:_taskgetgrace -set /a count=0 -set _portcon= -for %%a in (%srvlist%) do if not defined _portcon if !count! LEQ 7 ( -set /a count+=1 -%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""%%a""", 1688)}catch{};$t.Connected" | findstr /i true 1>nul && set _portcon=1 -) - -if not defined _portcon ( -call :_color %Red% "Port 1688 is blocked in your Internet connection." -echo. -echo Reason: Probably restricted Internet [Office/College] is connected, -echo or Firewall is blocking the connection. -echo. -echo Solution: Either use another Internet connection or use offline KMS -echo https://github.com/abbodi1406/KMS_VL_ALL_AIO -) else ( -echo Port 1688 connection test is passed. -echo. -echo Make sure system files are not blocked by your firewall. -echo If the issue persists, try offline KMS -echo https://github.com/abbodi1406/KMS_VL_ALL_AIO -) -echo. -) - -echo KMS server is not an issue in this case. +set gpr=0 +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get GracePeriodRemaining /VALUE" 2^>nul') do call set "gpr=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM !_path! where ID=''!_actid!''').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" 2^>nul') do call set "gpr=%%#" exit /b -::======================================================================================================================================== - -:setserv - -:: Multi KMS servers integration and servers randomization - -set srvlist= -set -= - -set "srvlist=kms.zhu%-%xiaole.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" -set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.wl%-%rxy.cn kms.ca%-%tqu.com" -set "srvlist=%srvlist% kms.0%-%t.net.cn kms.its%-%jzx.com kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" +:_taskchkEnterpriseG -set n=1 -for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) -set max_servers=15 -set /a server_num=0 +for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) exit /b -:getserv +::======================================================================================================================================== -if %server_num% equ %max_servers% set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b -set /a rand=%Random%%%(15+1-1)+1 -if defined !server%rand%! goto :getserv -set KMS_IP=!server%rand%! -set !server%rand%!=1 +:: Clean existing K-M-S cache from the registry -:: Get IPv4 address of KMS server to use for the activation, works even if ICMP echo is disabled. -:: Microsoft and Antivirus's may flag the issue if public KMS server host name is directly used for the activation. +:_taskclear-cache -set /a server_num+=1 -(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" -if [%KMS_IP%]==[!KMS_IP!] for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" -if not [%KMS_IP%]==[!KMS_IP!] exit /b -goto :getserv +set w= +for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do ( +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul% ) -:========================================================================================================================================== - -:Clear-KMS-Cache +set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" +set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -set OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform -set SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform +set "slp=SoftwareLicensingProduct" +set "ospp=OfficeSoftwareProtectionProduct" -set _wApp=55c92734-d682-4d71-983e-d6ec3f16059f -set _oApp=0ff1ce15-a989-479d-af46-f275c6370663 -set _oA14=59a52881-a989-479d-af46-f275c6370663 +set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" +set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" +set "_oA14=59a52881-a989-479d-af46-f275c6370663" %nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName +%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32 %nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort +%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32 %nul% reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing %nul% reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching %nul% reg delete "HKLM\%SPPk%\%_wApp%" /f if %winbuild% GEQ 9200 ( -if defined notx86 ( -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32 -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32 -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -) %nul% reg delete "HKLM\%SPPk%\%_oApp%" /f +%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 ) if %winbuild% GEQ 9600 ( %nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f @@ -6927,267 +5686,139 @@ if %winbuild% GEQ 9600 ( %nul% reg delete "HKLM\%OPPk%\%_oA14%" /f %nul% reg delete "HKLM\%OPPk%\%_oApp%" /f -:: check KMS38 lock - -%nul% reg query "HKLM\%SPPk%\%_wApp%" && ( -set error_=9 -echo Failed to completely clear KMS Cache. -reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo KMS38 activation is locked. -) || ( -echo Cleared KMS Cache successfully. -) exit /b -:========================================================================================================================================= - -:leavenonexistentkms - -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing -reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching -if not defined _keepkms38 reg delete "HKLM\%SPPk%\%_wApp%" /f -if %winbuild% GEQ 9200 ( -if not %xOS%==x86 ( -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -) -reg delete "HKLM\%SPPk%\%_oApp%" /f -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -) -if %winbuild% GEQ 9600 ( -reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f -reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f -) -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort -reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing -reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching -reg delete "HKLM\%OPPk%\%_oA14%" /f -reg delete "HKLM\%OPPk%\%_oApp%" /f -goto :eof - -:========================================================================================================================================= - -:_Complete_Uninstall +::======================================================================================================================================== -cls -mode con: cols=91 lines=30 -title Online KMS Complete Uninstall %masver% +:_taskregserv -set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" +if defined _server (set KMS_IP=%_server%) +if not defined _port set _port=1688 -set "_C16R=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" -if %winbuild% GEQ 9200 if defined _C16R ( -echo. -echo ## Notice ## -echo. -echo To make sure Office programs do not show a non-genuine banner, -echo please run the activation option once, and don't uninstall afterward. -echo __________________________________________________________________________________________ -) +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" /reg:32 -set error_= -echo. -call :Clear-KMS-Cache -call :clearstuff +%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" -if defined error_ ( -if [%error_%]==[1] ( -echo __________________________________________________________________________________________ -%eline% -echo Try Again / Restart the System -echo __________________________________________________________________________________________ -) -) else ( -echo __________________________________________________________________________________________ -echo. -call :_color %Green% "Online KMS Complete Uninstall was done successfully." -echo __________________________________________________________________________________________ +if %winbuild% GEQ 9200 ( +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" /reg:32 ) - -if defined _unattended timeout /t 2 & exit /b - -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul exit /b -:clearstuff - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && ( -echo Deleting [Task] Activation-Renewal -schtasks /delete /tn Activation-Renewal /f %nul% -) +::======================================================================================================================================== -reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && ( -echo Deleting [Task] Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% -) +:_tasksetserv -reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Renewal" >nul && ( -echo Deleting [Task] Online_KMS_Activation_Script-Renewal -schtasks /delete /tn Online_KMS_Activation_Script-Renewal /f %nul% -) +:: Multi K-M-S servers integration and servers randomization -reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Run_Once" >nul && ( -echo Deleting [Task] Online_KMS_Activation_Script-Run_Once -schtasks /delete /tn Online_KMS_Activation_Script-Run_Once /f %nul% -) +set srvlist= +set -= -If exist "%windir%\Online_KMS_Activation_Script\" ( -echo Deleting [Folder] %windir%\Online_KMS_Activation_Script\ -rmdir /s /q "%windir%\Online_KMS_Activation_Script\" %nul% -) +set "srvlist=kms.03%-%k.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" +set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.lol%-%i.best kms.my%-%ds.cloud" +set "srvlist=%srvlist% kms.0%-%t.net.cn win.k%-%ms.pub kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" -if exist "%ProgramData%\Online_KMS_Activation.cmd" ( -echo Deleting [File] %ProgramData%\Online_KMS_Activation.cmd -del /f /q "%ProgramData%\Online_KMS_Activation.cmd" %nul% -) +set n=1 +for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) +set max_servers=15 +set /a server_num=0 +exit /b -If exist "%ProgramData%\Online_KMS_Activation\" ( -echo Deleting [Folder] %ProgramData%\Online_KMS_Activation\ -rmdir /s /q "%ProgramData%\Online_KMS_Activation\" %nul% -) +:_taskgetserv -If exist "%ProgramData%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramData%\Activation-Renewal\ -rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% -) +if %server_num% geq %max_servers% (set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b) +set /a rand=%Random%%%(15+1-1)+1 +if defined !server%rand%! goto :_taskgetserv +set KMS_IP=!server%rand%! +set !server%rand%!=1 -If exist "%ProgramFiles%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ -rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% -) +:: Get IPv4 address of K-M-S server to use for the activation, works even if ICMP echo is disabled. +:: Microsoft and Antivirus's may flag the issue if public K-M-S server host name is directly used for the activation. -reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && ( -echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office -Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% +set /a server_num+=1 +(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" +if "%KMS_IP%"=="!KMS_IP!" for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" +if not "%KMS_IP%"=="!KMS_IP!" exit /b +goto :_taskgetserv ) +::Ver:2.7 +:_extracttask: -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 "\Online_KMS_Activation_Script" >nul && (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) -if exist "%ProgramData%\Online_KMS_Activation.cmd" (set error_=1) -if exist "%ProgramData%\Online_KMS_Activation\" (set error_=1) -if exist "%ProgramData%\Activation-Renewal\" (set error_=1) -if exist "%ProgramFiles%\Activation-Renewal\" (set error_=1) -exit /b - -:========================================================================================================================================= - -:RenTask +::======================================================================================================================================== -cls -mode con cols=91 lines=30 -title Install Activation Auto-Renewal %masver% +:ks_renewal set error_= set "_dest=%ProgramFiles%\Activation-Renewal" set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" -call :clearstuff %nul% +call :ks_clearstuff %nul% if defined error_ ( -%eline% -echo Failed to completely clear KMS related folders/tasks. -echo Run the Uninstall option and then try again. -goto :RenDone +set error=1 +call :dk_color %Red% "Failed to remove previous Renewal Task. Restart system / Try again." +exit /b ) if not exist "%_dest%\" md "%_dest%\" %nul% -set "_temp=%SystemRoot%\Temp\_taskwork_%Random%" +for /f %%G in ('%psc% "[Guid]::NewGuid().Guid"') do set "randguid=%%G" +set "_temp=%SystemRoot%\Temp\%Random%%randguid%" set nil= if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% md "%_temp%\" %nul% -call :RenExport renewal "%_temp%\Renewal.xml" Unicode -if defined ActTask (call :RenExport run_once "%_temp%\Run_Once.xml" Unicode) +call :ks_RenExport renewal "%_temp%\Renewal.xml" Unicode +if not defined _int (call :ks_RenExport run_once "%_temp%\Run_Once.xml" Unicode) s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Renewal" /ru "SYS%nil%TEM" /xml "%_temp%\Renewal.xml" %nul% -if defined ActTask (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) +if not defined _int (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% -call :createInfo.txt -%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 %masver% +call :ks_createInfo.txt +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@::%randguid%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII)" ::======================================================================================================================================== reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul || (set error_=1) -if defined ActTask reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul || (set error_=1) +if not defined _int reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul || (set error_=1) If not exist "%_dest%\Activation_task.cmd" (set error_=1) If not exist "%_dest%\Info.txt" (set error_=1) if defined error_ ( - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && ( schtasks /delete /tn Activation-Renewal /f %nul% -) -reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && ( schtasks /delete /tn Activation-Run_Once /f %nul% -) - -If exist "%_dest%\" ( rmdir /s /q "%_dest%\" %nul% +set error=1 +call :dk_color %Red% "Failed to install Renewal Task. Restart system / Try again." +exit /b ) -%eline% -echo Run the Uninstall option and then try again. -goto :RenDone -) - -echo __________________________________________________________________________________________ -echo. -echo Files created: -echo %_dest%\Activation_task.cmd -echo %_dest%\Info.txt -echo. -(if defined ActTask (echo Scheduled Tasks created:) else (echo Scheduled Task created:)) -echo \Activation-Renewal [Weekly] -if defined ActTask (echo \Activation-Run_Once) -echo __________________________________________________________________________________________ -echo. -echo Info: -echo Activation will be renewed every week if the Internet connection is found. -echo It'll only renew installed KMS licenses. It won't convert any license to KMS. -echo __________________________________________________________________________________________ -echo. -if defined ActTask ( -call :_color %Green% "Renewal and Activation Tasks were successfully created." -) else ( -call :_color %Green% "Renewal Task was successfully created." -) -echo. -call :_color %Gray% "Make sure you have run the Activation option at least once." -echo __________________________________________________________________________________________ +if "%keyerror%"=="0" if not defined _tserror ( +call :dk_color %Green% "Renewal Task for lifetime activation is successfully installed in %_dest%" +exit /b ) +echo Renewal Task for lifetime activation is successfully installed in %_dest% +exit /b -::======================================================================================================================================== - -:RenDone +:: Extract the text from batch script without character and file encoding issue -if defined _unattended exit /b +:ks_RenExport -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" exit /b ::======================================================================================================================================== -:createInfo.txt +:ks_createInfo.txt ( -echo The use of this script is to renew your Windows/Office KMS license using online KMS. +echo The use of this script is to renew your Windows/Office license using online K-M-S. echo: echo If renewal/activation Scheduled tasks were created then following would exist, echo: @@ -7202,10 +5833,10 @@ echo C:\Program Files\Activation-Renewal\Info.txt echo C:\Program Files\Activation-Renewal\Logs.txt echo ______________________________________________________________________________________________ echo: -echo Online KMS Activation Script is a part of 'Microsoft_Activation_Scripts' [MAS] project. +echo This Script is a part of MAS project. echo: echo Homepage: mass grave[.]dev -echo Email: windowsaddict@protonmail.com +echo Email: mas.help@outlook.com )>"%_dest%\Info.txt" exit /b @@ -7334,2672 +5965,3588 @@ exit /b ::======================================================================================================================================== -:: Extract the text from batch script without character and file encoding issue +:: 1st column = Office version number +:: 2nd column = Activation ID +:: 3rd column = Edition +:: 4th column = Other Edition IDs if they are part of the same primary product (For reference only) +:: Separator = "_" -:RenExport +:ks_msiretaildata -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" +for %%# in ( +:: Office 2010 +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_AccessRuntimeR +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_ExcelR +14_7004b7f0-6407-4f45-8eac-966e5f868bde_GrooveR +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_HomeStudentR_[HomeStudentDemoR] +14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_HSExcelR +14_25fe4611-b44d-49cc-ae87-2143d299194e_HSOneNoteR +14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_HSPowerPointR +14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_HSWordR +14_ef1da464-01c8-43a6-91af-e4e5713744f9_InfoPathR +14_14f5946a-debc-4716-babc-7e2c240fec08_MondoR +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_OEM +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_OneNoteR +14_fbf4ac36-31c8-4340-8666-79873129cf40_OutlookR +14_acb51361-c0db-4895-9497-1831c41f31a6_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_PowerPointR +14_8b559c37-0117-413e-921b-b853aeb6e210_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_ProjectProSubR +14_688f6589-2bd9-424e-a152-b13f36aa6de1_ProjectStdR +14_71af7e84-93e6-4363-9b69-699e04e74071_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_ProPlusSubR +14_98677603-a668-4fa4-9980-3f1f05f78f69_PublisherR +14_dbe3aee0-5183-4ff7-8142-66050173cb01_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_b78df69e-0966-40b1-ae85-30a5134dedd0_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_StandardR +14_2745e581-565a-4670-ae90-6bf7c57ffe43_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_VisioSIR_Prem[Pro,Std] +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_WordR +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail +15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail +15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail +15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail +15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail +15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail +15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail +15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail +15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail +:: Office 365 - 15.0 version +15_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail +16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail +16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail +16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail +16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail +16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail +16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail +16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +if %1==getmsiret if "%oVer%"=="%%A" ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%C | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) +) +) +) + +) +) exit /b ::======================================================================================================================================== -:_extracttask: -@echo off +:: 1st column = Activation ID +:: 2nd column = GVLK / Free Office products keys +:: 3rd column = In case of Windows, its SKU ID. In case of Office, its Office version +:: 4th column = Edition ID +:: 5th column = In case of Windows, its Build Branch name in case same Edition ID is used in different OS versions with different key (For reference only) +:: In case of Office, its either a key type if its a free Office product or Retail product names that needs to be converted to the Edition ID mentioned in 4th column +:: In Office 2010, one highest VL edition from each primary product ID is selected, that's why Visio Prem key is mentioned but not for Visio Pro, Std +:: Separator = "_" -:: Renew K-M-S activation with Online servers via scheduled task +:ksdata -::============================================================================ -:: -:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project. -:: -:: Homepage: mass grave[.]dev -:: Email: windowsaddict@protonmail.com -:: -::============================================================================ +set f= +for %%# in ( +:: Windows 10/11 +73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43___4_Enterprise +e272e3e2-732f-4c65-a8f0-484747d0d947_DPH2V-TTNVB-4X9Q3-TJR4H-KH%f%JW4__27_EnterpriseN +2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX__48_Professional +a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH37W-N47XK-V7XM9-C7227-GC%f%QG9__49_ProfessionalN +7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3KHY7-WNT83-DGQKR-F7HPR-84%f%4BM__98_CoreN +a9107544-f4a0-4053-a96a-1479abdef912_PVMJN-6DFY6-9CCP6-7BKTT-D3%f%WVR__99_CoreCountrySpecific +cd918a57-a41b-4c82-8dce-1a538e221a83_7HNRX-D7KGG-3K4RQ-4WPJ4-YT%f%DFH_100_CoreSingleLanguage +58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX9XD-98N7V-6WMQ6-BX7FG-H8%f%Q99_101_Core +e0c42288-980c-4788-a014-c080d2e1926e_NW6C2-QMPVW-D7KKK-3GKT6-VC%f%FB2_121_Education +3c102355-d027-42c6-ad23-2e7ef8a02585_2WH4N-8QGBV-H22JP-CT43Q-MD%f%WWJ_122_EducationN +32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_125_EnterpriseS_RS5,VB,Ge +2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCPHK-NFMTC-H88MJ-PFHPY-QJ%f%4BJ_125_EnterpriseS_RS1 +7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNMTR-4C88C-JK8YV-HQ7T2-76%f%DF9_125_EnterpriseS_TH1 +7103a333-b8c8-49cc-93ce-d37c09687f92_92NFX-8DJQP-P6BBQ-THF9C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge +9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFFDN-GRT3P-VKWWX-X7T3R-8B%f%639_126_EnterpriseSN_RS1 +87b838b7-41b6-4590-8318-5797951d8529_2F77B-TNFGY-69QQF-B8YKP-D6%f%9TJ_126_EnterpriseSN_TH1 +82bbc092-bc50-4e16-8e18-b74fc486aec3_NRG8B-VKK3Q-CXVCJ-9G2XF-6Q%f%84J_161_ProfessionalWorkstation +4b1571d3-bafb-4b40-8087-a961be2caf65_9FNHH-K3HBT-3W4TD-6383H-6X%f%YWF_162_ProfessionalWorkstationN +3f1afc82-f8ac-4f6c-8005-1d233e606eee_6TP4R-GNPTD-KYYHQ-7B7DP-J4%f%47Y_164_ProfessionalEducation +5300b18c-2e33-4dc2-8291-47ffcec746dd_YVWGF-BXNMC-HTQYQ-CPQ99-66%f%QFC_165_ProfessionalEducationN +e0b2d383-d112-413f-8a80-97f373a5820c_YYVX9-NTFWV-6MDM3-9PT4T-4M%f%68B_171_EnterpriseG +e38454fb-41a4-4f59-a5dc-25080e354730_44RPN-FTY23-9VTTB-MP9BX-T8%f%4FV_172_EnterpriseGN +ec868e65-fadf-4759-b23e-93fe37f2cc29_CPWHC-NT2C7-VYW78-DHDB2-PG%f%3GK_175_ServerRdsh_RS5 +e4db50ea-bda1-4566-b047-0ca50abc6f07_7NBT4-WGBQX-MP4H7-QXFF8-YP%f%3KX_175_ServerRdsh_RS3 +0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBTWJ-3DR69-3C4V8-C26MC-GQ%f%9M6_183_CloudE +59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_191_IoTEnterpriseS_VB,NI +d30136fc-cb4b-416e-a23d-87207abc44a9_6XN7V-PCBDC-BDBRH-8DQY7-G6%f%R44_202_CloudEditionN +ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D7F-N49CB-WQR8W-TBJ73-FM%f%8RX_203_CloudEdition +:: Windows 2016/19/22/25 LTSC/SAC +7dc26449-db21-4e09-ba37-28f2958506a6_TVRH6-WHNXV-R9WG3-9XRFY-MY%f%832___7_ServerStandard_Ge +9bd77860-9b31-4b7b-96ad-2564017315bf_VDYBN-27WPP-V4HQT-9VMD4-VM%f%K7H___7_ServerStandard_FE +de32eafd-aaee-4662-9444-c1befb41bde2_N69G4-B89J2-4G8F4-WWYCC-J4%f%64C___7_ServerStandard_RS5 +8c1c5410-9f39-4805-8c9d-63a07706358f_WC2BQ-8NRM3-FDDYY-2BFGV-KH%f%KQY___7_ServerStandard_RS1 +c052f164-cdf6-409a-a0cb-853ba0f0f55a_D764K-2NDRG-47T6Q-P8T8W-YP%f%6DF___8_ServerDatacenter_Ge +ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX4NM-KYWYW-QJJR4-XV3QB-6V%f%M33___8_ServerDatacenter_FE +34e1ae55-27f8-4950-8877-7a03be5fb181_WMDGN-G9PQG-XVVXX-R3X43-63%f%DFG___8_ServerDatacenter_RS5 +21c56779-b449-4d20-adfc-eece0e1ad74b_CB7KF-BWN84-R7R2Y-793K2-8X%f%DDG___8_ServerDatacenter_RS1 +034d3cbb-5d4b-4245-b3f8-f84571314078_WVDHN-86M7X-466P6-VHXV7-YY%f%726__50_ServerSolution_RS5 +2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JCKRF-N37P4-C2D82-9YXRT-4M%f%63B__50_ServerSolution_RS1 +7b4433f4-b1e7-4788-895a-c45378d38253_QN4C6-GBJD2-FB422-GHWJK-GJ%f%G2R_110_ServerCloudStorage +8de8eb62-bbe0-40ac-ac17-f75595071ea3_GRFBW-QNDC4-6QBHG-CCK3B-2P%f%R88_120_ServerARM64_RS5 +43d9af6e-5e86-4be8-a797-d072a046896c_K9FYF-G6NCK-73M32-XMVPY-F9%f%DRR_120_ServerARM64_RS4 +39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFND9-D3Y9C-J3KKY-6RPVP-2D%f%PYV_145_ServerDatacenterACor_FE +90c362e5-0da1-4bfd-b53b-b87d309ade43_6NMRW-2C8FM-D24W7-TQWMY-CW%f%H2D_145_ServerDatacenterACor_RS5 +e49c08e7-da82-42f8-bde2-b570fbcae76c_2HXDN-KRXHB-GPYC7-YCKFJ-7F%f%VDG_145_ServerDatacenterACor_RS3 +f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67KN8-4FYJW-2487Q-MQ2J7-4C%f%4RG_146_ServerStandardACor_FE +73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2KJX-J94YW-TQVFB-DG9YT-72%f%4CC_146_ServerStandardACor_RS5 +61c5ef22-f14f-4553-a824-c4b31e84b100_PTXN8-JFHJM-4WC78-MPCBR-9W%f%4KR_146_ServerStandardACor_RS3 +45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_FCNV3-279Q9-BQB46-FTKXX-9H%f%PRH_168_ServerAzureCor_Ge +8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N379-GGTMK-23C6M-XVVTC-CK%f%FRQ_168_ServerAzureCor_FE +a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_ServerAzureCor_RS5 +3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP34G-4NPPG-79JTQ-864T4-R3%f%MQX_168_ServerAzureCor_RS1 +c2e946d1-cfa2-4523-8c87-30bc696ee584_XGN3F-F394H-FD2MY-PP6FD-8M%f%CRC_407_ServerTurbine_Ge +19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTBV8-9K7Q8-V27C6-M2BTV-KH%f%MXV_407_ServerTurbine_RS5 +:: Windows 8.1 +81671aaf-79d1-4eb1-b004-8cbbe173afea_MHF9N-XY6XB-WVXMC-BTDCT-MK%f%KG7___4_Enterprise +113e705c-fa49-48a4-beea-7dd879b46b14_TT4HM-HN7YT-62K67-RGRQJ-JF%f%FXW__27_EnterpriseN +c06b6981-d7fd-4a35-b7b4-054742b7af67_GCRJD-8NW9H-F2CDX-CCM8D-9D%f%6T9__48_Professional +7476d79f-8e48-49b4-ab63-4d0b813a16e4_HMCNV-VVBFX-7HMBH-CTY9B-B4%f%FXY__49_ProfessionalN +f7e88590-dfc7-4c78-bccb-6f3865b99d1a_VHXM3-NR6FT-RY6RT-CK882-KW%f%2CJ__86_EmbeddedIndustryA +0ab82d54-47f4-4acb-818c-cc5bf0ecb649_NMMPB-38DD4-R2823-62W8D-VX%f%KJB__89_EmbeddedIndustry +cd4e2d9f-5059-4a50-a92d-05d5bb1267c7_FNFKF-PWTVT-9RC8H-32HB2-JB%f%34X__91_EmbeddedIndustryE +ffee456a-cd87-4390-8e07-16146c672fd0_XYTND-K6QKT-K2MRH-66RTM-43%f%JKP__97_CoreARM +78558a64-dc19-43fe-a0d0-8075b2a370a3_7B9N3-D94CG-YTVHR-QBPX3-RJ%f%P64__98_CoreN +db78b74f-ef1c-4892-abfe-1e66b8231df6_NCTT7-2RGK8-WMHRF-RY7YQ-JT%f%XG3__99_CoreCountrySpecific +c72c6a1d-f252-4e7e-bdd1-3fca342acb35_BB6NG-PQ82V-VRDPW-8XVD2-V8%f%P66_100_CoreSingleLanguage +fe1c3238-432a-43a1-8e25-97e7d1ef10f3_M9Q9P-WNJJT-6PXPY-DWX8H-6X%f%WKK_101_Core +096ce63d-4fac-48a9-82a9-61ae9e800e5f_789NJ-TQK6T-6XTH8-J39CJ-J8%f%D3P_103_ProfessionalWMC +e9942b32-2e55-4197-b0bd-5ff58cba8860_3PY8R-QHNP9-W7XQD-G6DPH-3J%f%2C9_111_CoreConnected +c6ddecd6-2354-4c19-909b-306a3058484e_Q6HTR-N24GM-PMJFP-69CD8-2G%f%XKR_113_CoreConnectedN +b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c_KF37N-VDV38-GRRTV-XH8X6-6F%f%3BB_115_CoreConnectedSingleLanguage +ba998212-460a-44db-bfb5-71bf09d1c68b_R962J-37N87-9VVK2-WJ74P-XT%f%MHR_116_CoreConnectedCountrySpecific +e58d87b5-8126-4580-80fb-861b22f79296_MX3RK-9HNGX-K3QKC-6PJ3F-W8%f%D7B_112_ProfessionalStudent +cab491c7-a918-4f60-b502-dab75e334f40_TNFGH-2R6PB-8XM3K-QYHX2-J4%f%296_114_ProfessionalStudentN +:: Windows Server 2012 R2 +b3ca044e-a358-4d68-9883-aaa2941aca99_D2N9P-3P6X9-2R39C-7RTCD-MD%f%VJX___7_ServerStandard +00091344-1ea4-4f37-b789-01750ba6988c_W3GGN-FT8W3-Y4M27-J84CP-Q3%f%VJ9___8_ServerDatacenter +21db6ba4-9a7b-4a14-9e29-64a60c59301d_KNC87-3J2TX-XB4WP-VCPJV-M4%f%FWM__50_ServerSolution +b743a2be-68d4-4dd3-af32-92425b7bb623_3NPTF-33KPT-GGBPR-YX76B-39%f%KDD_110_ServerCloudStorage +:: Windows 8 +458e1bec-837a-45f6-b9d5-925ed5d299de_32JNW-9KQ84-P47T8-D8GGY-CW%f%CK7___4_Enterprise +e14997e7-800a-4cf7-ad10-de4b45b578db_JMNMF-RHW7P-DMY6X-RF3DR-X2%f%BQT__27_EnterpriseN +a98bcd6d-5343-4603-8afe-5908e4611112_NG4HW-VH26C-733KW-K6F98-J8%f%CK4__48_Professional +ebf245c1-29a8-4daf-9cb1-38dfc608a8c8_XCVCF-2NXM9-723PB-MHCB7-2R%f%YQQ__49_ProfessionalN +10018baf-ce21-4060-80bd-47fe74ed4dab_RYXVT-BNQG7-VD29F-DBMRY-HT%f%73M__89_EmbeddedIndustry +18db1848-12e0-4167-b9d7-da7fcda507db_NKB3R-R2F8T-3XCDP-7Q2KW-XW%f%YQ2__91_EmbeddedIndustryE +af35d7b7-5035-4b63-8972-f0b747b9f4dc_DXHJF-N9KQX-MFPVR-GHGQK-Y7%f%RKV__97_CoreARM +197390a0-65f6-4a95-bdc4-55d58a3b0253_8N2M2-HWPGY-7PGT9-HGDD8-GV%f%GGY__98_CoreN +9d5584a2-2d85-419a-982c-a00888bb9ddf_4K36P-JN4VD-GDC6V-KDT89-DY%f%FKP__99_CoreCountrySpecific +8860fcd4-a77b-4a20-9045-a150ff11d609_2WN2H-YGCQR-KFX6K-CD6TF-84%f%YXQ_100_CoreSingleLanguage +c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60_BN3D2-R7TKB-3YPBD-8DRP2-27%f%GG4_101_Core +a00018a3-f20f-4632-bf7c-8daa5351c914_GNBB8-YVD74-QJHX6-27H4K-8Q%f%HDG_103_ProfessionalWMC +:: Windows Server 2012 +f0f5ec41-0d55-4732-af02-440a44a3cf0f_XC9B7-NBPP2-83J2H-RHMBY-92%f%BT4___7_ServerStandard +d3643d60-0c42-412d-a7d6-52e6635327f6_48HP8-DN98B-MYWDG-T2DCC-8W%f%83P___8_ServerDatacenter +8f365ba6-c1b9-4223-98fc-282a0756a3ed_HTDQM-NBMMG-KGYDT-2DTKT-J2%f%MPV__50_ServerSolution +7d5486c7-e120-4771-b7f1-7b56c6d3170c_HM7DN-YVMH3-46JC3-XYTG7-CY%f%QJJ__76_ServerMultiPointStandard +95fd1c83-7df5-494a-be8b-1300e1c9d1cd_XNH6W-2V9GX-RGJ4K-Y8X6F-QG%f%J2G__77_ServerMultiPointPremium +:: Windows 7 +ae2ee509-1b34-41c0-acb7-6d4650168915_33PXH-7Y6KF-2VJC9-XBBR8-HV%f%THH___4_Enterprise +1cb6d605-11b3-4e14-bb30-da91c8e3983a_YDRBP-3D83W-TY26F-D46B2-XC%f%KRJ__27_EnterpriseN +b92e9980-b9d5-4821-9c94-140f632f6312_FJ82H-XT6CR-J8D7P-XQJJ2-GP%f%DD4__48_Professional +54a09a0d-d57b-4c10-8b69-a842d6590ad5_MRPKT-YTG23-K7D7T-X2JMM-QY%f%7MG__49_ProfessionalN +db537896-376f-48ae-a492-53d0547773d0_YBYF6-BHCR3-JPKRB-CDW7B-F9%f%BK4__65_Embedded_POSReady +e1a8296a-db37-44d1-8cce-7bc961d59c54_XGY72-BRBBT-FF8MH-2GG8H-W7%f%KCW__65_Embedded_Standard +aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395_73KQT-CD9G6-K7TQG-66MRP-CQ%f%22C__65_Embedded_ThinPC +5a041529-fef8-4d07-b06f-b59b573b32d2_W82YF-2Q76Y-63HXB-FGJG9-GF%f%7QX__69_ProfessionalE +46bbed08-9c7b-48fc-a614-95250573f4ea_C29WB-22CC8-VJ326-GHFJW-H9%f%DH4__70_EnterpriseE +:: Windows Server 2008 R2 +68531fb9-5511-4989-97be-d11a0f55633f_YC6KT-GKW9T-YTKYR-T4X34-R7%f%VHC___7_ServerStandard +7482e61b-c589-4b7f-8ecc-46d455ac3b87_74YFP-3QFB3-KQT8W-PMXWJ-7M%f%648___8_ServerDatacenter +620e2b3d-09e7-42fd-802a-17a13652fe7a_489J6-VHDMP-X63PK-3K798-CP%f%X3Y__10_ServerEnterprise +7482e61b-c589-4b7f-8ecc-46d455ac3b87_74YFP-3QFB3-KQT8W-PMXWJ-7M%f%648__12_ServerDatacenterCore +68531fb9-5511-4989-97be-d11a0f55633f_YC6KT-GKW9T-YTKYR-T4X34-R7%f%VHC__13_ServerStandardCore +620e2b3d-09e7-42fd-802a-17a13652fe7a_489J6-VHDMP-X63PK-3K798-CP%f%X3Y__14_ServerEnterpriseCore +8a26851c-1c7e-48d3-a687-fbca9b9ac16b_GT63C-RJFQ3-4GMB6-BRFB9-CB%f%83V__15_ServerEnterpriseIA64 +a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_ServerWeb +cda18cf3-c196-46ad-b289-60c072869994_TT8MH-CG224-D3D7Q-498W2-9Q%f%CTX__18_ServerHPC +a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__29_ServerWebCore +f772515c-0e87-48d5-a676-e6962c3e1195_736RG-XDKJK-V34PF-BHK87-J6%f%X3K__56_ServerEmbeddedSolution +::======================================================================================================================================== +:: Office 2010 +8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL +cee5d470-6e3b-4fcc-8c2b-d17428568a9f_H62QG-HXVKF-PP4HP-66KMR-CW%f%9BM__14_ExcelVL +8947d0b8-c33b-43e1-8c56-9b674c052832_QYYW6-QP4CB-MBV6G-HYMCJ-4T%f%3J4__14_GrooveVL +ca6b6639-4ad6-40ae-a575-14dee07f6430_K96W8-67RPQ-62T9Y-J8FQJ-BT%f%37T__14_InfoPathVL +09ed9640-f020-400a-acd8-d7d867dfd9c2_YBJTT-JG6MD-V9Q7P-DBKXJ-38%f%W9R__14_MondoVL +ab586f5c-5256-4632-962f-fefd8b49e6f4_Q4Y4M-RHWJM-PY37F-MTKWH-D3%f%XHX__14_OneNoteVL +ecb7c192-73ab-4ded-acf4-2399b095d0cc_7YDC2-CWM8M-RRTJC-8MDVC-X3%f%DWQ__14_OutlookVL +45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a_RC8FX-88JRY-3PF7C-X8P67-P4%f%VTT__14_PowerPointVL +df133ff7-bf14-4f95-afe3-7b48e7e331ef_YGX6F-PGV49-PGW3J-9BTGG-VH%f%KC6__14_ProjectProVL +5dc7bf61-5ec9-4996-9ccb-df806a2d0efe_4HP3K-88W3F-W2K3D-6677X-F9%f%PGB__14_ProjectStdVL +6f327760-8c5c-417c-9b61-836a98287e0c_VYBBJ-TRJPB-QFQRF-QFT4D-H3%f%GVB__14_ProPlusVL +b50c4f75-599b-43e8-8dcd-1081a7967241_BFK7F-9MYHM-V68C7-DRQ66-83%f%YTP__14_PublisherVL +ea509e87-07a1-4a45-9edc-eba5a39f36af_D6QFG-VBYP2-XQHM7-J97RH-VV%f%RCK__14_SmallBusBasicsVL +9da2a678-fb6b-4e67-ab84-60dd6a9c819a_V7QKV-4XVVR-XYV4D-F7DFM-8R%f%6BM__14_StandardVL +92236105-bb67-494f-94c7-7f7a607929bd_D9DWC-HPYVV-JGF4P-BTWQB-WX%f%8BJ__14_VisioSIVL +2d0882e7-a4e7-423b-8ccc-70d91e0158b1_HVHB3-C6FV7-KQX9W-YQG79-CR%f%Y7T__14_WordVL +:: Office 2013 +6ee7622c-18d8-4005-9fb7-92db644a279b_NG2JY-H4JBT-HQXYP-78QH9-4J%f%M2D__15_AccessVolume_-AccessRetail- +f7461d52-7c2b-43b2-8744-ea958e0bd09a_VGPNG-Y7HQW-9RHP7-TKPV3-BG%f%7GB__15_ExcelVolume_-ExcelRetail- +fb4875ec-0c6b-450f-b82b-ab57d8d1677f_H7R7V-WPNXQ-WCYYC-76BGV-VT%f%7GH__15_GrooveVolume_-GrooveRetail- +a30b8040-d68a-423f-b0b5-9ce292ea5a8f_DKT8B-N7VXH-D963P-Q4PHY-F8%f%894__15_InfoPathVolume_-InfoPathRetail- +9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__15_LyncAcademicRetail_[PrepidBypass] +ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N42BF-CBY9F-W2C7R-X397X-DY%f%FQW__15_LyncEntryRetail_[PrepidBypass] +1b9f11e3-c85c-4e1b-bb29-879ad2c909e3_2MG3G-3BNTT-3MFW9-KDQW3-TC%f%K7R__15_LyncVolume_-LyncRetail- +1dc00701-03af-4680-b2af-007ffc758a1f_CWH2Y-NPYJW-3C7HD-BJQWB-G2%f%8JJ__15_MondoRetail +dc981c6b-fc8e-420f-aa43-f8f33e5c0923_42QTK-RN8M7-J3C4G-BBGYM-88%f%CYV__15_MondoVolume_-O365BusinessRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +3391e125-f6e4-4b1e-899c-a25e6092d40d_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%FF4__15_OneNoteFreeRetail_[Bypass] +efe1f3e6-aea2-4144-a208-32aa872b6545_TGN6P-8MMBC-37P2F-XHXXK-P3%f%4VW__15_OneNoteVolume_-OneNoteRetail- +771c3afa-50c5-443f-b151-ff2546d863a0_QPN8Q-BJBTJ-334K3-93TGY-2P%f%MBT__15_OutlookVolume_-OutlookRetail- +8c762649-97d1-4953-ad27-b7e2c25b972e_4NT99-8RJFH-Q2VDH-KYG2C-4R%f%D4F__15_PowerPointVolume_-PowerPointRetail- +4a5d124a-e620-44ba-b6ff-658961b33b9a_FN8TT-7WMH6-2D4X9-M337T-23%f%42K__15_ProjectProVolume_-ProjectProRetail- +427a28d1-d17c-4abf-b717-32c780ba6f07_6NTH3-CW976-3G3Y2-JK3TX-8Q%f%HTT__15_ProjectStdVolume_-ProjectStdRetail- +b322da9c-a2e2-4058-9e4e-f59a6970bd69_YC7DK-G2NP3-2QQC3-J6H88-GV%f%GXT__15_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- +00c79ff1-6850-443d-bf61-71cde0de305f_PN2WF-29XG2-T9HJ7-JQPJR-FC%f%XK4__15_PublisherVolume_-PublisherRetail- +ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W__15_SPDRetail_[PrepidBypass] +b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- +e13ac10e-75d0-4aff-a0cd-764982cf541c_C2FG9-N6J68-H8BTJ-BW3QX-RM%f%3B3__15_VisioProVolume_-VisioProRetail- +ac4efaf0-f81f-4f61-bdf7-ea32b02ab117_J484Y-4NKBF-W2HMG-DBMJC-PG%f%WR7__15_VisioStdVolume_-VisioStdRetail- +d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVolume_-WordRetail- +:: Office 2016 +9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV__16_AccessRuntimeRetail_[PrepidBypass] +67c0fc0c-deba-401b-bf8b-9c8ad8395804_GNH9Y-D2J4T-FJHGG-QRVH7-QP%f%FDW__16_AccessVolume_-AccessRetail- +c3e65d36-141f-4d2f-a303-a842ee756a29_9C2PK-NWTVB-JMPW8-BFT28-7F%f%TBF__16_ExcelVolume_-ExcelRetail- +e914ea6e-a5fa-4439-a394-a9bb3293ca09_DMTCJ-KNRKX-26982-JYCKT-P7%f%KB6__16_MondoRetail +9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM__16_OneNoteFreeRetail_[Bypass] +d8cace59-33d2-4ac7-9b1b-9b72339c51c8_DR92N-9HTF2-97XKM-XW2WJ-XW%f%3J6__16_OneNoteVolume_-OneNoteRetail-OneNote2021Retail- +ec9d9265-9d1e-4ed0-838a-cdc20f2551a1_R69KK-NTPKF-7M3Q4-QYBHW-6M%f%T9B__16_OutlookVolume_-OutlookRetail- +d70b1bba-b893-4544-96e2-b7a318091c33_J7MQP-HNJ4Y-WJ7YM-PFYGF-BY%f%6C6__16_PowerPointVolume_-PowerPointRetail- +4f414197-0fc2-4c01-b68a-86cbb9ac254c_YG9NW-3K39V-2T3HJ-93F3Q-G8%f%3KT__16_ProjectProVolume_-ProjectProRetail- +829b8110-0e6f-4349-bca4-42803577788d_WGT24-HCNMF-FQ7XH-6M8K7-DR%f%TW9__16_ProjectProXVolume +da7ddabc-3fbe-4447-9e01-6ab7440b4cd4_GNFHQ-F6YQM-KQDGJ-327XX-KQ%f%BVC__16_ProjectStdVolume_-ProjectStdRetail- +cbbaca45-556a-4416-ad03-bda598eaa7c8_D8NRQ-JTYM3-7J2DX-646CT-68%f%36M__16_ProjectStdXVolume +d450596f-894d-49e0-966a-fd39ed4c4c64_XQNVK-8JYDB-WJ9W3-YJ8YR-WF%f%G99__16_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- +041a06cb-c5b8-4772-809f-416d03d16654_F47MM-N3XJP-TQXJ9-BP99D-8K%f%837__16_PublisherVolume_-PublisherRetail- +9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__16_SkypeServiceBypassRetail_[PrepidBypass] +971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY__16_SkypeforBusinessEntryRetail_[PrepidBypass] +83e04ee1-fa8d-436d-8994-d31a862cab77_869NQ-FJ69K-466HW-QYCP2-DD%f%BV6__16_SkypeforBusinessVolume_-SkypeforBusinessRetail- +dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- +6bf301c1-b94a-43e9-ba31-d494598c47fb_PD3PC-RHNGV-FXJ29-8JK7D-RJ%f%RJK__16_VisioProVolume_-VisioProRetail- +b234abe3-0857-4f9c-b05a-4dc314f85557_69WXN-MBYV6-22PQG-3WGHK-RM%f%6XC__16_VisioProXVolume +aa2a7821-1827-4c2c-8f1d-4513a34dda97_7WHWN-4T7MP-G96JF-G33KR-W8%f%GF4__16_VisioStdVolume_-VisioStdRetail- +361fe620-64f4-41b5-ba77-84f8e079b1f7_NY48V-PPYYH-3F4PX-XJRKJ-W4%f%423__16_VisioStdXVolume +bb11badf-d8aa-470e-9311-20eaf80fe5cc_WXY84-JN2Q9-RBCCQ-3Q3J3-3P%f%FJ6__16_WordVolume_-WordRetail- +:: Office 2019 +22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FGQNJ-JWJCG-7Q8MG-RMRGJ-9T%f%QVF__16_AccessRuntime2019Retail_[PrepidBypass] +9e9bceeb-e736-4f26-88de-763f87dcc485_9N9PT-27V4Y-VJ2PD-YXFMF-YT%f%FQT__16_Access2019Volume_-Access2019Retail- +237854e9-79fc-4497-a0c1-a70969691c6b_TMJWT-YYNMB-3BKTF-644FC-RV%f%XBD__16_Excel2019Volume_-Excel2019Retail- +c8f8a301-19f5-4132-96ce-2de9d4adbd33_7HD7K-N4PVK-BHBCQ-YWQRW-XW%f%4VK__16_Outlook2019Volume_-Outlook2019Retail- +3131fd61-5e4f-4308-8d6d-62be1987c92c_RRNCX-C64HY-W2MM7-MCH9G-TJ%f%HMQ__16_PowerPoint2019Volume_-PowerPoint2019Retail- +2ca2bf3f-949e-446a-82c7-e25a15ec78c4_B4NPR-3FKK7-T2MBV-FRQ4W-PK%f%D2B__16_ProjectPro2019Volume_-ProjectPro2019Retail- +1777f0e3-7392-4198-97ea-8ae4de6f6381_C4F7P-NCP8C-6CQPT-MQHV9-JX%f%D2M__16_ProjectStd2019Volume_-ProjectStd2019Retail- +85dd8b5f-eaa4-4af3-a628-cce9e77c9a03_NMMKJ-6RK4F-KMJVX-8D9MJ-6M%f%WKP__16_ProPlus2019Volume_-ProPlus2019Retail-Professional2019Retail- +9d3e4cca-e172-46f1-a2f4-1d2107051444_G2KWX-3NW6P-PY93R-JXK2T-C9%f%Y9V__16_Publisher2019Volume_-Publisher2019Retail- +734c6c6e-b0ba-4298-a891-671772b2bd1b_NCJ33-JHBBY-HTK98-MYCV8-HM%f%KHJ__16_SkypeforBusiness2019Volume_-SkypeforBusiness2019Retail- +f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK__16_SkypeforBusinessEntry2019Retail_[PrepidBypass] +6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudent2019Retail-Personal2019Retail- +5b5cf08f-b81a-431d-b080-3450d8620565_9BGNQ-K37YR-RQHF2-38RQ3-7V%f%CBB__16_VisioPro2019Volume_-VisioPro2019Retail- +e06d7df3-aad0-419d-8dfb-0ac37e2bdf39_7TQNQ-K3YQQ-3PFH7-CCPPM-X4%f%VQ2__16_VisioStd2019Volume_-VisioStd2019Retail- +059834fe-a8ea-4bff-b67b-4d006b5447d3_PBX3G-NWMT6-Q7XBW-PYJGG-WX%f%D33__16_Word2019Volume_-Word2019Retail- +:: Office 2021 +1fe429d8-3fa7-4a39-b6f0-03dded42fe14_WM8YG-YNGDD-4JHDC-PG3F4-FC%f%4T4__16_Access2021Volume_-Access2021Retail- +ea71effc-69f1-4925-9991-2f5e319bbc24_NWG3X-87C9K-TC7YY-BC2G7-G6%f%RVC__16_Excel2021Volume_-Excel2021Retail- +a5799e4c-f83c-4c6e-9516-dfe9b696150b_C9FM6-3N72F-HFJXB-TM3V9-T8%f%6R9__16_Outlook2021Volume_-Outlook2021Retail- +6e166cc3-495d-438a-89e7-d7c9e6fd4dea_TY7XF-NFRBR-KJ44C-G83KF-GX%f%27K__16_PowerPoint2021Volume_-PowerPoint2021Retail- +76881159-155c-43e0-9db7-2d70a9a3a4ca_FTNWT-C6WBT-8HMGF-K9PRX-QV%f%9H8__16_ProjectPro2021Volume_-ProjectPro2021Retail- +6dd72704-f752-4b71-94c7-11cec6bfc355_J2JDC-NJCYY-9RGQ4-YXWMH-T3%f%D4T__16_ProjectStd2021Volume_-ProjectStd2021Retail- +fbdb3e18-a8ef-4fb3-9183-dffd60bd0984_FXYTK-NJJ8C-GB6DW-3DYQT-6F%f%7TH__16_ProPlus2021Volume_-ProPlus2021Retail-Professional2021Retail- +aa66521f-2370-4ad8-a2bb-c095e3e4338f_2MW9D-N4BXM-9VBPG-Q7W6M-KF%f%BGQ__16_Publisher2021Volume_-Publisher2021Retail- +1f32a9af-1274-48bd-ba1e-1ab7508a23e8_HWCXN-K3WBT-WJBKY-R8BD9-XK%f%29P__16_SkypeforBusiness2021Volume_-SkypeforBusiness2021Retail- +080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3_KDX7X-BNVR8-TXXGX-4Q7Y8-78%f%VT3__16_Standard2021Volume_-Standard2021Retail-HomeBusiness2021Retail-HomeStudent2021Retail-Personal2021Retail- +fb61ac9a-1688-45d2-8f6b-0674dbffa33c_KNH8D-FGHT4-T8RK3-CTDYJ-K2%f%HT4__16_VisioPro2021Volume_-VisioPro2021Retail- +72fce797-1884-48dd-a860-b2f6a5efd3ca_MJVNY-BYWPY-CWV6J-2RKRT-4M%f%8QG__16_VisioStd2021Volume_-VisioStd2021Retail- +abe28aea-625a-43b1-8e30-225eb8fbd9e5_TN8H9-M34D3-Y64V9-TR72V-X7%f%9KV__16_Word2021Volume_-Word2021Retail- +:: Office 2024 +fceda083-1203-402a-8ec4-3d7ed9f3648c_2TDPW-NDQ7G-FMG99-DXQ7M-TX%f%3T2__16_ProPlus2024Volume-Preview +aaea0dc8-78e1-4343-9f25-b69b83dd1bce_D9GTG-NP7DV-T6JP3-B6B62-JB%f%89R__16_ProjectPro2024Volume-Preview +4ab4d849-aabc-43fb-87ee-3aed02518891_YW66X-NH62M-G6YFP-B7KCT-WX%f%GKQ__16_VisioPro2024Volume-Preview +72e9faa7-ead1-4f3d-9f6e-3abc090a81d7_82FTR-NCHR7-W3944-MGRHM-JM%f%CWD__16_Access2024Volume_-Access2024Retail- +cbbba2c3-0ff5-4558-846a-043ef9d78559_F4DYN-89BP2-WQTWJ-GR8YC-CK%f%GJG__16_Excel2024Volume_-Excel2024Retail- +bef3152a-8a04-40f2-a065-340c3f23516d_D2F8D-N3Q3B-J28PV-X27HD-RJ%f%WB9__16_Outlook2024Volume_-Outlook2024Retail- +b63626a4-5f05-4ced-9639-31ba730a127e_CW94N-K6GJH-9CTXY-MG2VC-FY%f%CWP__16_PowerPoint2024Volume_-PowerPoint2024Retail- +f510af75-8ab7-4426-a236-1bfb95c34ff8_NBBBB-BBBBB-BBBBB-BBBH4-GX%f%3R4__16_ProjectPro2024Volume_-ProjectPro2024Retail- +9f144f27-2ac5-40b9-899d-898c2b8b4f81_PD3TT-NTHQQ-VC7CY-MFXK3-G8%f%7F8__16_ProjectStd2024Volume_-ProjectStd2024Retail- +8d368fc1-9470-4be2-8d66-90e836cbb051_NBBBB-BBBBB-BBBBB-BBBJD-VX%f%RPM__16_ProPlus2024Volume_-ProPlus2024Retail- +0002290a-2091-4324-9e53-3cfe28884cde_4NKHF-9HBQF-Q3B6C-7YV34-F6%f%4P3__16_SkypeforBusiness2024Volume +bbac904f-6a7e-418a-bb4b-24c85da06187_V28N4-JG22K-W66P8-VTMGK-H6%f%HGR__16_Standard2024Volume_-Home2024Retail-HomeBusiness2024Retail- +fa187091-8246-47b1-964f-80a0b1e5d69a_NBBBB-BBBBB-BBBBB-BBBCW-6M%f%X6T__16_VisioPro2024Volume_-VisioPro2024Retail- +923fa470-aa71-4b8b-b35c-36b79bf9f44b_JMMVY-XFNQC-KK4HK-9H7R3-WQ%f%QTV__16_VisioStd2024Volume_-VisioStd2024Retail- +d0eded01-0881-4b37-9738-190400095098_MQ84N-7VYDM-FXV7C-6K7CC-VF%f%W9J__16_Word2024Volume_-Word2024Retail- +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( +if %1==winkey if %osSKU%==%%C if not defined key ( +echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B +) -if not "%~1"=="Task" ( -echo. -echo ====== Error ====== -echo. -echo This file is supposed to be run only by the scheduled task. -echo. -echo Press any key to exit -pause >nul -exit /b +if %1==chkprod if "%oVer%"=="%%C" if not defined foundprod ( +echo "%%D" | findstr /I "\<%2.*" %nul% && set foundprod=1 ) -:: Set Path variable, it helps if it is misconfigured in the system +if %1==getinfo if not defined key if "%oVer%"=="%%C" ( +if /i "%2"=="%%D" ( +set key=%%B +set _actid=%%A +set _allactid=!_allactid! %%A +) else if not defined _oBranding if %_NoEditionChange%==0 ( +echo: %%E | find /i "-%2-" %nul% && ( +set key=%%B +set _altoffid=%%D +set _actid=%%A +set _allactid=!_allactid! %%A +) +) +) -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%" +if %1==getmsiprod if "%oVer%"=="%%C" ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%A" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%D | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%2\Registration\{%%A}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +) +) ) ->nul fltmc || exit /b +) +) +exit /b -::======================================================================================================================================== +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -set _tserror= -set winbuild=1 -set "nul=>nul 2>&1" -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -set psc=powershell.exe +:check_actstatus -set run_once= -set t_name=Renewal Task -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( -set run_once=1 -set t_name=Run Once Task +cls +if not defined terminal ( +mode 100, 32 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" ) -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 -) +%psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';iex ($f[1])" +goto dk_done -setlocal EnableDelayedExpansion -if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" & exit +:sppmgr: +function ExitScript($ExitCode = 0) +{ + Exit $ExitCode +} -::======================================================================================================================================== +if (-Not $PSVersionTable) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Windows PowerShell 1.0 is not supported by this script.' + ExitScript 1 +} -:_taskstart +if ($ExecutionContext.SessionState.LanguageMode.value__ -NE 0) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Windows PowerShell is not running in Full Language Mode.' + ExitScript 1 +} -echo. -echo %date%, %time% +$winbuild = 1 +try { + $winbuild = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$env:SystemRoot\System32\kernel32.dll").FileBuildPart +} catch { + $winbuild = [int](Get-WmiObject Win32_OperatingSystem).BuildNumber +} -set /a loop=1 -set /a max_loop=4 +if ($winbuild -EQ 1) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Could not detect Windows build.' + ExitScript 1 +} -call :_tasksetserv +if ($winbuild -LT 2600) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'This build of Windows is not supported by this script.' + ExitScript 1 +} -:_intrepeat - -:: Check Internet connection. Works even if ICMP echo is disabled. - -for %%a in (%srvlist%) do ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto _taskIntConnected -) -) +$NT6 = $winbuild -GE 6000 +$NT7 = $winbuild -GE 7600 +$NT9 = $winbuild -GE 9600 -nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto _taskIntConnected +$Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) -if %loop%==%max_loop% ( -set _tserror=1 -goto _taskend -) +$line2 = "============================================================" +$line3 = "____________________________________________________________" -echo. -echo Error: Internet is not connected -echo Waiting 30 seconds +function echoWindows +{ + Write-Host "$line2" + Write-Host "=== Windows Status ===" + Write-Host "$line2" + if (!$All.IsPresent) {Write-Host} +} -timeout /t 30 >nul -set /a loop=%loop%+1 -goto _intrepeat +function echoOffice +{ + if ($doMSG -EQ 0) { + return + } -:_taskIntConnected + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office Status ===" + Write-Host "$line2" + if (!$All.IsPresent) {Write-Host} -::======================================================================================================================================== + $script:doMSG = 0 +} -:: Check not x86 Windows +function strGetRegistry($strKey, $strName) +{ +Get-ItemProperty -EA 0 $strKey | select -EA 0 -Expand $strName +} -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 +function CheckOhook +{ + $ohook = 0 + $paths = "${env:ProgramFiles}", "${env:ProgramW6432}", "${env:ProgramFiles(x86)}" -::======================================================================================================================================== + 15, 16 | foreach ` + { + $A = $_; $paths | foreach ` + { + if (Test-Path "$($_)$('\Microsoft Office\Office')$($A)$('\sppc*dll')") {$ohook = 1} + } + } -set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" + "System", "SystemX86" | foreach ` + { + $A = $_; "Office 15", "Office" | foreach ` + { + $B = $_; $paths | foreach ` + { + if (Test-Path "$($_)$('\Microsoft ')$($B)$('\root\vfs\')$($A)$('\sppc*dll')") {$ohook = 1} + } + } + } -set "slp=SoftwareLicensingProduct" -set "ospp=OfficeSoftwareProtectionProduct" + if ($ohook -EQ 0) { + return + } -set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" -set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" -set "_oA14=59a52881-a989-479d-af46-f275c6370663" + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office Ohook Status ===" + Write-Host "$line2" + Write-Host + Write-Host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.' + Write-Host -back 'Black' -fore 'Yellow' 'You can ignore the below mentioned Office activation status.' + if (!$All.IsPresent) {Write-Host} +} -::======================================================================================================================================== +#region WMI +function DetectID($strSLP, $strAppId, [ref]$strAppVar) +{ + $fltr = "ApplicationID='$strAppId'" + if (!$All.IsPresent) { + $fltr = $fltr + " AND PartialProductKey <> NULL" + } + Get-WmiObject $strSLP ID -Filter $fltr -EA 0 | select ID -EA 0 | foreach { + $strAppVar.Value = 1 + } +} -:: Clean existing KMS cache from the registry / Set port value to 1688 +function GetID($strSLP, $strAppId, $strProperty = "ID") +{ + $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $IDs = [Collections.ArrayList]@() + + if ($All.IsPresent) { + $fltr = "ApplicationID='$strAppId' AND PartialProductKey IS NULL" + $clause = $fltr + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn <> NULL" + } + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn IS NULL" + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + } + } -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f -if %winbuild% GEQ 9200 ( -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -) -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -) -if %winbuild% GEQ 9600 ( -%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f -%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f -) -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -%nul% reg delete "HKLM\%OPPk%\%_oA14%" /f -%nul% reg delete "HKLM\%OPPk%\%_oApp%" /f + $fltr = "ApplicationID='$strAppId' AND PartialProductKey <> NULL" + $clause = $fltr + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn <> NULL" + } + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn IS NULL" + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + } -::======================================================================================================================================== + return $IDs +} -:: Check WMI and sppsvc Errors +function DetectSubscription { + if ($null -EQ $objSvc.SubscriptionType -Or $objSvc.SubscriptionType -EQ 120) { + return + } -set applist= -net start sppsvc /y %nul% -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" -if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) + if ($objSvc.SubscriptionType -EQ 1) { + $SubMsgType = "Device based" + } else { + $SubMsgType = "User based" + } -if not defined applist ( -set _tserror=1 -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -echo. -echo Error: Not Respoding- !e_wmispp! -echo. -) + if ($objSvc.SubscriptionStatus -EQ 120) { + $SubMsgStatus = "Expired" + } elseif ($objSvc.SubscriptionStatus -EQ 100) { + $SubMsgStatus = "Disabled" + } elseif ($objSvc.SubscriptionStatus -EQ 1) { + $SubMsgStatus = "Active" + } else { + $SubMsgStatus = "Not active" + } -::======================================================================================================================================== + $SubMsgExpiry = "Unknown" + if ($objSvc.SubscriptionExpiry) { + if ($objSvc.SubscriptionExpiry.Contains("unspecified") -EQ $false) {$SubMsgExpiry = $objSvc.SubscriptionExpiry} + } -:: Check installed volume products activation ID's + $SubMsgEdition = "Unknown" + if ($objSvc.SubscriptionEdition) { + if ($objSvc.SubscriptionEdition.Contains("UNKNOWN") -EQ $false) {$SubMsgEdition = $objSvc.SubscriptionEdition} + } -call :_taskgetids sppwid %slp% windows -call :_taskgetids sppoid %slp% office -call :_taskgetids osppid %ospp% office + Write-Host + Write-Host "Subscription information:" + Write-Host " Edition: $SubMsgEdition" + Write-Host " Type : $SubMsgType" + Write-Host " Status : $SubMsgStatus" + Write-Host " Expiry : $SubMsgExpiry" +} -::======================================================================================================================================== +function DetectAvmClient +{ + Write-Host + Write-Host "Automatic VM Activation client information:" + if (-Not [String]::IsNullOrEmpty($IAID)) { + Write-Host " Guest IAID: $IAID" + } else { + Write-Host " Guest IAID: Not Available" + } + if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { + Write-Host " Host machine name: $AutomaticVMActivationHostMachineName" + } else { + Write-Host " Host machine name: Not Available" + } + if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { + $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + Write-Host " Activation time: $EED UTC" + } else { + Write-Host " Activation time: Not Available" + } + if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { + Write-Host " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + } else { + Write-Host " Host Digital PID2: Not Available" + } +} -echo. -echo Renewing KMS activation for all installed Volume products +function DetectKmsHost +{ + if ($Vista -Or $NT5) { + $KeyManagementServiceListeningPort = strGetRegistry $SLKeyPath "KeyManagementServiceListeningPort" + $KeyManagementServiceDnsPublishing = strGetRegistry $SLKeyPath "DisableDnsPublishing" + $KeyManagementServiceLowPriority = strGetRegistry $SLKeyPath "EnableKmsLowPriority" + if (-Not $KeyManagementServiceDnsPublishing) {$KeyManagementServiceDnsPublishing = "TRUE"} + if (-Not $KeyManagementServiceLowPriority) {$KeyManagementServiceLowPriority = "FALSE"} + } else { + $KeyManagementServiceListeningPort = $objSvc.KeyManagementServiceListeningPort + $KeyManagementServiceDnsPublishing = $objSvc.KeyManagementServiceDnsPublishing + $KeyManagementServiceLowPriority = $objSvc.KeyManagementServiceLowPriority + } -if not defined sppwid if not defined sppoid if not defined osppid ( -echo. -echo No installed Volume Windows / Office product found -echo. -echo Renewing KMS server -call :_taskgetserv -call :_taskregserv -goto :_skipact -) + if (-Not $KeyManagementServiceListeningPort) {$KeyManagementServiceListeningPort = 1688} + if ($KeyManagementServiceDnsPublishing -EQ "TRUE") { + $KeyManagementServiceDnsPublishing = "Enabled" + } else { + $KeyManagementServiceDnsPublishing = "Disabled" + } + if ($KeyManagementServiceLowPriority -EQ "TRUE") { + $KeyManagementServiceLowPriority = "Low" + } else { + $KeyManagementServiceLowPriority = "Normal" + } -::======================================================================================================================================== + Write-Host + Write-Host "Key Management Service host information:" + Write-Host " Current count: $KeyManagementServiceCurrentCount" + Write-Host " Listening on Port: $KeyManagementServiceListeningPort" + Write-Host " DNS publishing: $KeyManagementServiceDnsPublishing" + Write-Host " KMS priority: $KeyManagementServiceLowPriority" + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { + Write-Host + Write-Host "Key Management Service cumulative requests received from clients:" + Write-Host " Total: $KeyManagementServiceTotalRequests" + Write-Host " Failed: $KeyManagementServiceFailedRequests" + Write-Host " Unlicensed: $KeyManagementServiceUnlicensedRequests" + Write-Host " Licensed: $KeyManagementServiceLicensedRequests" + Write-Host " Initial grace period: $KeyManagementServiceOOBGraceRequests" + Write-Host " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + Write-Host " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + Write-Host " Notification: $KeyManagementServiceNotificationRequests" + } +} -:: Check KMS38 activation +function DetectKmsClient +{ + if ($null -NE $VLActivationTypeEnabled) {Write-Host "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + Write-Host + if ($LicenseStatus -NE 1) { + Write-Host "Please activate the product in order to update KMS client information values." + return + } -set gpr=0 -set _kms38=0 -if defined sppwid if %winbuild% GEQ 14393 ( -set _path=%slp% -set _actid=%sppwid% -call :_taskgetgrace -) + if ($Vista) { + $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" + $DiscoveredKeyManagementServiceMachineName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" + $DiscoveredKeyManagementServiceMachinePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + } -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set _kms38=1 -call :_taskchkEnterpriseG _kms38 -) + if ([String]::IsNullOrEmpty($KeyManagementServiceMachine)) { + $KmsReg = $null + } else { + if (-Not $KeyManagementServicePort) {$KeyManagementServicePort = 1688} + $KmsReg = "Registered KMS machine name: ${KeyManagementServiceMachine}:${KeyManagementServicePort}" + } -:: Set specific KMS host to Local Host so that global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions. + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineName)) { + $KmsDns = "DNS auto-discovery: KMS name not available" + if ($Vista -And -Not $Admin) {$KmsDns = "DNS auto-discovery: Run the script as administrator to retrieve info"} + } else { + if (-Not $DiscoveredKeyManagementServiceMachinePort) {$DiscoveredKeyManagementServiceMachinePort = 1688} + $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceMachineName}:${DiscoveredKeyManagementServiceMachinePort}" + } -if %_kms38% EQU 1 ( -%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" -%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -) + if ($null -NE $objSvc.KeyManagementServiceHostCaching) { + if ($objSvc.KeyManagementServiceHostCaching -EQ "TRUE") { + $KeyManagementServiceHostCaching = "Enabled" + } else { + $KeyManagementServiceHostCaching = "Disabled" + } + } -::======================================================================================================================================== + Write-Host "Key Management Service client information:" + Write-Host " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + if ($null -EQ $KmsReg) { + Write-Host " $KmsDns" + Write-Host " Registered KMS machine name: KMS name not available" + } else { + Write-Host " $KmsReg" + } + if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {Write-Host " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} + Write-Host " KMS machine extended PID: $KeyManagementServiceProductKeyID" + Write-Host " Activation interval: $VLActivationInterval minutes" + Write-Host " Renewal interval: $VLRenewalInterval minutes" + if ($null -NE $KeyManagementServiceHostCaching) {Write-Host " KMS host caching: $KeyManagementServiceHostCaching"} + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {Write-Host " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} +} -echo. -if defined sppwid ( -set _path=%slp% -set _actid=%sppwid% -call :_actprod -call :_act act_win -call :_actinfo act_win -) else ( -echo Checking: Volume version of Windows is not installed -) +function GetResult($strSLP, $strSLS, $strID) +{ + try {$objPrd = Get-WmiObject $strSLP -Filter "ID='$strID'" -EA 1} catch {return} + $objPrd | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + } -if defined sppoid ( -set _path=%slp% -for %%# in (%sppoid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) + $winID = ($ApplicationID -EQ $winApp) + $winPR = ($winID -And -Not $LicenseIsAddon) + $Vista = ($winID -And $NT6 -And -Not $NT7) + $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) -if defined osppid ( -set _path=%ospp% -for %%# in (%osppid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) + if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} + if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} + if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} + if ($null -EQ $cKmsClient) { + if ($Description | Select-String "VOLUME_KMS") {$cKmsHost = 1} + } -if not defined sppoid if not defined osppid ( -echo. -echo Checking: Volume version of Office is not installed -) + $_gpr = [Math]::Round($GracePeriodRemaining/1440) + if ($_gpr -GT 0) { + $_xpr = [DateTime]::Now.addMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') + } -:_skipact + if ($null -EQ $LicenseStatusReason) {$LicenseStatusReason = -1} + $LicenseReason = '0x{0:X}' -f $LicenseStatusReason + $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" + if ($LicenseStatus -EQ 0) { + $LicenseInf = "Unlicensed" + $LicenseMsg = $null + } + if ($LicenseStatus -EQ 1) { + $LicenseInf = "Licensed" + $LicenseMsg = $null + if ($GracePeriodRemaining -EQ 0) { + if ($winPR) {$ExpireMsg = "The machine is permanently activated."} else {$ExpireMsg = "The product is permanently activated."} + } else { + $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" + if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} + } + } + if ($LicenseStatus -EQ 2) { + $LicenseInf = "Initial grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Initial grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 3) { + $LicenseInf = "Additional grace period (KMS license expired or hardware out of tolerance)" + if ($null -NE $_xpr) {$ExpireMsg = "Additional grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 4) { + $LicenseInf = "Non-genuine grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Non-genuine grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 5 -And -Not $NT5) { + $LicenseInf = "Notification" + $LicenseMsg = "Notification Reason: $LicenseReason" + if ($LicenseReason -EQ "0xC004F200") {$LicenseMsg = $LicenseMsg + " (non-genuine)."} + if ($LicenseReason -EQ "0xC004F009") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} + } + if ($LicenseStatus -GT 5 -Or ($LicenseStatus -GT 4 -And $NT5)) { + $LicenseInf = "Unknown" + $LicenseMsg = $null + } + if ($LicenseStatus -EQ 6 -And -Not $Vista -And -Not $NT5) { + $LicenseInf = "Extended grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} + } -::======================================================================================================================================== + if ($winPR -And $PartialProductKey -And -Not $NT9) { + $dp4 = Get-ItemProperty -EA 0 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | select -EA 0 -Expand DigitalProductId4 + if ($null -NE $dp4) { + $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) + } + } -if defined run_once ( -echo. -echo Deleting Scheduled Task Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% -) + if ($All.IsPresent) {Write-Host} + Write-Host "Name: $Name" + Write-Host "Description: $Description" + Write-Host "Activation ID: $ID" + if ($null -NE $ProductKeyID) {Write-Host "Extended PID: $ProductKeyID"} + if ($null -NE $OfflineInstallationId -And $IID.IsPresent) {Write-Host "Installation ID: $OfflineInstallationId"} + if ($null -NE $ProductKeyChannel) {Write-Host "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $PartialProductKey) {Write-Host "Partial Product Key: $PartialProductKey"} else {Write-Host "Product Key: Not installed"} + Write-Host "License Status: $LicenseInf" + if ($null -NE $LicenseMsg) {Write-Host "$LicenseMsg"} + if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { + $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + Write-Host "Evaluation End Date: $EED UTC" + } -::======================================================================================================================================== + if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { + DetectAvmClient + } -:_taskend + $chkSub = ($winPR -And $cSub) -echo. -echo Exiting -echo ______________________________________________________________________ + $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) -if defined _tserror (exit /b 123456789) else (exit /b 0) + if (!$chkSLS) { + if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + return + } -::======================================================================================================================================== + $objSvc = Get-WmiObject $strSLS -EA 0 -:_act + if ($Vista) { + $objSvc | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + } + } -set errorcode=12345 -set /a act_attempt=0 + if ($strSLS -EQ $wsls -And $NT9) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineIpAddress)) { + $DiscoveredKeyManagementServiceMachineIpAddress = "not available" + } + } -:_act2 + if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { + DetectKmsHost + } -if %act_attempt% GTR 4 exit /b + if ($null -NE $cKmsClient) { + DetectKmsClient + } -if not [%act_ok%]==[1] ( -call :_taskgetserv -call :_taskregserv -) + if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} -if not !server_num! GTR %max_servers% ( + if ($chkSub) { + DetectSubscription + } -if [%1]==[act_win] if %_kms38% EQU 1 ( -set act_ok=1 -exit /b -) +} +#endregion -if %_wmic% EQU 1 wmic path !_path! where ID='!_actid!' call Activate %nul% -if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM !_path! where ID=''!_actid!''').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" +#region vNextDiag +if ($PSVersionTable.PSVersion.Major -Lt 3) +{ + function ConvertFrom-Json + { + [CmdletBinding()] + Param( + [Parameter(ValueFromPipeline=$true)][Object]$item + ) + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") + $psjs = New-Object System.Web.Script.Serialization.JavaScriptSerializer + Return ,$psjs.DeserializeObject($item) + } + function ConvertTo-Json + { + [CmdletBinding()] + Param( + [Parameter(ValueFromPipeline=$true)][Object]$item + ) + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") + $psjs = New-Object System.Web.Script.Serialization.JavaScriptSerializer + Return $psjs.Serialize($item) + } +} -call set errorcode=!errorlevel! +function PrintModePerPridFromRegistry +{ + $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" + $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty 'property' -ErrorAction SilentlyContinue | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} + If ($null -Eq $vNextPrids) + { + Write-Host + Write-Host "No registry keys found." + Return + } + Write-Host + $vNextPrids | ForEach ` + { + $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ + Switch ($mode) + { + 2 { $mode = "vNext"; Break } + 3 { $mode = "Device"; Break } + Default { $mode = "Legacy"; Break } + } + Write-Host $_ = $mode + } +} -if !errorcode! EQU 0 ( -set act_ok=1 -exit /b -) -if [%1]==[act_win] if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( -set act_ok=1 -exit /b -) - -set act_ok=0 -set /a act_attempt+=1 -goto _act2 -) -exit /b +function PrintSharedComputerLicensing +{ + $scaRegKey = "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" + $scaValue = Get-ItemProperty -Path $scaRegKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + $scaRegKey2 = "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" + $scaValue2 = Get-ItemProperty -Path $scaRegKey2 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + $scaPolicyKey = "HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\Licensing" + $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + If ($null -Eq $scaValue -And $null -Eq $scaValue2 -And $null -Eq $scaPolicyValue) + { + Write-Host + Write-Host "No registry keys found." + Return + } + $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue + If ($scaModeValue -Eq 0) + { + $scaMode = "Disabled" + } + If ($scaModeValue -Eq 1) + { + $scaMode = "Enabled" + } + Write-Host + Write-Host "Status:" $scaMode + Write-Host + $tokenFiles = $null + $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" + If (Test-Path $tokenPath) + { + $tokenFiles = Get-ChildItem -Path $tokenPath -Filter "*authString*" -Recurse | Where-Object { !$_.PSIsContainer } + } + If ($null -Eq $tokenFiles) + { + Write-Host "No tokens found." + Return + } + If ($tokenFiles.Length -Eq 0) + { + Write-Host "No tokens found." + Return + } + $tokenFiles | ForEach ` + { + $tokenParts = (Get-Content -Encoding Unicode -Path $_.FullName).Split('_') + $output = New-Object PSObject + $output | Add-Member 8 'ACID' $tokenParts[0]; + $output | Add-Member 8 'User' $tokenParts[3]; + $output | Add-Member 8 'NotBefore' $tokenParts[4]; + $output | Add-Member 8 'NotAfter' $tokenParts[5]; + Write-Output $output + } +} -:_actprod +function PrintLicensesInformation +{ + Param( + [ValidateSet("NUL", "Device")] + [String]$mode + ) + If ($mode -Eq "NUL") + { + $licensePath = "${env:LOCALAPPDATA}\Microsoft\Office\Licenses" + } + ElseIf ($mode -Eq "Device") + { + $licensePath = "${env:PROGRAMDATA}\Microsoft\Office\Licenses" + } + $licenseFiles = $null + If (Test-Path $licensePath) + { + $licenseFiles = Get-ChildItem -Path $licensePath -Recurse | Where-Object { !$_.PSIsContainer } + } + If ($null -Eq $licenseFiles) + { + Write-Host + Write-Host "No licenses found." + Return + } + If ($licenseFiles.Length -Eq 0) + { + Write-Host + Write-Host "No licenses found." + Return + } + $licenseFiles | ForEach ` + { + $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License + $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json + $licenseType = $decodedLicense.LicenseType + If ($null -Ne $decodedLicense.ExpiresOn) + { + $expiry = [System.DateTime]::Parse($decodedLicense.ExpiresOn, $null, 'AdjustToUniversal') + } + Else + { + $expiry = New-Object System.DateTime + } + $licenseState = "Grace" + If ((Get-Date) -Gt (Get-Date $decodedLicense.Metadata.NotAfter)) + { + $licenseState = "RFM" + } + ElseIf ((Get-Date) -Lt (Get-Date $expiry)) + { + $licenseState = "Licensed" + } + $output = New-Object PSObject + $output | Add-Member 8 'File' $_.PSChildName; + $output | Add-Member 8 'Version' $_.Directory.Name; + $output | Add-Member 8 'Type' "User|${licenseType}"; + $output | Add-Member 8 'Product' $decodedLicense.ProductReleaseId; + $output | Add-Member 8 'Acid' $decodedLicense.Acid; + If ($mode -Eq "Device") { $output | Add-Member 8 'DeviceId' $decodedLicense.Metadata.DeviceId; } + $output | Add-Member 8 'LicenseState' $licenseState; + $output | Add-Member 8 'EntitlementStatus' $decodedLicense.Status; + $output | Add-Member 8 'EntitlementExpiration' ("N/A", $decodedLicense.ExpiresOn)[!($null -eq $decodedLicense.ExpiresOn)]; + $output | Add-Member 8 'ReasonCode' ("N/A", $decodedLicense.ReasonCode)[!($null -eq $decodedLicense.ReasonCode)]; + $output | Add-Member 8 'NotBefore' $decodedLicense.Metadata.NotBefore; + $output | Add-Member 8 'NotAfter' $decodedLicense.Metadata.NotAfter; + $output | Add-Member 8 'NextRenewal' $decodedLicense.Metadata.RenewAfter; + $output | Add-Member 8 'TenantId' ("N/A", $decodedLicense.Metadata.TenantId)[!($null -eq $decodedLicense.Metadata.TenantId)]; + #$output.PSObject.Properties | foreach { $ht = @{} } { $ht[$_.Name] = $_.Value } { $output = $ht | ConvertTo-Json } + Write-Output $output + } +} -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%x in ('"wmic path !_path! where ID='!_actid!' get Name /VALUE" 2^>nul') do call echo Activating: %%x -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%x in ('%psc% "(([WMISEARCHER]'SELECT Name FROM !_path! WHERE ID=''!_actid!''').Get()).Name | %% {echo ('Name='+$_)}" 2^>nul') do call echo Activating: %%x -exit /b +function vNextDiagRun +{ + $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $rPID = $null -NE (GP "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" -EA 0 | select -Expand 'property' -EA 0 | where -Filter {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}) + $rSCA = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) + $rSCL = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) -::======================================================================================================================================== + if (($fNUL -Or $fDev -Or $rPID -Or $rSCA -Or $rSCL) -EQ $false) { + Return + } -:_actinfo + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office vNext Status ===" + Write-Host "$line2" + Write-Host + Write-Host "========== Mode per ProductReleaseId ==========" + PrintModePerPridFromRegistry + Write-Host + Write-Host "========== Shared Computer Licensing ==========" + PrintSharedComputerLicensing + Write-Host + Write-Host "========== vNext licenses ===========" + PrintLicensesInformation -Mode "NUL" + Write-Host + Write-Host "========== Device licenses ==========" + PrintLicensesInformation -Mode "Device" + Write-Host "$line3" + Write-Host +} +#endregion -if [%1]==[act_win] if %_kms38% EQU 1 ( -echo Windows is activated with KMS38 -exit /b -) +#region clic -if %errorcode% EQU 12345 ( -echo Product Activation Failed -echo Unable to test KMS servers due to restricted or no Internet -set _tserror=1 -exit /b -) +<# +;;; Source: https://github.com/asdcorp/clic +;;; Powershell port: abbodi1406 -if %errorcode% EQU -1073418187 ( -echo Product Activation Failed: 0xC004F035 -if [%1]==[act_win] if %winbuild% LSS 9200 echo Windows 7 cannot be KMS-activated on this computer due to unqualified OEM BIOS -exit /b -) +Copyright 2023 asdcorp -if %errorcode% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -set _tserror=1 -exit /b -) +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -set gpr=0 -set gpr2=0 -call :_taskgetgrace -set /a "gpr2=(%gpr%+1440-1)/1440" +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -if %errorcode% EQU 0 if %gpr% EQU 0 ( -echo Product Activation succeeded, but Remaining Period failed to increase. -if [%1]==[act_win] if %winbuild% LSS 9200 echo This could be related to the error described in KB4487266 -set _tserror=1 -exit /b -) +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#> -set _actpass=1 -if %gpr% EQU 43200 if [%1]==[act_win] if %winbuild% GEQ 9200 set _actpass=0 -if %gpr% EQU 64800 set _actpass=0 -if %gpr% GTR 259200 if [%1]==[act_win] call :_taskchkEnterpriseG _actpass -if %gpr% EQU 259200 set _actpass=0 +function BoolToWStr($bVal) { + ("TRUE", "FALSE")[!$bVal] +} -if %errorcode% EQU 0 if %_actpass% EQU 0 ( -echo Product Activation Successful -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -exit /b -) +function InitializePInvoke { + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random)) + + $Class = $Module.DefineType('NativeMethods', 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') + $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + + if ($DllSubscription) { + $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) + [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') + [void]$Struct.DefineField('dwSku', [UInt32], 6) + [void]$Struct.DefineField('dwState', [UInt32], 6) + $SubStatus = $Struct.CreateType() + } -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 ( -echo Product Activation Failed: 0x!=ExitCode! -) else ( -echo Product Activation Failed -) -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set _tserror=1 -exit /b + $Win32 = $Class.CreateType() +} -::======================================================================================================================================== +function InitializeDigitalLicenseCheck { + $CAB = [System.Reflection.Emit.CustomAttributeBuilder] -:_taskgetids + $ICom = $Module.DefineType('EUM.IEUM', 'Public, Interface, Abstract, Import') + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.ComImportAttribute].GetConstructor(@()), @())) + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.GuidAttribute].GetConstructor(@([String])), @('F2DCB80D-0670-44BC-9002-CD18688730AF'))) + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.InterfaceTypeAttribute].GetConstructor(@([Int16])), @([Int16]1))) -set %1= -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %2 where (Name like '%%%3%%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get ID /VALUE" 2^>nul')" -if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %2 WHERE Name like ''%%%3%%'' and Description like ''%%KMSCLIENT%%'' and PartialProductKey is not NULL').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" -%chkapp% do (if defined %1 (call set "%1=!%1! %%a") else (call set "%1=%%a")) -exit /b + 1..4 | % { [void]$ICom.DefineMethod('VF'+$_, 'Public, Virtual, HideBySig, NewSlot, Abstract', 'Standard, HasThis', [Void], @()) } + [void]$ICom.DefineMethod('AcquireModernLicenseForWindows', 1478, 33, [Int32], @([Int32], [Int32].MakeByRefType())) -:_taskgetgrace + $IEUM = $ICom.CreateType() +} -set gpr=0 -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get GracePeriodRemaining /VALUE" 2^>nul') do call set "gpr=%%#" -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM !_path! where ID=''!_actid!''').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" 2^>nul') do call set "gpr=%%#" -exit /b +function PrintStateData { + $pwszStateData = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-Action-StateData", + [ref]$null, + [ref]$cbSize, + [ref]$pwszStateData + )) { + return $FALSE + } -:_taskchkEnterpriseG + [string[]]$pwszStateString = $Marshal::PtrToStringUni($pwszStateData) -replace ";", "`n " + Write-Host " $pwszStateString" -for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) -exit /b + $Marshal::FreeHGlobal($pwszStateData) + return $TRUE +} -::======================================================================================================================================== +function PrintLastActivationHRresult { + $pdwLastHResult = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-LastWindowsActivationHResult", + [ref]$null, + [ref]$cbSize, + [ref]$pdwLastHResult + )) { + return $FALSE + } -:_taskregserv + Write-Host (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" + $Marshal::FreeHGlobal($pdwLastHResult) + return $TRUE +} -if %winbuild% GEQ 9200 ( -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 -) -) -exit /b +function PrintIsWindowsGenuine { + $dwGenuine = 0 + $ppwszGenuineStates = @( + "SL_GEN_STATE_IS_GENUINE", + "SL_GEN_STATE_INVALID_LICENSE", + "SL_GEN_STATE_TAMPERED", + "SL_GEN_STATE_OFFLINE", + "SL_GEN_STATE_LAST" + ) -::======================================================================================================================================== + if ($Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine)) { + return $FALSE + } -:_tasksetserv + if ($dwGenuine -lt 5) { + Write-Host (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) + } else { + Write-Host (" IsWindowsGenuine={0}" -f $dwGenuine) + } -:: Multi KMS servers integration and servers randomization + return $TRUE +} -set srvlist= -set -= +function PrintDigitalLicenseStatus { + try { + . InitializeDigitalLicenseCheck + $ComObj = New-Object -Com EditionUpgradeManagerObj.EditionUpgradeManager + } catch { + return $FALSE + } -set "srvlist=kms.zhu%-%xiaole.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" -set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.wl%-%rxy.cn kms.ca%-%tqu.com" -set "srvlist=%srvlist% kms.0%-%t.net.cn kms.its%-%jzx.com kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" + $parameters = 1, $null -set n=1 -for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) -set max_servers=15 -set /a server_num=0 -exit /b + if ([EUM.IEUM].GetMethod("AcquireModernLicenseForWindows").Invoke($ComObj, $parameters)) { + return $FALSE + } -:_taskgetserv + $dwReturnCode = $parameters[1] + [bool]$bDigitalLicense = $FALSE -if %server_num% geq %max_servers% (set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b) -set /a rand=%Random%%%(15+1-1)+1 -if defined !server%rand%! goto :_taskgetserv -set KMS_IP=!server%rand%! -set !server%rand%!=1 + $bDigitalLicense = (($dwReturnCode -ge 0) -and ($dwReturnCode -ne 1)) + Write-Host (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) -:: Get IPv4 address of KMS server to use for the activation, works even if ICMP echo is disabled. -:: Microsoft and Antivirus's may flag the issue if public KMS server host name is directly used for the activation. + return $TRUE +} -set /a server_num+=1 -(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" -if [%KMS_IP%]==[!KMS_IP!] for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" -if not [%KMS_IP%]==[!KMS_IP!] exit /b -goto :_taskgetserv -) +function PrintSubscriptionStatus { + $dwSupported = 0 -:: Ver:1.9 -::======================================================================================================================================== -:_extracttask: + if ($winbuild -ge 15063) { + $pwszPolicy = "ConsumeAddonPolicySet" + } else { + $pwszPolicy = "Allow-WindowsSubscription" + } -:====================================================================================================================================================== + if ($Win32::SLGetWindowsInformationDWORD($pwszPolicy, [ref]$dwSupported)) { + return $FALSE + } -:_color + Write-Host (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) -if %_NCS% EQU 1 ( -if defined _unattended (echo %~2) else (echo %esc%[%~1%~2%esc%[0m) -) else ( -if defined _unattended (echo %~2) else (call :batcol %~1 "%~2") -) -exit /b + $pStatus = $Marshal::AllocHGlobal($Marshal::SizeOf([Type]$SubStatus)) + if ($Win32::ClipGetSubscriptionStatus([ref]$pStatus)) { + return $FALSE + } -:_color2 + $sStatus = [Activator]::CreateInstance($SubStatus) + $sStatus = $Marshal::PtrToStructure($pStatus, [Type]$SubStatus) + $Marshal::FreeHGlobal($pStatus) -if %_NCS% EQU 1 ( -echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( -call :batcol %~1 "%~2" %~3 "%~4" -) -exit /b + Write-Host (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) -::======================================= + if ($sStatus.dwEnabled -eq 0) { + return $TRUE + } -:: Colored text with pure batch method -:: Thanks to @dbenham and @jeb -:: stackoverflow.com/a/10407642 + Write-Host (" SubscriptionSku={0}" -f $sStatus.dwSku) + Write-Host (" SubscriptionState={0}" -f $sStatus.dwState) -:batcol + return $TRUE +} -pushd %_coltemp% -if not exist "'" ("'" set /p "=.") -setlocal -set "s=%~2" -set "t=%~4" -call :_batcol %1 s %3 t -del /f /q "'" -del /f /q "`.txt" -popd -exit /b +function ClicRun +{ + if ($All.IsPresent) {Write-Host} + Write-Host "Client Licensing Check information:" -:_batcol + $null = PrintStateData + $null = PrintLastActivationHRresult + $null = PrintIsWindowsGenuine -setlocal EnableDelayedExpansion -set "s=!%~2!" -set "t=!%~4!" -for /f delims^=^ eol^= %%i in ("!s!") do ( - if "!" equ "" setlocal DisableDelayedExpansion - >`.txt (echo %%i\..\') - findstr /a:%~1 /f:`.txt "." - `.txt (echo %%i\..\') - findstr /a:%~3 /f:`.txt "." - nul 2>&1 -net start sppsvc /y >nul 2>&1 -cscript //nologo slmgr.vbs /dli || (echo Error executing slmgr.vbs&del /f /q slmgr.vbs&popd&goto :casVend) -cscript //nologo slmgr.vbs /xpr -del /f /q slmgr.vbs >nul 2>&1 -popd -echo %line3% +cls +title Troubleshoot %masver% +if not defined terminal mode 77, 30 -if defined ohook ( -echo. -echo. -echo %line2% -echo *** Office Ohook Activation Status *** -echo %line2% -echo. -powershell "write-host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'" -echo. -) - -:casVo16 -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") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016 %_bit%-bit Status *** -) else ( -echo *** Office 2013/2016 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVo13 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016 32-bit Status *** -) else ( -echo *** Office 2013/2016 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVo13 -if %_sO16vbs% EQU 1 goto :casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 %_bit%-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 32-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 %_bit%-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVc16 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 32-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc16 -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 || ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 || goto :casVc13 -) -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (set "office=%%b\Office16") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016-2021 C2R Status *** -) else ( -echo *** Office 2013-2021 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVc13 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (set "office=%%b\Office16") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016-2021 C2R Status *** -) else ( -echo *** Office 2013-2021 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc13 -if %_sO16vbs% EQU 1 goto :casVc10 -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath >nul 2>&1 || ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath >nul 2>&1 || goto :casVc10 -) -set office= -if exist "%ProgramFiles%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramFiles%\Microsoft Office\Office15" -) else if exist "%ProgramW6432%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramW6432%\Microsoft Office\Office15" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramFiles(x86)%\Microsoft Office\Office15" -) -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 C2R Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc10 -if %_wow%==0 reg query HKLM\SOFTWARE\Microsoft\Office\14.0\CVH /f Click2run /k >nul 2>&1 || goto :casVend -if %_wow%==1 reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\CVH /f Click2run /k >nul 2>&1 || goto :casVend -set office= -if exist "%ProgramFiles%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramFiles%\Microsoft Office\Office14" -) else if exist "%ProgramW6432%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramW6432%\Microsoft Office\Office14" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramFiles(x86)%\Microsoft Office\Office14" -) -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 C2R Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVend -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b +echo: +echo: +echo: +echo: +echo: _______________________________________________________________ +echo: +call :dk_color2 %_White% " [1] " %_Green% "Help" +echo: ___________________________________________________ +echo: +echo: [2] Dism RestoreHealth +echo: [3] SFC Scannow +echo: +echo: [4] Fix WMI +echo: [5] Fix Licensing +echo: [6] Fix WPA Registry +echo: ___________________________________________________ +echo: +echo: [0] %_exitmsg% +echo: _______________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :" +choice /C:1234560 /N +set _erl=%errorlevel% -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +if %_erl%==7 exit /b +if %_erl%==6 start %mas%fix-wpa-registry &goto at_menu +if %_erl%==5 goto:retokens +if %_erl%==4 goto:fixwmi +if %_erl%==3 goto:sfcscan +if %_erl%==2 goto:dism_rest +if %_erl%==1 start %mas%troubleshoot.html &goto at_menu +goto :at_menu -:_Check_Status_wmi +::======================================================================================================================================== -@setlocal DisableDelayedExpansion -@echo off -mode con cols=100 lines=32 -powershell "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" -color 07 -title Check Activation Status [wmi] +:dism_rest -set WMI_VBS=0 -@cls -set "_cmdf=%~f0" -set wspp=SoftwareLicensingProduct -set wsps=SoftwareLicensingService -set ospp=OfficeSoftwareProtectionProduct -set osps=OfficeSoftwareProtectionService -set winApp=55c92734-d682-4d71-983e-d6ec3f16059f -set o14App=59a52881-a989-479d-af46-f275c6370663 -set o15App=0ff1ce15-a989-479d-af46-f275c6370663 -for %%# in (spp_get,ospp_get,cW1nd0ws,sppw,c0ff1ce15,sppo,osppsvc,ospp14,ospp15) do set "%%#=" -for /f "tokens=6 delims=[]. " %%# in ('ver') do set winbuild=%%# -set "spp_get=Description, DiscoveredKeyManagementServiceMachineName, DiscoveredKeyManagementServiceMachinePort, EvaluationEndDate, GracePeriodRemaining, ID, KeyManagementServiceMachine, KeyManagementServicePort, KeyManagementServiceProductKeyID, LicenseStatus, LicenseStatusReason, Name, PartialProductKey, ProductKeyID, VLActivationInterval, VLRenewalInterval" -set "ospp_get=%spp_get%" -if %winbuild% GEQ 9200 set "spp_get=%spp_get%, KeyManagementServiceLookupDomain, VLActivationTypeEnabled" -if %winbuild% GEQ 9600 set "spp_get=%spp_get%, DiscoveredKeyManagementServiceMachineIpAddress, ProductKeyChannel" -set "_work=%~dp0" -set "_batf=%~f0" -set "_batp=%_batf:'=''%" -set "_Local=%LocalAppData%" -set _Identity=0 -setlocal EnableDelayedExpansion -dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 -dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 -pushd "!_work!" -setlocal DisableDelayedExpansion -if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" set _Identity=0 +cls +if not defined terminal mode 98, 30 +title Dism /English /Online /Cleanup-Image /RestoreHealth -set "SysPath=%SystemRoot%\System32" -set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "SysPath=%SystemRoot%\Sysnative" -set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +if %winbuild% LSS 9200 ( +%eline% +echo Unsupported OS version detected. +echo This command only works on Windows 8/8.1/10/11 and their Server equivalents. +goto :at_back ) -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 +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) + +echo: +if defined _int ( +echo Checking Internet Connection [Connected] +) else ( +call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" ) -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 +echo %line% +echo: +echo DISM uses Windows Update to provide replacement files required to fix corruption. +echo This will take 5-15 minutes or more.. +echo %line% +echo: +echo Notes: +echo: +call :dk_color2 %_White% " - " %Gray% "Make sure the internet is connected." +call :dk_color2 %_White% " - " %Gray% "Make sure that Windows update is properly working." +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +cls +if not defined terminal mode 110, 30 + +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + +%psc% Stop-Service TrustedInstaller -force %nul% + +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul% +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% +del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul% + +echo: +echo Applying the command... +echo dism /english /online /cleanup-image /restorehealth +dism /english /online /cleanup-image /restorehealth + +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul% + +if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% +call :compresslog cbs\cbs_%_time%.log AT_Logs\RHealth_CBS %nul% +call :compresslog DISM\dism_%_time%.log AT_Logs\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: +call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on your desktop." +goto :at_back + +::======================================================================================================================================== + +:sfcscan + +cls +if not defined terminal mode 98, 30 +title sfc /scannow + +echo: +echo %line% +echo: +echo SFC will repair missing or corrupted system files. +echo It is recommended you run the DISM option first before this one. +echo This will take 10-15 minutes or more.. +echo: +echo If SFC could not fix something, then run the command again to see if it may be able +echo to the next time. Sometimes it may take running the sfc /scannow command 3 times +echo restarting the PC after each time to completely fix everything that it's able to. +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +cls +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + +%psc% Stop-Service TrustedInstaller -force %nul% + +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% + +echo: +echo Applying the command... +echo sfc /scannow +sfc /scannow + +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% + +if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% +call :compresslog cbs\cbs_%_time%.log AT_Logs\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% ) -set _cwmi=0 -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 +echo: +call :dk_color %Gray% "The CBS log was copied to the AT_Logs folder on your Desktop." +goto :at_back + +::======================================================================================================================================== + +:retokens + +cls +if not defined terminal ( +mode 125, 32 +%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 ^+ SPP ^+ OSPP^) -if %_cwmi% EQU 0 ( echo: -echo Error: WMI is not responding in the system. +echo %line% +echo: +echo Notes: echo: -echo In MAS, Goto Troubleshoot and run Fix WMI option. +echo - This option helps in troubleshooting activation issues. echo: -echo Press any key to go back... -pause >nul -exit /b +echo - This option will: +echo - Deactivate Windows and Office, you may need to reactivate. +echo If Windows is activated with motherboard / OEM / Digital license +echo then Windows will activate itself again. +echo: +echo - Clear ClipSVC, SPP and OSPP licenses. +echo - Fix permissions of SPP tokens folder and registries. +echo - Trigger the repair option for Office. +echo: +call :dk_color2 %_White% " - " %Red% "Apply this option only when it is necessary." +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +::======================================================================================================================================== + +:: Rebuild ClipSVC Licences + +cls +:cleanlicensing + +echo: +echo %line% +echo: +call :dk_color %Blue% "Rebuilding ClipSVC Licenses..." +echo: + +if %winbuild% LSS 10240 ( +echo ClipSVC license rebuilding is supported only on Windows 10/11 and their Server equivalents. +echo Skipping... +goto :rebuildspptok ) -set "line2=************************************************************" -set "line3=____________________________________________________________" -set "_psc=powershell" - -set _prsh=1 -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _prsh=0 -set "_csg=cscript.exe //NoLogo //Job:WmiMulti "%~nx0?.wsf"" -set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf"" -set "_csx=cscript.exe //NoLogo //Job:XPDT "%~nx0?.wsf"" -if %_cwmi% EQU 0 set WMI_VBS=1 -if %WMI_VBS% EQU 0 ( -set "_zz1=wmic path" -set "_zz2=where" -set "_zz3=get" -set "_zz4=/value" -set "_zz5=(" -set "_zz6=)" -set "_zz7="wmic path" -set "_zz8=/value"" -) else ( -set "_zz1=%_csq%" -set "_zz2=" -set "_zz3=" -set "_zz4=" -set "_zz5="" -set "_zz6="" -set "_zz7=%_csq%" -set "_zz8=" -) -set _WSH=0 -set OsppHook=1 -sc query osppsvc >nul 2>&1 -if %errorlevel% EQU 1060 set OsppHook=0 - -net start sppsvc /y >nul 2>&1 -call :casWpkey %wspp% %winApp% cW1nd0ws sppw -if %winbuild% GEQ 9200 call :casWpkey %wspp% %o15App% c0ff1ce15 sppo -if %OsppHook% NEQ 0 ( -net start osppsvc /y >nul 2>&1 -call :casWpkey %ospp% %o14App% osppsvc ospp14 -if %winbuild% LSS 9200 call :casWpkey %ospp% %o15App% osppsvc ospp15 -) - -echo %line2% -echo *** Windows Status *** -echo %line2% -if not defined cW1nd0ws ( -echo. -echo Error: product key not found. -goto :casWcon -) -set winID=1 -set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%winApp%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%wspp%" "%wsps%" "%spp_get%" - call :casWout - echo %line3% - echo. +%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && ( +echo Windows is permanently activated. +echo Skipping... +goto :rebuildspptok ) -if defined ohook ( -echo. -echo. -echo %line2% -echo *** Office Ohook Activation Status *** -echo %line2% -echo. -powershell "write-host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'" -echo. -) - -:casWcon -set winID=0 -set verbose=1 -if not defined c0ff1ce15 ( -if defined osppsvc goto :casWospp -goto :casWend -) -echo %line2% -echo *** Office Status *** -echo %line2% -set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%wspp%" "%wsps%" "%spp_get%" - call :casWout - echo %line3% - echo. -) -set verbose=0 -if defined osppsvc goto :casWospp -goto :casWend - -:casWospp -if %verbose% EQU 1 ( -echo %line2% -echo *** Office Status *** -echo %line2% -) -set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -if defined ospp15 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%ospp%" "%osps%" "%ospp_get%" - call :casWout - echo %line3% - echo. -) -set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o14App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -if defined ospp14 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%ospp%" "%osps%" "%ospp_get%" - call :casWout - echo %line3% - echo. -) -goto :casWend - -:casWpkey -set "_qr=%_zz1% %1 %_zz2% %_zz5%ApplicationID='%2' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz4%" -%_qr% 2>nul | findstr /i ID 1>nul && (set %3=1&set %4=1) -exit /b +echo Stopping ClipSVC service... +%psc% Stop-Service ClipSVC -force %nul% +timeout /t 2 %nul% -:casWdet -for %%# in (%~3) do set "%%#=" -if /i %~1==%ospp% for %%# in (DiscoveredKeyManagementServiceMachineIpAddress, KeyManagementServiceLookupDomain, ProductKeyChannel, VLActivationTypeEnabled) do set "%%#=" -set "cKmsClient=" -set "cTblClient=" -set "cAvmClient=" -set "ExpireMsg=" -set "_xpr=" -set "_qr="wmic path %~1 where ID='%chkID%' get %~3 /value" ^| findstr ^=" -if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~1 "ID='%chkID%'" "%~3"" -for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" - -set /a _gpr=(GracePeriodRemaining+1440-1)/1440 -echo %Description%| findstr /i VOLUME_KMSCLIENT 1>nul && (set cKmsClient=1&set _mTag=Volume) -echo %Description%| findstr /i TIMEBASED_ 1>nul && (set cTblClient=1&set _mTag=Timebased) -echo %Description%| findstr /i VIRTUAL_MACHINE_ACTIVATION 1>nul && (set cAvmClient=1&set _mTag=Automatic VM) -cmd /c exit /b %LicenseStatusReason% -set "LicenseReason=%=ExitCode%" -set "LicenseMsg=Time remaining: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" -if %_gpr% GEQ 1 if %_WSH% EQU 1 ( -for /f "tokens=* delims=" %%# in ('%_csx% %GracePeriodRemaining%') do set "_xpr=%%#" -) -if %_gpr% GEQ 1 if %_prsh% EQU 1 if not defined _xpr ( -for /f "tokens=* delims=" %%# in ('%_psc% "$([DateTime]::Now.addMinutes(%GracePeriodRemaining%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "_xpr=%%#" -title Check Activation Status [wmi] -) - -if %LicenseStatus% EQU 0 ( -set "License=Unlicensed" -set "LicenseMsg=" -) -if %LicenseStatus% EQU 1 ( -set "License=Licensed" -set "LicenseMsg=" -if %GracePeriodRemaining% EQU 0 ( - if %winID% EQU 1 (set "ExpireMsg=The machine is permanently activated.") else (set "ExpireMsg=The product is permanently activated.") - ) else ( - set "LicenseMsg=%_mTag% activation expiration: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" - if defined _xpr set "ExpireMsg=%_mTag% activation will expire %_xpr%" - ) -) -if %LicenseStatus% EQU 2 ( -set "License=Initial grace period" -if defined _xpr set "ExpireMsg=Initial grace period ends %_xpr%" -) -if %LicenseStatus% EQU 3 ( -set "License=Additional grace period (KMS license expired or hardware out of tolerance)" -if defined _xpr set "ExpireMsg=Additional grace period ends %_xpr%" -) -if %LicenseStatus% EQU 4 ( -set "License=Non-genuine grace period." -if defined _xpr set "ExpireMsg=Non-genuine grace period ends %_xpr%" -) -if %LicenseStatus% EQU 6 ( -set "License=Extended grace period" -if defined _xpr set "ExpireMsg=Extended grace period ends %_xpr%" -) -if %LicenseStatus% EQU 5 ( -set "License=Notification" - if "%LicenseReason%"=="C004F200" (set "LicenseMsg=Notification Reason: 0xC004F200 (non-genuine)." - ) else if "%LicenseReason%"=="C004F009" (set "LicenseMsg=Notification Reason: 0xC004F009 (grace time expired)." - ) else (set "LicenseMsg=Notification Reason: 0x%LicenseReason%" - ) -) -if %LicenseStatus% GTR 6 ( -set "License=Unknown" -set "LicenseMsg=" -) -if not defined cKmsClient exit /b - -if %KeyManagementServicePort%==0 set KeyManagementServicePort=1688 -set "KmsReg=Registered KMS machine name: %KeyManagementServiceMachine%:%KeyManagementServicePort%" -if "%KeyManagementServiceMachine%"=="" set "KmsReg=Registered KMS machine name: KMS name not available" - -if %DiscoveredKeyManagementServiceMachinePort%==0 set DiscoveredKeyManagementServiceMachinePort=1688 -set "KmsDns=KMS machine name from DNS: %DiscoveredKeyManagementServiceMachineName%:%DiscoveredKeyManagementServiceMachinePort%" -if "%DiscoveredKeyManagementServiceMachineName%"=="" set "KmsDns=DNS auto-discovery: KMS name not available" - -set "_qr="wmic path %~2 get ClientMachineID, KeyManagementServiceHostCaching /value" ^| findstr ^=" -if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~2 "ClientMachineID, KeyManagementServiceHostCaching"" -for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" -if /i %KeyManagementServiceHostCaching%==True (set KeyManagementServiceHostCaching=Enabled) else (set KeyManagementServiceHostCaching=Disabled) - -if %winbuild% LSS 9200 exit /b -if /i %~1==%ospp% exit /b - -if "%KeyManagementServiceLookupDomain%"=="" set "KeyManagementServiceLookupDomain=" - -if %VLActivationTypeEnabled% EQU 3 ( -set VLActivationType=Token -) else if %VLActivationTypeEnabled% EQU 2 ( -set VLActivationType=KMS -) else if %VLActivationTypeEnabled% EQU 1 ( -set VLActivationType=AD -) else ( -set VLActivationType=All -) +echo: +echo Applying the command to clean ClipSVC Licenses... +echo rundll32 clipc.dll,ClipCleanUpState -if %winbuild% LSS 9600 exit /b -if "%DiscoveredKeyManagementServiceMachineIpAddress%"=="" set "DiscoveredKeyManagementServiceMachineIpAddress=not available" -exit /b +rundll32 clipc.dll,ClipCleanUpState -:casWout -echo. -echo Name: %Name% -echo Description: %Description% -echo Activation ID: %ID% -echo Extended PID: %ProductKeyID% -if defined ProductKeyChannel echo Product Key Channel: %ProductKeyChannel% -echo Partial Product Key: %PartialProductKey% -echo License Status: %License% -if defined LicenseMsg echo %LicenseMsg% -if not %LicenseStatus%==0 if not %EvaluationEndDate:~0,8%==16010101 echo Evaluation End Date: %EvaluationEndDate:~0,4%-%EvaluationEndDate:~4,2%-%EvaluationEndDate:~6,2% %EvaluationEndDate:~8,2%:%EvaluationEndDate:~10,2% UTC -if not defined cKmsClient ( -if defined ExpireMsg echo.&echo. %ExpireMsg% -exit /b +if %winbuild% LEQ 10240 ( +echo [Successful] +) else ( +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] ) -if defined VLActivationTypeEnabled echo Configured Activation Type: %VLActivationType% -echo. -if not %LicenseStatus%==1 ( -echo Please activate the product in order to update KMS client information values. -exit /b ) -echo Most recent activation information: -echo Key Management Service client information -echo. Client Machine ID (CMID): %ClientMachineID% -echo. %KmsDns% -echo. %KmsReg% -if defined DiscoveredKeyManagementServiceMachineIpAddress echo. KMS machine IP address: %DiscoveredKeyManagementServiceMachineIpAddress% -echo. KMS machine extended PID: %KeyManagementServiceProductKeyID% -echo. Activation interval: %VLActivationInterval% minutes -echo. Renewal interval: %VLRenewalInterval% minutes -echo. K.M.S. host caching: %KeyManagementServiceHostCaching% -if defined KeyManagementServiceLookupDomain echo. KMS SRV record lookup domain: %KeyManagementServiceLookupDomain% -if defined ExpireMsg echo.&echo. %ExpireMsg% -exit /b -:casWend -if %_Identity% EQU 1 if %_prsh% EQU 1 ( -echo %line2% -echo *** Office vNext Status *** -echo %line2% -setlocal EnableDelayedExpansion -%_psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':vNextDiag\:.*';iex ($f[1])" -title Check Activation Status [wmi] -echo %line3% -echo. +:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after +:: system restart. It needs to be deleted to activate the system without restart. + +set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" + +reg query "%RegKey%" %nul% && %nul% call :regownstart +reg delete "%RegKey%" /f %nul% + +echo: +echo Deleting a Volatile ^& Protected Registry Key... +echo [%RegKey%] +reg query "%RegKey%" %nul% && ( +call :dk_color %Red% "[Failed]" +echo Reboot your machine using the restart option, that will delete this registry key automatically. +) || ( +echo [Successful] ) -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b -:vNextDiag: -function PrintModePerPridFromRegistry -{ - $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" - $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} - If ($vNextPrids -Eq $null) - { - Write-Host "No registry keys found." - Return - } - $vNextPrids | ForEach ` - { - $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ - Switch ($mode) - { - 2 { $mode = "vNext"; Break } - 3 { $mode = "Device"; Break } - Default { $mode = "Legacy"; Break } - } - Write-Host $_ = $mode - } -} -function PrintSharedComputerLicensing -{ - $scaRegKey = "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" - $scaValue = Get-ItemProperty -Path $scaRegKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - $scaRegKey2 = "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" - $scaValue2 = Get-ItemProperty -Path $scaRegKey2 -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - $scaPolicyKey = "HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\Licensing" - $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - If ($scaValue -Eq $null -And $scaValue2 -Eq $null -And $scaPolicyValue -Eq $null) - { - Write-Host "No registry keys found." - Return - } - $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue - If ($scaModeValue -Eq 0) - { - $scaMode = "Disabled" - } - If ($scaModeValue -Eq 1) - { - $scaMode = "Enabled" - } - Write-Host "SharedComputerLicensing" = $scaMode - Write-Host - $tokenFiles = $null - $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" - If (Test-Path $tokenPath) - { - $tokenFiles = Get-ChildItem -Path $tokenPath -Recurse -File -Filter "*authString*" - } - If ($tokenFiles.length -Eq 0) - { - Write-Host "No tokens found." - Return - } - $tokenFiles | ForEach ` - { - $tokenParts = (Get-Content -Encoding Unicode -Path $_.FullName).Split('_') - $output = [PSCustomObject] ` - @{ - ACID = $tokenParts[0]; - User = $tokenParts[3] - NotBefore = $tokenParts[4]; - NotAfter = $tokenParts[5]; - } | ConvertTo-Json - Write-Host $output - } -} -function PrintLicensesInformation -{ - Param( - [ValidateSet("NUL", "Device")] - [String]$mode - ) - If ($mode -Eq "NUL") - { - $licensePath = "${env:LOCALAPPDATA}\Microsoft\Office\Licenses" - } - ElseIf ($mode -Eq "Device") - { - $licensePath = "${env:PROGRAMDATA}\Microsoft\Office\Licenses" - } - $licenseFiles = $null - If (Test-Path $licensePath) - { - $licenseFiles = Get-ChildItem -Path $licensePath -Recurse -File - } - If ($licenseFiles.length -Eq 0) - { - Write-Host "No licenses found." - Return - } - $licenseFiles | ForEach ` - { - $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License - $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json - $licenseType = $decodedLicense.LicenseType - If ($null -Ne $decodedLicense.ExpiresOn) - { - $expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48) - } - Else - { - $expiry = New-Object DateTime - } - $licenseState = $null - If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter)) - { - $licenseState = "RFM" - } - ElseIf ((Get-Date) -Lt (Get-Date $expiry)) - { - $licenseState = "Licensed" - } - Else - { - $licenseState = "Grace" - } - if ($mode -Eq "NUL") - { - $output = [PSCustomObject] ` - @{ - Version = $_.Directory.Name - Type = "User|${licenseType}"; - Product = $decodedLicense.ProductReleaseId; - Acid = $decodedLicense.Acid; - LicenseState = $licenseState; - EntitlementStatus = $decodedLicense.Status; - EntitlementExpiration = $decodedLicense.ExpiresOn; - ReasonCode = $decodedLicense.ReasonCode; - NotBefore = $decodedLicense.Metadata.NotBefore; - NotAfter = $decodedLicense.Metadata.NotAfter; - NextRenewal = $decodedLicense.Metadata.RenewAfter; - TenantId = $decodedLicense.Metadata.TenantId; - } | ConvertTo-Json - } - ElseIf ($mode -Eq "Device") - { - $output = [PSCustomObject] ` - @{ - Version = $_.Directory.Name - Type = "Device|${licenseType}"; - Product = $decodedLicense.ProductReleaseId; - Acid = $decodedLicense.Acid; - DeviceId = $decodedLicense.Metadata.DeviceId; - LicenseState = $licenseState; - EntitlementStatus = $decodedLicense.Status; - EntitlementExpiration = $decodedLicense.ExpiresOn; - ReasonCode = $decodedLicense.ReasonCode; - NotBefore = $decodedLicense.Metadata.NotBefore; - NotAfter = $decodedLicense.Metadata.NotAfter; - NextRenewal = $decodedLicense.Metadata.RenewAfter; - TenantId = $decodedLicense.Metadata.TenantId; - } | ConvertTo-Json - } - Write-Output $output - } -} - Write-Host - Write-Host "========== Mode per ProductReleaseId ==========" - Write-Host -PrintModePerPridFromRegistry - Write-Host - Write-Host "========== Shared Computer Licensing ==========" - Write-Host -PrintSharedComputerLicensing - Write-Host - Write-Host "========== vNext licenses ==========" - Write-Host -PrintLicensesInformation -Mode "NUL" - Write-Host - Write-Host "========== Device licenses ==========" - Write-Host -PrintLicensesInformation -Mode "Device" -:vNextDiag: +:: Clear HWID token related registry to fix activation incase there is any corruption -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +echo: +echo Deleting IdentityCRL Registry Key... +echo [%_ident%] +reg delete "%_ident%" /f %nul% +reg query "%_ident%" %nul% && ( +call :dk_color %Red% "[Failed]" +) || ( +echo [Successful] +) + +%psc% Stop-Service ClipSVC -force %nul% + +:: Rebuild ClipSVC folder to fix permission issues + +echo: +if %winbuild% GTR 10240 ( +echo Deleting folder %ProgramData%\Microsoft\Windows\ClipSVC\ +rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul% + +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] +) + +echo: +echo Rebuilding the %ProgramData%\Microsoft\Windows\ClipSVC\ folder... +%psc% Start-Service ClipSVC %nul% +timeout /t 3 %nul% +if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul% +if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] +) +) + +echo: +echo Restarting wlidsvc ^& LicenseManager services... +for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") + +::======================================================================================================================================== + +:: Rebuild SPP Tokens + +:rebuildspptok + +echo: +echo %line% +echo: +call :dk_color %Blue% "Rebuilding SPP licensing tokens..." +echo: + +call :scandat check + +if not defined token ( +call :dk_color %Red% "tokens.dat file not found." +) else ( +echo tokens.dat file: [%token%] +) + +set tokenstore= +set badregistry= +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 %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set badregistry=1 +echo: +call :dk_color %Red% "Correct path not found in TokenStore Registry [%tokenstore%]" +) + +:: Check sppsvc permissions and apply fixes + +if %winbuild% GEQ 9200 if not defined badregistry ( +echo: +echo Checking SPP permission related issues... +call :checkperms +if defined permerror ( +call :dk_color %Red% "[!permerror!]" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':fixsppperms\:.*';iex ($f[1])" %nul% +call :checkperms +if defined permerror ( +call :dk_color %Red% "[!permerror!] [Failed To Fix]" +) else ( +call :dk_color %Green% "[Successfully Fixed]" +) +) else ( +echo [No Error Found] +) +) + +echo: +echo Stopping sppsvc service... +%psc% Stop-Service sppsvc -force %nul% + +set w= +set _sppint= +for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) +if defined _sppint ( +echo: +echo Removing SPP IFEO registry keys... +for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) +) + +if %winbuild% LSS 9200 ( +REM Fix issues caused by Update KB971033 in Windows 7 +REM https://support.microsoft.com/help/4487266 +echo: +echo Checking Update KB971033... +%psc% "if (Get-Hotfix -Id KB971033 -ErrorAction SilentlyContinue) {Exit 3}" %nul% +if !errorlevel!==3 ( +echo Found, uninstalling it... +wusa /uninstall /quiet /norestart /kb:971033 +) else ( +echo [Not Found] +) +%psc% Stop-Service sppuinotify -force %nul% +sc config sppuinotify start= disabled +del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0 /ah +) + +:: Delete registry keys that are not deleted by activation scripts + +echo: +echo Cleaning some licensing-related registry keys... +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "ServiceSessionId" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "LicStatusArray" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "PolicyValuesArray" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f + +echo: +call :scandat delete +call :scandat check + +if defined token ( +echo: +call :dk_color %Red% "Failed to delete .dat files." +echo: +) + +echo: +echo Reinstalling system licenses... +%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if %errorlevel% EQU 0 ( +echo [Successful] +) else ( +call :dk_color %Red% "[Failed]" +) + +call :scandat check + +echo: +if not defined token ( +call :dk_color %Red% "Failed to rebuild tokens.dat file." +) else ( +echo tokens.dat file was rebuilt successfully. +) + +if %winbuild% LSS 9200 ( +sc config sppuinotify start= demand +) + +::======================================================================================================================================== + +:: Rebuild OSPP Tokens + +echo: +echo %line% +echo: +call :dk_color %Blue% "Rebuilding OSPP licensing tokens..." +echo: + +sc qc osppsvc %nul% || ( +echo OSPP-based Office is not installed. +echo Skipping rebuilding OSPP tokens... +goto :repairoffice +) + +call :scandatospp check + +if not defined token ( +call :dk_color %Red% "tokens.dat file not found." +) else ( +echo tokens.dat file: [%token%] +) + +echo: +echo Stopping osppsvc service... +%psc% Stop-Service osppsvc -force %nul% + +echo: +call :scandatospp delete +call :scandatospp check + +if defined token ( +echo: +call :dk_color %Red% "Failed to delete .dat files." +echo: +) + +echo: +echo Starting osppsvc service to generate tokens.dat... +%psc% Start-Service osppsvc %nul% +call :scandatospp check +if not defined token ( +%psc% Stop-Service osppsvc -force %nul% +%psc% Start-Service osppsvc %nul% +timeout /t 3 %nul% +) + +call :scandatospp check + +echo: +if not defined token ( +call :dk_color %Red% "Failed to rebuild tokens.dat file." +) else ( +echo tokens.dat file was rebuilt successfully. +) + +::======================================================================================================================================== + +:repairoffice + +echo: +echo %line% +echo: +call :dk_color %Blue% "Repairing Office licenses..." +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 + +if /i "%arch%"=="x86" ( +set arch=X86 +) else ( +set arch=X64 +) + +for %%# in (68 86) do ( +for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=) +) + +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office + +reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=") +reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=") + +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) + +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & set "c2r16repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") + +set uwp16= +if %winbuild% GEQ 10240 ( +%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set uwp16=Office 16.0 UWP +) + +set /a counter=0 +echo Checking installed Office versions... +echo: + +for %%# in ( +"%msi14_68%" +"%msi14_86%" +"%msi15_68%" +"%msi15_86%" +"%msi16_68%" +"%msi16_86%" +"%c2r14_68%" +"%c2r14_86%" +"%c2r15_68%" +"%c2r15_86%" +"%c2r16_68%" +"%c2r16_86%" +"%uwp16%" +) do ( +if not "%%#"=="""" ( +set insoff=%%# +set insoff=!insoff:"=! +echo [!insoff!] +set /a counter+=1 +) +) -:troubleshoot -@setlocal DisableDelayedExpansion -@echo off +if %counter% GTR 1 ( +%eline% +echo Multiple Office versions found. +echo It is recommended to only install one version of Office. +echo ________________________________________________________________ +echo: +) -::======================================================================================================================================== +if %counter% EQU 0 ( +echo: +echo Office ^(2010 and later^) is not installed. +goto :repairend +echo: +) else ( +echo: +call :dk_color %_Yellow% "A new window will appear, in that window you need to select [Quick Repair] option." +if defined terminal ( +call :dk_color %_Yellow% "Press [0] to continue..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to continue..." +pause %nul1% +) +) -cls -color 07 -title Troubleshoot %masver% +if defined uwp16 ( +echo: +echo Note: Skipping repair for Office 16.0 UWP... +echo You need to use the Reset option in Windows Settings instead. +echo ________________________________________________________________ +echo: +start ms-settings:appsfeatures +) -set _args= -set _elev= +set c2r14= +if defined c2r14_68 set c2r14=1 +if defined c2r14_86 set c2r14=1 -set _args=%* -if defined _args set _args=%_args:"=% -if defined _args ( -for %%A in (%_args%) do ( -if /i "%%A"=="-el" set _elev=1 -) +if defined c2r14 ( +echo: +echo Note: Skipping repair for Office 14.0 C2R... +echo You need to use the Repair option in Windows Settings for it. +echo ________________________________________________________________ +echo: +start appwiz.cpl ) -set "nul1=1>nul" -set "nul2=2>nul" -set "nul6=2^>nul" -set "nul=>nul 2>&1" +if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%" +if defined msi14_86 if exist "%msi14repair86%" echo Running - "%msi14repair86%" & "%msi14repair86%" +if defined msi15_68 if exist "%msi15repair68%" echo Running - "%msi15repair68%" & "%msi15repair68%" +if defined msi15_86 if exist "%msi15repair86%" echo Running - "%msi15repair86%" & "%msi15repair86%" +if defined msi16_68 if exist "%msi16repair68%" echo Running - "%msi16repair68%" & "%msi16repair68%" +if defined msi16_86 if exist "%msi16repair86%" echo Running - "%msi16repair86%" & "%msi16repair86%" +if defined c2r15_68 if exist "%c2r15repair68%" echo Running - "%c2r15repair68%" REPAIRUI RERUNMODE & "%c2r15repair68%" REPAIRUI RERUNMODE +if defined c2r15_86 if exist "%c2r15repair86%" echo Running - "%c2r15repair86%" REPAIRUI RERUNMODE & "%c2r15repair86%" REPAIRUI RERUNMODE +if defined c2r16_68 if exist "%c2r16repair68%" echo Running - "%c2r16repair68%" scenario=Repair & "%c2r16repair68%" scenario=Repair +if defined c2r16_86 if exist "%c2r16repair86%" echo Running - "%c2r16repair86%" scenario=Repair & "%c2r16repair86%" scenario=Repair -set psc=powershell.exe -set winbuild=1 -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +:repairend -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) +echo: +echo %line% +echo: +echo: +call :dk_color %Green% "Finished" +goto :at_back -call :_colorprep +:getrepairsetup -set "nceline=echo: &echo ==== ERROR ==== &echo:" -set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" -set "line=_________________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +set "_common86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" +set "_common68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" + +if exist "%_common86%" set "%1=%_common86%" +if exist "%_common68%" set "%1=%_common68%" +exit /b ::======================================================================================================================================== -:: Fix special characters limitation in path name +:fixwmi -set "_work=%~dp0" -if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" +cls +if not defined terminal mode 98, 34 +title Fix WMI -set "_batf=%~f0" -set "_batp=%_batf:'=''%" +:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484 -set _PSarg="""%~f0""" -el %_args% +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +%eline% +echo Rebuilding WMI is not recommended on Windows Server, aborting... +goto :at_back +) -set "_ttemp=%userprofile%\AppData\Local\Temp" +echo: +echo Checking WMI +call :checkwmi -:: Check desktop location +:: Apply basic fix first and check -set desktop= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b" -if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a" +if defined error ( +%psc% Stop-Service Winmgmt -force %nul% +winmgmt /salvagerepository %nul% +call :checkwmi +) -if not defined desktop ( -%eline% -echo Desktop location was not detected, aborting... -goto at_done +if not defined error ( +echo [Working] +echo No need to apply this option, aborting... +goto :at_back ) -setlocal EnableDelayedExpansion +call :dk_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) -:at_menu +echo: +if defined _corrupt ( +%eline% +echo Winmgmt service is corrupted, aborting... +goto :at_back +) -cls -color 07 -title Troubleshoot %masver% -mode con cols=77 lines=30 +echo Disabling Winmgmt service +sc config Winmgmt start= disabled %nul% +if %errorlevel% EQU 0 ( +echo [Successful] +) else ( +call :dk_color %Red% "[Failed] Aborting..." +sc config Winmgmt start= auto %nul% +goto :at_back +) echo: +echo Stopping Winmgmt service +%psc% Stop-Service Winmgmt -force %nul% +%psc% Stop-Service Winmgmt -force %nul% +%psc% Stop-Service Winmgmt -force %nul% +sc query Winmgmt | find /i "STOPPED" %nul% && ( +echo [Successful] +) || ( +call :dk_color %Red% "[Failed]" echo: +call :dk_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again." +echo %line% echo: +choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :" +if !errorlevel!==1 (sc config Winmgmt start= auto %nul%&goto :at_back) echo: -echo: _______________________________________________________________ -echo: -call :_color2 %_White% " [1] " %_Green% "Help" -echo: ___________________________________________________ -echo: -echo: [2] Dism RestoreHealth -echo: [3] SFC Scannow -echo: -echo: [4] Fix WMI -echo: [5] Fix Licensing -echo: [6] Fix WPA Registry -echo: ___________________________________________________ +echo Restarting... +shutdown -t 5 -r +exit +) + echo: -echo: [0] %_exitmsg% -echo: _______________________________________________________________ -echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" -choice /C:1234560 /N -set _erl=%errorlevel% +echo Deleting WMI repository +rmdir /s /q "%SysPath%\wbem\repository\" %nul% +if exist "%SysPath%\wbem\repository\" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] +) -if %_erl%==7 exit /b -if %_erl%==6 start %mas%fix-wpa-registry.html &goto at_menu -if %_erl%==5 goto:retokens -if %_erl%==4 goto:fixwmi -if %_erl%==3 goto:sfcscan -if %_erl%==2 goto:dism_rest -if %_erl%==1 start %mas%troubleshoot.html &goto at_menu +echo: +echo Enabling Winmgmt service +sc config Winmgmt start= auto %nul% +if %errorlevel% EQU 0 ( +echo [Successful] +) else ( +call :dk_color %Red% "[Failed]" +) + +call :checkwmi +if not defined error ( +echo: +echo Checking WMI +call :dk_color %Green% "[Working]" +goto :at_back +) + +echo: +echo Registering .dll's and Compiling .mof's, .mfl's +call :registerobj %nul% + +echo: +echo Checking WMI +call :checkwmi +if defined error ( +call :dk_color %Red% "[Not Responding]" +echo: +echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors. +) else ( +call :dk_color %Green% "[Working]" +) + +goto :at_back + +:registerobj + +:: https://eskonr.com/2012/01/how-to-fix-wmi-issues-automatically/ + +%psc% Stop-Service Winmgmt -force %nul% +cd /d %SysPath%\wbem\ +regsvr32 /s %SysPath%\scecli.dll +regsvr32 /s %SysPath%\userenv.dll +mofcomp cimwin32.mof +mofcomp cimwin32.mfl +mofcomp rsop.mof +mofcomp rsop.mfl +for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s +for /f %%s in ('dir /b *.mof') do mofcomp %%s +for /f %%s in ('dir /b *.mfl') do mofcomp %%s + +winmgmt /salvagerepository +winmgmt /resetrepository +exit /b + +:checkwmi + +:: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants + +set error= +%psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %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) + +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM SoftwareLicensingService').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %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 + +echo: +echo %line% +echo: +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% +) goto :at_menu ::======================================================================================================================================== -:dism_rest - -cls -mode 98, 30 -title Dism /English /Online /Cleanup-Image /RestoreHealth - -if %winbuild% LSS 9200 ( -%eline% -echo Unsupported OS version Detected. -echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent. -goto :at_back -) +:compresslog -set _int= -for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _int=1) -) +:: https://stackoverflow.com/a/46268232 -echo: -if defined _int ( -echo Checking Internet Connection [Connected] -) else ( -call :_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" +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!\%2_%_time%.cab" +del /q /f %ddf% +exit /b -echo %line% -echo: -echo Dism uses Windows Update to provide the files required to fix corruption. -echo This will take 5-15 minutes or more.. -echo %line% -echo: -echo Notes: -echo: -call :_color2 %_White% " - " %Gray% "Make sure the Internet is connected." -call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working." -echo: -echo %line% -echo: -choice /C:09 /N /M "> [9] Continue [0] Go back : " -if %errorlevel%==1 goto at_menu +::======================================================================================================================================== -cls -mode 110, 30 -%psc% Stop-Service TrustedInstaller -force %nul% +:checkperms -set _time= -for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a -echo: -echo Applying the command, -echo dism /english /online /cleanup-image /restorehealth -dism /english /online /cleanup-image /restorehealth +:: This code checks if SPP has permission access to tokens folder and required registry keys. Incorrect permissions are often set by gaming spoofers. -%psc% Stop-Service TrustedInstaller -force %nul% +set permerror= +if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" -if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% +for %%# in ( +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) +) -call :compresslog cbs\CBS.log RHealth_CBS %nul% -call :compresslog DISM\dism.log RHealth_DISM %nul% +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application -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 defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) - -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: -call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop." -goto :at_back +exit /b ::======================================================================================================================================== -:sfcscan - -cls -mode 98, 30 -title sfc /scannow - -echo: -echo %line% -echo: -echo System File Checker will repair missing or corrupted system files. -echo This will take 10-15 minutes or more.. -echo: -echo If SFC could not fix something, then run the command again to see if it may be able -echo to the next time. Sometimes it may take running the sfc /scannow command 3 times -echo restarting the PC after each time to completely fix everything that it's able to. -echo: -echo %line% -echo: -choice /C:09 /N /M "> [9] Continue [0] Go back : " -if %errorlevel%==1 goto at_menu +:: Fix SPP related registry and folder permissions -cls -%psc% Stop-Service TrustedInstaller -force %nul% +:fixsppperms: +# Fix perms for Token Folder -set _time= -for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a -echo: -echo Applying the command, -echo sfc /scannow -sfc /scannow +if ($env:permerror -eq 'Error Found In Token Folder') { + New-Item -Path $env:tokenstore -ItemType Directory -Force + $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)' + $AclObject = New-Object System.Security.AccessControl.DirectorySecurity + $AclObject.SetSecurityDescriptorSddlForm($sddl) + Set-Acl -Path $env:tokenstore -AclObject $AclObject + exit +} -%psc% Stop-Service TrustedInstaller -force %nul% +# Fix perms for SPP registries + +if ($env:permerror -eq 'Error Found In SPP Registries') { + $acl = Get-Acl 'HKLM:\SYSTEM\WPA' + $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'QueryValues, EnumerateSubKeys, WriteKey', 'ContainerInherit, ObjectInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $acl.SetAccessRule($rule) + Set-Acl -Path 'HKLM:\SYSTEM\WPA' -AclObject $acl + + $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' + $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'SetValue', 'ContainerInherit, ObjectInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $acl.SetAccessRule($rule) + Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -AclObject $acl + exit +} -if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% +# Fix perms for SPP in HKU\S-1-5-20 +# https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application -call :compresslog cbs\CBS.log SFC_CBS %nul% +if ($env:permerror -ne 'Error Found In S-1-5-20 SPP') { + exit +} +if (-not (Test-Path 'Registry::HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform')) { + exit +} -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% -) +# https://stackoverflow.com/a/35843420 -echo: -call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." -goto :at_back +function Take-Permissions { + param($rootKey, $key, [System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-545', $recurse = $true) + + switch -regex ($rootKey) { + 'HKCU|HKEY_CURRENT_USER' { $rootKey = 'CurrentUser' } + 'HKLM|HKEY_LOCAL_MACHINE' { $rootKey = 'LocalMachine' } + 'HKCR|HKEY_CLASSES_ROOT' { $rootKey = 'ClassesRoot' } + 'HKCC|HKEY_CURRENT_CONFIG' { $rootKey = 'CurrentConfig' } + 'HKU|HKEY_USERS' { $rootKey = 'Users' } + } -::======================================================================================================================================== + ### Step 1 - escalate current process's privilege + # get SeTakeOwnership, SeBackup and SeRestore privileges before executes next lines, script needs Admin privilege + $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) + $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) + $TypeBuilder = $ModuleBuilder.DefineType(0) + $TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null + 9, 17, 18 | ForEach-Object { $TypeBuilder.CreateType()::RtlAdjustPrivilege($_, $true, $false, [ref]$false) | Out-Null } + + function Take-KeyPermissions { + param($rootKey, $key, $sid, $recurse, $recurseLevel = 0) + + ### Step 2 - get ownerships of key - it works only for current key + $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership') + $acl = New-Object System.Security.AccessControl.RegistrySecurity + $acl.SetOwner($sid) + $regKey.SetAccessControl($acl) + + ### Step 3 - enable inheritance of permissions (not ownership) for current key from parent + $acl.SetAccessRuleProtection($false, $false) + $regKey.SetAccessControl($acl) + + ### Step 4 - only for top-level key, change permissions for current key and propagate it for subkeys + # to enable propagations for subkeys, it needs to execute Steps 2-3 for each subkey (Step 5) + if ($recurseLevel -eq 0) { + $regKey = $regKey.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions') + $rule = New-Object System.Security.AccessControl.RegistryAccessRule($sid, 'FullControl', 'ContainerInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $regKey.SetAccessControl($acl) + } -:retokens + ### Step 5 - recursively repeat steps 2-5 for subkeys + if ($recurse) { + foreach ($subKey in $regKey.OpenSubKey('').GetSubKeyNames()) { + Take-KeyPermissions $rootKey ($key + '\' + $subKey) $sid $recurse ($recurseLevel + 1) + } + } + } -cls -mode con cols=125 lines=32 -%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^) + Take-KeyPermissions $rootKey $key $sid $recurse +} -echo: -echo %line% -echo: -echo Notes: -echo: -echo - It helps in troubleshooting activation issues. -echo: -echo - This option will, -echo - Deactivate Windows and Office, you may need to reactivate -echo If Windows is activated with motherboard / OEM / Digital license then don't worry -echo: -echo - Clear ClipSVC, Office vNext, SPP and OSPP licenses -echo - Fix SPP permissions of tokens folder and registries -echo - Trigger the repair option for Office. -echo: -call :_color2 %_White% " - " %Red% "Apply it only when it is necessary." -echo: -echo %line% -echo: -choice /C:09 /N /M "> [9] Continue [0] Go back : " -if %errorlevel%==1 goto at_menu +Take-Permissions "Users" "S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" "S-1-5-20" +:fixsppperms: ::======================================================================================================================================== -:: Rebuild ClipSVC Licences - -cls -:cleanlicensing +:scandat -echo: -echo %line% -echo: -call :_color %Blue% "Rebuilding ClipSVC Licences" -echo: +set token= +for %%# in ( +%SysPath%\spp\store_test\2.0\ +%SysPath%\spp\store\ +%SysPath%\spp\store\2.0\ +%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\ +) do ( -if %winbuild% LSS 10240 ( -echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent. -echo Skipping... -goto :cleanvnext +if %1==check ( +if exist %%#tokens.dat set token=%%#tokens.dat ) -%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 Skipping rebuilding ClipSVC licences... -goto :cleanvnext +if %1==delete ( +if exist %%# ( +%nul% dir /a-d /s "%%#*.dat" && ( +attrib -r -s -h "%%#*.dat" /S +del /S /F /Q "%%#*.dat" +) ) +) +) +exit /b -echo Stopping ClipSVC service... -%psc% Stop-Service ClipSVC -force %nul% -timeout /t 2 %nul% +:scandatospp -echo: -echo Applying the command to Clean ClipSVC Licences... -echo rundll32 clipc.dll,ClipCleanUpState +set token= +for %%# in ( +%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\ +) do ( -rundll32 clipc.dll,ClipCleanUpState +if %1==check ( +if exist %%#tokens.dat set token=%%#tokens.dat +) -if %winbuild% LEQ 10240 ( -echo [Successful] -) else ( -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( -call :_color %Red% "[Failed]" -) else ( -echo [Successful] +if %1==delete ( +if exist %%# ( +%nul% dir /a-d /s "%%#*.dat" && ( +attrib -r -s -h "%%#*.dat" /S +del /S /F /Q "%%#*.dat" ) ) +) +) +exit /b -:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after -:: system restart. It needs to be deleted to activate the system without restart. - -set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" +::======================================================================================================================================== -reg query "%RegKey%" %nul% && %nul% call :regownstart -reg delete "%RegKey%" /f %nul% +:regownstart -echo: -echo Deleting a Volatile ^& Protected Registry Key... -echo [%RegKey%] -reg query "%RegKey%" %nul% && ( -call :_color %Red% "[Failed]" -echo Restart the system, that will delete this registry key automatically. -) || ( -echo [Successful] -) +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" +exit /b -:: Clear HWID token related registry to fix activation incase if there is any corruption +:: Below code takes ownership of a volatile registry key and deletes it +:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState -echo: -echo Deleting a IdentityCRL Registry Key... -echo [%_ident%] -reg delete "%_ident%" /f %nul% -reg query "%_ident%" %nul% && ( -call :_color %Red% "[Failed]" -) || ( -echo [Successful] -) +:regown: +$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) +$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) +$TypeBuilder = $ModuleBuilder.DefineType(0) -%psc% Stop-Service ClipSVC -force %nul% +$TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null +$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null -:: Rebuild ClipSVC folder to fix permission issues +$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') +$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value +$Admin = New-Object System.Security.Principal.NTAccount($IDN) -echo: -if %winbuild% GTR 10240 ( -echo Deleting Folder %ProgramData%\Microsoft\Windows\ClipSVC\ -rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul% +$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' +$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( -call :_color %Red% "[Failed]" -) else ( -echo [Successful] -) +$acl = $key.GetAccessControl() +$acl.SetOwner($Admin) +$key.SetAccessControl($acl) -echo: -echo Rebuilding Folder %ProgramData%\Microsoft\Windows\ClipSVC\ -%psc% Start-Service ClipSVC %nul% -timeout /t 3 %nul% -if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul% -if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( -call :_color %Red% "[Failed]" -) else ( -echo [Successful] -) -) +$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") +$acl.SetAccessRule($rule) +$key.SetAccessControl($acl) +:regown: -echo: -echo Restarting [wlidsvc LicenseManager] services... -for %%# in (wlidsvc LicenseManager) do (%psc% Restart-Service %%# %nul%) +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -::======================================================================================================================================== +:change_winedition + +:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line +set _stg=0 -:: Find remnants of Office vNext license block and remove it because it stops non vNext licenses from appearing -:: https://learn.microsoft.com/en-us/office/troubleshoot/activation/reset-office-365-proplus-activation-state +set "line=echo ___________________________________________________________________________________________" -:cleanvnext +cls +if not defined terminal mode 98, 30 +title Change Windows Edition %masver% echo: -echo %line% +echo Initializing... echo: -call :_color %Blue% "Clearing Office vNext License" + +for %%# in ( +sppsvc.exe +dism.exe +) do ( +if not exist %SysPath%\%%# ( +%eline% +echo [%SysPath%\%%#] file is missing, aborting... echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) +) -setlocal DisableDelayedExpansion -set "_Local=%LocalAppData%" -setlocal EnableDelayedExpansion +::======================================================================================================================================== -attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul% -attrib -R "!_Local!\Microsoft\Office\Licenses" %nul% +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -if exist "!ProgramData!\Microsoft\Office\Licenses\" ( -rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul% -if exist "!ProgramData!\Microsoft\Office\Licenses\" ( -echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\ -) else ( -echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\ -) -) else ( -echo Not Found - !ProgramData!\Microsoft\Office\Licenses\ -) +call :dk_reflection +call :dk_ckeckwmic +call :dk_sppissue -if exist "!_Local!\Microsoft\Office\Licenses\" ( -rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul% -if exist "!_Local!\Microsoft\Office\Licenses\" ( -echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\ +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j ) else ( -echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\ +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ) -) else ( -echo Not Found - !_Local!\Microsoft\Office\Licenses\ ) +::======================================================================================================================================== -echo: -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! HKU\%%a") else (set "_sid=HKU\%%a")) +:: Check Activation ID -set regfound= -for %%# in (HKCU !_sid!) do ( -for %%A in ( -%%#\Software\Microsoft\Office\16.0\Common\Licensing -%%#\Software\Microsoft\Office\16.0\Common\Identity -%%#\Software\Microsoft\Office\16.0\Registration -) do ( -reg query %%A %nul% && ( -set regfound=1 -reg delete %%A /f %nul% && ( -echo Deleted Registry - %%A -) || ( -echo Failed to Delete - %%A -) -) -) +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%eline% +echo Either key is not insalled or script failed to get installed key's activation ID. Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) -if not defined regfound echo Not Found - Office vNext Registry Keys ::======================================================================================================================================== -:: Rebuild SPP Tokens +:: Check Windows Edition and branch -echo: -echo %line% -echo: -call :_color %Blue% "Rebuilding SPP Licensing Tokens" -echo: +set osedition=0 +set dismedition= +set dismnotworking= -call :scandat check +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") -if not defined token ( -call :_color %Red% "tokens.dat file not found." -) else ( -echo tokens.dat file: [%token%] +if %osedition%==0 ( +%eline% +echo Failed to detect OS edition, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) -echo: -set wpainfo= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) -echo "%wpainfo%" | find /i "Error Found" %nul% && ( -call :_color %Red% "WPA Registry Error: %wpainfo%" -) || ( -echo WPA Registry Count: %wpainfo% +for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "regedition=%%a" +if /i not "%osedition%"=="%regedition%" ( +set "showeditionerror=call :dk_color %_Yellow% "Mismatch found [WMI-%osedition%] [Reg-%regedition%]."" ) -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" +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 -:: Check sppsvc permissions and apply fixes +set branch= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b" -if %winbuild% GEQ 10240 ( +::======================================================================================================================================== -echo: -echo Checking SPP permission related issues... -call :checkperms +:: Get target editions list -if defined permerror ( +set _target= +set _dtarget= +set _ptarget= +set _ntarget= +set _wtarget= -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% +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% 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 ")) -for %%# in ( -"HKLM:\SYSTEM\WPA_QueryValues, EnumerateSubKeys, WriteKey" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform_SetValue" -) do for /f "tokens=1,2 delims=_" %%A in (%%#) do ( -set "d=$acl = Get-Acl '%%A';" -set "d=!d! $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', '%%B', 'ContainerInherit, ObjectInherit','None','Allow');" -set "d=!d! $acl.ResetAccessRule($rule);" -set "d=!d! $acl.SetAccessRule($rule);" -set "d=!d! Set-Acl -Path '%%A' -AclObject $acl" -%psc% "!d!" %nul% +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 _pro=Professional +if /i "%osedition%"=="CoreN" set _pro=ProfessionalN +set "_dtarget= %_dtarget% !_wtarget! !_pro! " ) -call :checkperms -if defined permerror ( -call :_color %Red% "[Failed To Fix]" -) else ( -echo [Successfully Fixed] -) -) else ( -echo [No Error Found] -) -) +::======================================================================================================================================== +for %%# in (CloudEdition CloudEditionN ServerRdsh) do if /i %osedition%==%%# ( +cls echo: -echo Stopping sppsvc service... -%psc% Stop-Service sppsvc -force %nul% - +call :dk_color %Red% "==== Note ====" echo: -call :scandat delete -call :scandat check - -if defined token ( +echo [EditionID:%osedition% ^| %fullbuild%] echo: -call :_color %Red% "Failed to delete .dat files." +echo Changing this edition may not remove "%osedition%"-specific features. echo: +call :dk_color %_Yellow% "Press [7] to continue anyway..." +choice /c 7 /n +cls ) -echo: -echo Reinstalling System Licenses [slmgr /rilc]... -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if %errorlevel% NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if %errorlevel% EQU 0 ( -echo [Successful] -) else ( -call :_color %Red% "[Failed]" +for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" ( +echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# " ) -call :scandat check +if defined _target ( +for %%# in (%_target%) do ( +echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#") +) +) +if not defined _ntarget ( +%line% echo: -if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." -) else ( -echo tokens.dat file was rebuilt successfully. +if defined dismnotworking call :dk_color %Red% "DISM.exe is not working." +call :dk_color %Gray% "Target editions not found." +echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition. +%line% +goto dk_done ) ::======================================================================================================================================== -:: Rebuild OSPP Tokens - -echo: -echo %line% -echo: -call :_color %Blue% "Rebuilding OSPP Licensing Tokens" -echo: - -sc qc osppsvc %nul% || ( -echo OSPP based Office is not installed -echo Skipping rebuilding OSPP tokens... -goto :repairoffice -) - -call :scandatospp check +:cedmenu2 -if not defined token ( -call :_color %Red% "tokens.dat file not found." -) else ( -echo tokens.dat file: [%token%] -) +cls +if not defined terminal mode 98, 30 +set inpt= +set counter=0 +set verified=0 +set targetedition= +%line% echo: -echo Stopping osppsvc service... -%psc% Stop-Service osppsvc -force %nul% - +call :dk_color %Gray% "You can change the edition [%osedition%] [%fullbuild%] to one of the following." +%showeditionerror% +if defined dismnotworking ( +call :dk_color %_Yellow% "Note - DISM.exe is not working." +if /i "%osedition:~0,4%"=="Core" call :dk_color %_Yellow% " - You will see more edition options to choose once its changed to Pro." +) +%line% echo: -call :scandatospp delete -call :scandatospp check -if defined token ( -echo: -call :_color %Red% "Failed to delete .dat files." -echo: +for %%A in (%_ntarget%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A ) +%line% echo: -echo Starting osppsvc service to generate tokens.dat -%psc% Start-Service osppsvc %nul% -call :scandatospp check -if not defined token ( -%psc% Stop-Service osppsvc -force %nul% -%psc% Start-Service osppsvc %nul% -timeout /t 3 %nul% -) - -call :scandatospp check - +echo [0] %_exitmsg% echo: -if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." -) else ( -echo tokens.dat file was rebuilt successfully. -) +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto cedmenu2 +if "%inpt%"=="0" exit /b +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto cedmenu2 ::======================================================================================================================================== -:repairoffice +if %winbuild% LSS 10240 goto :cbsmethod +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" goto :ced_change_server +cls +if not defined terminal mode con cols=105 lines=32 + +if /i "%targetedition%"=="ServerRdsh" ( echo: -echo %line% -echo: -call :_color %Blue% "Repairing Office Licenses" +call :dk_color %Red% "==== Note ====" 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 - -if /i "%arch%"=="ARM64" ( +echo Once the edition is changed to "%targetedition%", +echo the system may not be able to properly change edition later. echo: -echo ARM64 Windows Found. -echo You need to use repair option in Windows settings for Office. +echo [1] Continue Anyway +echo [0] Go Back echo: -start ms-settings:appsfeatures -goto :repairend -) - -if /i "%arch%"=="x86" ( -set arch=X86 -) else ( -set arch=X64 -) - -for %%# in (68 86) do ( -for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=) -) - -set _68=HKLM\SOFTWARE\Microsoft\Office -set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office - -reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=") -reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=") - -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & set "msi14repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & set "msi14repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE14\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & set "msi15repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & set "msi15repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE15\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & set "msi16repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & set "msi16repair68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe") - -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & set "c2r16repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") - -set uwp16= -if %winbuild% GEQ 10240 ( -%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set uwp16=Office 16.0 UWP +call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" +choice /C:10 /N +if !errorlevel!==2 goto cedmenu2 +if !errorlevel!==1 rem ) -set /a counter=0 -echo Checking installed Office versions... -echo: - -for %%# in ( -"%msi14_68%" -"%msi14_86%" -"%msi15_68%" -"%msi15_86%" -"%msi16_68%" -"%msi16_86%" -"%c2r14_68%" -"%c2r14_86%" -"%c2r15_68%" -"%c2r15_86%" -"%c2r16_68%" -"%c2r16_86%" -"%uwp16%" -) do ( -if not "%%#"=="""" ( -set insoff=%%# -set insoff=!insoff:"=! -echo [!insoff!] -set /a counter+=1 +cls +set key= +set _chan= +set _dismapi=0 + +:: Check if DISM API or slmgr.vbs is required for edition upgrade + +if not exist "%SysPath%\spp\tokens\skus\%targetedition%\" ( +echo %_wtarget% | find /i " %targetedition% " || ( +set _dismapi=1 ) ) -if %counter% GTR 1 ( +set "keyflow=Retail Volume:GVLK Volume:MAK OEM:NONSLP OEM:DM PGS:TB Retail:TB:Eval" + +call :ced_targetSKU %targetedition% +if defined targetSKU call :ced_windowskey +if defined key if defined pkeychannel set _chan=%pkeychannel% +if not defined key call :changeeditiondata +if not defined key if %_dismapi%==1 if /i "%targetedition%"=="Professional" ( +set key=VK7JG-NPHTM-C97JM-9MPGT-3V66T +set _chan=Retail +) + +if not defined key ( %eline% -echo Multiple office versions found. -echo It's recommended to install only one version of office. -echo ________________________________________________________________ +echo [%targetedition% ^| %winbuild%] +echo Failed to get product key from pkeyhelper.dll. echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) -if %counter% EQU 0 ( +::======================================================================================================================================== + +:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" or DISM Api method and restart +:: In other cases, editions can be changed instantly with "slmgr /ipk" + +if %_dismapi%==1 ( +if not defined terminal mode con cols=105 lines=40 +call :ced_rebootflag +if defined rebootreq goto dk_done +) + +cls +%line% echo: -echo Installed Office is not found. -goto :repairend +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: -) else ( + +if %_dismapi%==1 ( +call :dk_color %Green% "Notes -" echo: -call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." -call :_color %_Yellow% "Press any key to continue..." +echo - Save your work before continuing, the system will auto-restart. echo: -pause %nul1% +echo - You will need to activate with HWID option once the edition is changed. +%line% +echo: +choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : " +if !errorlevel!==1 exit /b ) -if defined uwp16 ( +::======================================================================================================================================== + +if %_dismapi%==0 ( +echo Installing %_chan% key [%key%] echo: -echo Note: Skipping repair for Office 16.0 UWP. -echo You need to use reset option in Windows settings for it. -echo ________________________________________________________________ +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=!errorlevel! +cmd /c exit /b !keyerror! +if !keyerror! NEQ 0 set "keyerror=[0x!=ExitCode!]" + +if !keyerror! EQU 0 ( +call :dk_refresh +call :dk_color %Green% "[Successful]" echo: -start ms-settings:appsfeatures +call :dk_color %Gray% "Reboot is required to fully change the edition." +) else ( +call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) ) -set c2r14= -if defined c2r14_68 set c2r14=1 -if defined c2r14_86 set c2r14=1 - -if defined c2r14 ( +if %_dismapi%==1 ( echo: -echo Note: Skipping repair for Office 14.0 C2R -echo You need to use Repair option in Windows settings for it. -echo ________________________________________________________________ +echo Applying the DISM API method with %_chan% key %key%. Please wait... echo: -start appwiz.cpl + +call :ced_prep +if defined preperror goto dk_done + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%" +call :ced_postprep ) +%line% -if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%" -if defined msi14_86 if exist "%msi14repair86%" echo Running - "%msi14repair86%" & "%msi14repair86%" -if defined msi15_68 if exist "%msi15repair68%" echo Running - "%msi15repair68%" & "%msi15repair68%" -if defined msi15_86 if exist "%msi15repair86%" echo Running - "%msi15repair86%" & "%msi15repair86%" -if defined msi16_68 if exist "%msi16repair68%" echo Running - "%msi16repair68%" & "%msi16repair68%" -if defined msi16_86 if exist "%msi16repair86%" echo Running - "%msi16repair86%" & "%msi16repair86%" -if defined c2r15_68 if exist "%c2r15repair68%" echo Running - "%c2r15repair68%" REPAIRUI RERUNMODE & "%c2r15repair68%" REPAIRUI RERUNMODE -if defined c2r15_86 if exist "%c2r15repair86%" echo Running - "%c2r15repair86%" REPAIRUI RERUNMODE & "%c2r15repair86%" REPAIRUI RERUNMODE -if defined c2r16_68 if exist "%c2r16repair68%" echo Running - "%c2r16repair68%" scenario=Repair & "%c2r16repair68%" scenario=Repair -if defined c2r16_86 if exist "%c2r16repair86%" echo Running - "%c2r16repair86%" scenario=Repair & "%c2r16repair86%" scenario=Repair +goto dk_done -:repairend +::======================================================================================================================================== + +:cbsmethod + +cls +if not defined terminal ( +mode con cols=105 lines=32 +%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;}" +) + +call :ced_rebootflag +if defined rebootreq goto dk_done echo: -echo %line% +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: +call :dk_color %Blue% "Important - Save your work before continuing, the system will auto-restart." echo: -call :_color %Green% "Finished" -goto :at_back +choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : " +if %errorlevel%==1 exit /b + +echo: +echo Initializing... +echo: + +call :ced_prep +if defined preperror goto dk_done + +if %_stg%==0 (set stage=) else (set stage=-StageCurrent) +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%" +call :ced_postprep +%line% + +goto dk_done ::======================================================================================================================================== -:fixwmi +:ced_change_server cls -mode 98, 34 -title Fix WMI +if not defined terminal ( +mode con cols=105 lines=32 +%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;}" +) -:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484 +set key= +set _chan= +set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM PGS:TB Retail:TB:Eval" -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -%eline% -echo WMI rebuild is not recommended on Windows Server. Aborting... -goto :at_back -) +call :ced_targetSKU %targetedition% +if defined targetSKU call :ced_windowskey +if defined key if defined pkeychannel set _chan=%pkeychannel% +if not defined key call :changeeditiondata -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( +if not defined key ( %eline% -echo wmic.exe file is not found in the system. Aborting... -goto :at_back +echo [%targetedition% ^| %winbuild%] +echo Failed to get product key from pkeyhelper.dll. +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) +call :ced_rebootflag +if defined rebootreq goto dk_done + +cls +echo: +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: -echo Checking WMI -call :checkwmi -:: Apply basic fix first and check +call :ced_prep +if defined preperror goto dk_done -if defined error ( -%psc% Stop-Service Winmgmt -force %nul% -winmgmt /salvagerepository %nul% -call :checkwmi -) +echo Applying the command with %_chan% key... +echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula +DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula -if not defined error ( -echo [Working] -echo No need to apply this option. Aborting... -goto :at_back -) +call :ced_postprep +%line% -call :_color %Red% "[Not Responding]" +goto dk_done -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: -if defined _corrupt ( +:ced_prep + +set _time= +set preperror= + +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + +%psc% Stop-Service TrustedInstaller -force %nul% + +sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% -echo Winmgmt service is corrupted. Aborting... -goto :at_back +echo Failed to stop the TrustedInstaller service. +echo Reboot your machine using the restart option and try again. +set preperror=1 +exit /b ) -echo Disabling Winmgmt service -sc config Winmgmt start= disabled %nul% -if %errorlevel% EQU 0 ( -echo [Successful] -) else ( -call :_color %Red% "[Failed] Aborting..." -sc config Winmgmt start= auto %nul% -goto :at_back -) +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul% + +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% +del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul% + +:: Initiate this to appear in fresh logs + +dism /online /english /Get-CurrentEdition %nul% +dism /online /english /Get-TargetEditions %nul% +exit /b + +::======================================================================================================================================== + +:ced_postprep + +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul% + +if not exist "!desktop!\ChangeEdition_Logs\" md "!desktop!\ChangeEdition_Logs\" %nul% +call :compresslog cbs\cbs_%_time%.log ChangeEdition_Logs\CBS %nul% +call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul% echo: -echo Stopping Winmgmt service -%psc% Stop-Service Winmgmt -force %nul% -%psc% Stop-Service Winmgmt -force %nul% -%psc% Stop-Service Winmgmt -force %nul% -sc query Winmgmt | find /i "STOPPED" %nul% && ( -echo [Successful] -) || ( -call :_color %Red% "[Failed]" -echo: -call :_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again." -echo %line% +if %winbuild% GEQ 9200 %psc% "if ((Get-WindowsOptionalFeature -Online -FeatureName NetFx3).State -eq 'Enabled') {Write-Host 'Checking .NET Framework 3.5 Status - Enabled'}" +echo Log files are copied to the ChangeEdition_Logs folder on your desktop. echo: -choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :" -if !errorlevel!==1 (sc config Winmgmt start= auto %nul%&goto :at_back) +call :dk_color %Blue% "In case there are errors, you should restart the system before trying again." echo: -echo Restarting... -shutdown -t 5 -r -exit -) +set fixes=%fixes% %mas%change_edition_issues +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" +exit /b + +::======================================================================================================================================== + +:: Check pending reboot flags + +:ced_rebootflag +set rebootreq= +reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" %nul% && set rebootreq=1 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" %nul% && set rebootreq=1 + +if defined rebootreq ( +%eline% +echo Pending reboot flags found. echo: -echo Deleting WMI repository -rmdir /s /q "%windir%\System32\wbem\repository\" %nul% -if exist "%windir%\System32\wbem\repository\" ( -call :_color %Red% "[Failed]" -) else ( -echo [Successful] +echo Make sure Windows is fully updated, restart the system and try again. ) +exit /b -echo: -echo Enabling Winmgmt service -sc config Winmgmt start= auto %nul% -if %errorlevel% EQU 0 ( -echo [Successful] -) else ( -call :_color %Red% "[Failed]" +::======================================================================================================================================== + +:ced_windowskey + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +for %%# in (%keyflow%) do ( +call :k_pkey %targetSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! +if /i "!pkeychannel!"=="%%#" ( +set key=!pkey! +exit /b +) ) +exit /b -call :checkwmi -if not defined error ( -echo: -echo Checking WMI -call :_color %Green% "[Working]" -goto :at_back +::======================================================================================================================================== + +:ced_targetSKU + +set k=%1 +set targetSKU= +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b + +call :dk_reflection + +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionIdFromName', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionIdFromName('%k%', [ref]$out); $out + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set targetSKU=%%a) +if "%targetSKU%"=="0" set targetSKU= +exit /b + +::======================================================================================================================================== + +:: https://github.com/asdcorp/Set-WindowsCbsEdition + +:cbsxml:[ +param ( + [Parameter()] + [String]$SetEdition, + + [Parameter()] + [Switch]$GetTargetEditions, + + [Parameter()] + [Switch]$StageCurrent ) -echo: -echo Registering .dll's and Compiling .mof's, .mfl's -call :registerobj %nul% +function Get-AssemblyIdentity { + param ( + [String]$PackageName + ) + + $PackageName = [String]$PackageName + $packageData = ($PackageName -split '~') + + if($packageData[3] -eq '') { + $packageData[3] = 'neutral' + } -echo: -echo Checking WMI -call :checkwmi -if defined error ( -call :_color %Red% "[Not Responding]" -echo: -echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors. -) else ( -call :_color %Green% "[Working]" -) + return "" +} -goto :at_back +function Get-SxsName { + param ( + [String]$PackageName + ) -:registerobj + $name = ($PackageName -replace '[^A-z0-9\-\._]', '') -:: https://eskonr.com/2012/01/how-to-fix-wmi-issues-automatically/ + if($name.Length -gt 40) { + $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '') + } -%psc% Stop-Service Winmgmt -force %nul% -cd /d %systemroot%\system32\wbem\ -regsvr32 /s %systemroot%\system32\scecli.dll -regsvr32 /s %systemroot%\system32\userenv.dll -mofcomp cimwin32.mof -mofcomp cimwin32.mfl -mofcomp rsop.mof -mofcomp rsop.mfl -for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s -for /f %%s in ('dir /b *.mof') do mofcomp %%s -for /f %%s in ('dir /b *.mfl') do mofcomp %%s + return $name.ToLower() +} -winmgmt /salvagerepository -winmgmt /resetrepository -exit /b +function Find-EditionXmlInSxs { + param ( + [String]$Edition + ) -:checkwmi + $candidates = @($Edition, 'Client', 'Server') + $winSxs = $Env:SystemRoot + '\WinSxS' + $allInSxs = Get-ChildItem -Path $winSxs | select Name -:: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants + foreach($candidate in $candidates) { + $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate" + $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35') -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) + if($packages.Length -eq 0) { + continue + } -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 + $package = $packages[-1].Name + $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml' -::======================================================================================================================================== + if(Test-Path -Path $testPath -PathType Leaf) { + return $testPath + } + } -:at_back + return $null +} -echo: -echo %line% -echo: -call :_color %_Yellow% "Press any key to go back..." -pause %nul1% -goto :at_menu +function Find-EditionXml { + param ( + [String]$Edition + ) -::======================================================================================================================================== + $servicingEditions = $Env:SystemRoot + '\servicing\Editions' + $editionXml = $Edition + 'Edition.xml' -:at_done + $editionXmlInServicing = $servicingEditions + '\' + $editionXml -echo: -echo Press any key to %_exitmsg%... -pause %nul1% -exit /b + if(Test-Path -Path $editionXmlInServicing -PathType Leaf) { + return $editionXmlInServicing + } -::======================================================================================================================================== + return Find-EditionXmlInSxs -Edition $Edition +} -:compresslog +function Write-UpgradeCandidates { + param ( + [HashTable]$InstallCandidates + ) -:: https://stackoverflow.com/a/46268232 + $editionCount = 0 + Write-Host 'Editions that can be upgraded to:' + foreach($candidate in $InstallCandidates.Keys) { + Write-Host "Target Edition : $candidate" + $editionCount++ + } -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 + if($editionCount -eq 0) { + Write-Host '(no editions are available)' + } +} -::======================================================================================================================================== +function Write-UpgradeXml { + param ( + [Array]$RemovalCandidates, + [Array]$InstallCandidates, + [Boolean]$Stage + ) -:checkperms + $removeAction = 'remove' + if($Stage) { + $removeAction = 'stage' + } -set permerror= -if not exist "%tokenstore%\" set permerror=1 + Write-Output '' + Write-Output '' + Write-Output '' -for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 -) -exit /b + foreach($package in $InstallCandidates) { + Write-Output '' + Write-Output (Get-AssemblyIdentity -PackageName $package) + Write-Output '' + } -::======================================================================================================================================== + foreach($package in $RemovalCandidates) { + Write-Output "" + Write-Output (Get-AssemblyIdentity -PackageName $package) + Write-Output '' + } -:scandat + Write-Output '' + Write-Output '' +} -set token= -for %%# in ( -%Systemdrive%\Windows\System32\spp\store_test\2.0\ -%Systemdrive%\Windows\System32\spp\store\ -%Systemdrive%\Windows\System32\spp\store\2.0\ -%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\ -) do ( +function Write-Usage { + Get-Help $script:MyInvocation.MyCommand.Path -detailed +} -if %1==check ( -if exist %%#tokens.dat set token=%%#tokens.dat -) +$version = '1.0' +$getTargetsParam = $GetTargetEditions.IsPresent +$stageCurrentParam = $StageCurrent.IsPresent -if %1==delete ( -if exist %%# ( -%nul% dir /a-d /s "%%#*.dat" && ( -attrib -r -s -h "%%#*.dat" /S -del /S /F /Q "%%#*.dat" -) -) -) -) -exit /b +if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) { + Write-Usage + Exit 1 +} -:scandatospp +$removalCandidates = @(); +$installCandidates = @{}; -set token= -for %%# in ( -%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\ -) do ( +$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' } +foreach($package in $packages) { + $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState + $packageName = ($package.Name -split '\\')[-1] + $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1] -if %1==check ( -if exist %%#tokens.dat set token=%%#tokens.dat -) + if($state -eq 0x40) { + if($null -eq $installCandidates[$packageEdition]) { + $installCandidates[$packageEdition] = @() + } -if %1==delete ( -if exist %%# ( -%nul% dir /a-d /s "%%#*.dat" && ( -attrib -r -s -h "%%#*.dat" /S -del /S /F /Q "%%#*.dat" -) -) -) -) -exit /b + if($false -eq ($installCandidates[$packageEdition] -contains $packageName)) { + $installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName) + } + } -::======================================================================================================================================== + if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($removalCandidates -contains $packageName))) { + $removalCandidates = $removalCandidates + @($packageName) + } +} -:regownstart +if($getTargetsParam) { + Write-UpgradeCandidates -InstallCandidates $installCandidates + Exit +} -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" -exit /b +if($false -eq ($installCandidates.Keys -contains $SetEdition)) { + Write-Error "The system cannot be upgraded to `"$SetEdition`"" + Exit 1 +} -:: Below code takes ownership of a volatile registry key and deletes it -:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState +$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml' -:regown: -$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) -$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) -$TypeBuilder = $ModuleBuilder.DefineType(0) +Write-UpgradeXml -RemovalCandidates $removalCandidates ` + -InstallCandidates $installCandidates[$SetEdition] ` + -Stage $stageCurrentParam >$xmlPath + +$editionXml = Find-EditionXml -Edition $SetEdition +if($null -eq $editionXml) { + Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...' +} -$TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null -$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null +Write-Host 'Starting the upgrade process. This may take a while...' -$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') -$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value -$Admin = New-Object System.Security.Principal.NTAccount($IDN) +DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath +$dismError = $LASTEXITCODE -$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' -$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') +Remove-Item -Path $xmlPath -Force -$acl = $key.GetAccessControl() -$acl.SetOwner($Admin) -$key.SetAccessControl($acl) +if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to upgrade to the target edition' + Exit $dismError +} -$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") -$acl.SetAccessRule($rule) -$key.SetAccessControl($acl) -:regown: +if($null -ne $editionXml) { + $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml' + Copy-Item -Path $editionXml -Destination $destination -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml + $dismError = $LASTEXITCODE -:change_edition -@setlocal DisableDelayedExpansion -@echo off + if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to apply edition specific settings' + Exit $dismError + } +} -:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line -set _stg=0 +Restart-Computer +:cbsxml:] ::======================================================================================================================================== -cls -color 07 -title Change Windows Edition %masver% +:: Change edition using DISM API +:: Thanks to Alex (aka may, ave9858) -set _args= -set _elev= +:dismapi:[ +param ( + [Parameter()] + [String]$TargetEdition, -set _args=%* -if defined _args set _args=%_args:"=% -if defined _args ( -for %%A in (%_args%) do ( -if /i "%%A"=="-el" set _elev=1 -) + [Parameter()] + [String]$Key ) -set "nul1=1>nul" -set "nul2=2>nul" -set "nul6=2^>nul" -set "nul=>nul 2>&1" +$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) +$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) +$TB = $ModuleBuilder.DefineType(0) -set psc=powershell.exe -set winbuild=1 -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +[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() -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) +[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:] -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 :dk_color %Red% "==== ERROR ====" &echo:" -set "line=echo ___________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +:: 1st column = Generic Retail/OEM/MAK/GVLK Key +:: 2nd column = Key Type +:: 3rd column = WMI Edition ID +:: 4th column = Version name incase same Edition ID is used in different OS versions with different key +:: Separator = _ -::======================================================================================================================================== +:: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible. +:: Only RS3 and older version Generic keys are stored here, later ones are extracted from the pkeyhelper.dll itself -:: Fix special characters limitation in path name +:changeeditiondata -set "_work=%~dp0" -if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" +if %winbuild% GTR 17763 exit /b +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) -set "_batf=%~f0" -set "_batp=%_batf:'=''%" +set h= +for %%# in ( +XGVPP-NMH47-7TTHJ-W3FW7-8HV%h%2C__OEM:NONSLP_Enterprise +D6RD9-D4N8T-RT9QX-YW6YT-FCW%h%WJ______Retail_Starter +3V6Q6-NQXCX-V8YXR-9QCYV-QPF%h%CT__Volume:MAK_EnterpriseN +3NFXW-2T27M-2BDW6-4GHRV-68X%h%RX______Retail_StarterN +VK7JG-NPHTM-C97JM-9MPGT-3V6%h%6T______Retail_Professional +2B87N-8KFHP-DKV6R-Y2C8J-PKC%h%KT______Retail_ProfessionalN +4CPRK-NM3K3-X6XXQ-RXX86-WXC%h%HW______Retail_CoreN +N2434-X9D7W-8PF6X-8DV9T-8TY%h%MD______Retail_CoreCountrySpecific +BT79Q-G7N6G-PGBYW-4YWX6-6F4%h%BT______Retail_CoreSingleLanguage +YTMG3-N6DKC-DKB77-7M9GH-8HV%h%X7______Retail_Core +XKCNC-J26Q9-KFHD2-FKTHY-KD7%h%2Y__OEM:NONSLP_PPIPro +YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%h%BY______Retail_Education +84NGF-MHBT6-FXBX8-QWJK7-DRR%h%8H______Retail_EducationN +NK96Y-D9CD8-W44CQ-R8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 +FWN7H-PF93Q-4GGP8-M8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH +2DBW3-N2PJG-MVHW3-G7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 +NTX6B-BRYC2-K6786-F6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH +G3KNM-CHG6T-R36X3-9QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage +HNGCC-Y38KG-QVK8D-WMWRK-X86%h%VK______Retail_ProfessionalCountrySpecific +DXG7C-N36C4-C4HTG-X4T3X-2YV%h%77______Retail_ProfessionalWorkstation +WYPNQ-8C467-V2W6J-TX4WX-WT2%h%RQ______Retail_ProfessionalWorkstationN +8PTT6-RNW4C-6V7J2-C2D3X-MHB%h%PB______Retail_ProfessionalEducation +GJTYN-HDMQY-FRR76-HVGC7-QPF%h%8P______Retail_ProfessionalEducationN +C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%h%JC__Volume:MAK_EnterpriseG +46PN6-R9BK9-CVHKB-HWQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN +NJCF7-PW8QT-3324D-688JX-2YV%h%66______Retail_ServerRdsh +V3WVW-N2PV2-CGWC3-34QGF-VMJ%h%2C______Retail_Cloud +NH9J3-68WK7-6FB93-4K3DF-DJ4%h%F6______Retail_CloudN +2HN6V-HGTM8-6C97C-RK67V-JQP%h%FD______Retail_CloudE +WC2BQ-8NRM3-FDDYY-2BFGV-KHK%h%QY_Volume:GVLK_ServerStandard%Cor%_RS1 +CB7KF-BWN84-R7R2Y-793K2-8XD%h%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1 +JCKRF-N37P4-C2D82-9YXRT-4M6%h%3B_Volume:GVLK_ServerSolution_RS1 +QN4C6-GBJD2-FB422-GHWJK-GJG%h%2R_Volume:GVLK_ServerCloudStorage_RS1 +VP34G-4NPPG-79JTQ-864T4-R3M%h%QX_Volume:GVLK_ServerAzureCor_RS1 +9JQNQ-V8HQ6-PKB8H-GGHRY-R62%h%H6______Retail_ServerAzureNano_RS1 +VN8D3-PR82H-DB6BJ-J9P4M-92F%h%6J______Retail_ServerStorageStandard_RS1 +48TQX-NVK3R-D8QR3-GTHHM-8FH%h%XC______Retail_ServerStorageWorkgroup_RS1 +2HXDN-KRXHB-GPYC7-YCKFJ-7FV%h%DG_Volume:GVLK_ServerDatacenterACor_RS3 +PTXN8-JFHJM-4WC78-MPCBR-9W4%h%KR_Volume:GVLK_ServerStandardACor_RS3 +) do ( +for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C ( -set _PSarg="""%~f0""" -el %_args% +if not defined key ( +set 4th=%%D +if not defined 4th ( +set "key=%%A" & set "_chan=%%B" +) else ( +echo "%branch%" | find /i "%%D" %nul1% && (set "key=%%A" & set "_chan=%%B") +) +) +) +) +exit /b -set "_ttemp=%userprofile%\AppData\Local\Temp" +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -setlocal EnableDelayedExpansion +:change_offedition -::======================================================================================================================================== +set "line=echo ___________________________________________________________________________________________" cls -mode 98, 30 +if not defined terminal mode 98, 30 +title Change Office Edition %masver% echo: echo Initializing... echo: -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing. Aborting... echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== -:: Check Activation IDs +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -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 ( -%eline% -echo Activation IDs not found. Aborting... -echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +call :dk_reflection +call :dk_ckeckwmic +call :dk_sppissue + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ) ) ::======================================================================================================================================== -call :dk_checksku +:: Check Windows Edition +:: This is just to ensure that SPP/WMI are functional + +cls +set osedition=0 +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") -if not defined osSKU ( +if %osedition%==0 ( %eline% -echo SKU value was not detected properly. Aborting... -goto ced_done +echo Failed to detect OS Edition. Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== -:: Check Windows Edition +:: Check installed Office 16.0 C2R -set osedition= -set dismedition= -set dismnotworking= +set o16c2r= +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -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= +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun) -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" +if not defined o16c2r_reg ( +%eline% +echo Office C2R 2016 or later is not installed, which is required for this script. +echo Download and install Office from below URL and try again. +echo: +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done ) -:: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional - -if %osSKU%==164 set osedition=ProfessionalEducation -if %osSKU%==165 set osedition=ProfessionalEducationN +call :ch_getinfo -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% +:: Check minimum required details -if not defined osedition ( +if %verchk% LSS 9029 ( %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 Installed Office version is %_version%. +echo Minimum required version is 16.0.9029.2167 +echo Aborting... echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +call :dk_color %Blue% "Download and install latest Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done ) -::======================================================================================================================================== +for %%A in ( +_oArch +_updch +_lang +_clversion +_version +_oIds +_c2rXml +_c2rExe +_c2rCexe +_masterxml +) do ( +if not defined %%A ( +%eline% +echo Failed to find %%A. Aborting... +echo: +call :dk_color %Blue% "Download and install Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done +) +) -set branch= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b" +if %winbuild% LSS 10240 if defined ltscfound ( +%eline% +echo Installed Office appears to be from the Volume channel %ltsc19%%ltsc21%%ltsc24%, +echo which is not officially supported on your Windows build version %winbuild%. +echo Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) -:: Check PowerShell +set unsupbuild= +if %winbuild% LSS 10240 if %winbuild% GEQ 9200 if %verchk% GTR 16026 set unsupbuild=1 +if %winbuild% LSS 9200 if %verchk% GTR 12527 set unsupbuild=1 -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +if defined unsupbuild ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode -echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. +echo Unsupported Office %verchk% is installed on your Windows build version %winbuild%. +echo Aborting... echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== -:: Get Target editions list +:oemenu -set _target= -set _dtarget= -set _ptarget= -set _ntarget= -set _wtarget= +cls +set fixes= +if not defined terminal mode 76, 25 +title Change Office Edition %masver% +echo: +echo: +echo: +echo: +echo ____________________________________________________________ +echo: +echo [1] Change - Office Edition +echo [2] Add - Office Edition +echo [3] Remove - Office Edition +echo ____________________________________________ +echo: +echo [4] Change Office Update Channel +echo [0] %_exitmsg% +echo ____________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" +choice /C:12340 /N +set _el=!errorlevel! +if !_el!==5 exit /b +if !_el!==4 goto :oe_changeupdchnl +if !_el!==3 goto :oe_removeedition +if !_el!==2 set change=0& goto :oe_edition +if !_el!==1 set change=1& goto :oe_edition +goto :oemenu -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% 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! " +:oe_edition + +cls +call :oe_chkinternet +if not defined _int ( +goto :oe_goback ) -::======================================================================================================================================== +cls +if not defined terminal mode 76, 25 +title Change Office Edition %masver% +echo: +echo: +echo: +echo: +echo O365/Mondo editions have the latest features. +echo ____________________________________________________________ +echo: +echo [1] Office Suites - Retail +echo [2] Office Suites - Volume +echo [3] Office SingleApps - Retail +echo [4] Office SingleApps - Volume +echo ____________________________________________ +echo: +echo [0] Go Back +echo ____________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" +choice /C:12340 /N +set _el=!errorlevel! +if !_el!==5 goto :oemenu +if !_el!==4 set list=SingleApps_Volume&goto :oe_editionchangepre +if !_el!==3 set list=SingleApps_Retail&goto :oe_editionchangepre +if !_el!==2 set list=Suites_Volume&goto :oe_editionchangepre +if !_el!==1 set list=Suites_Retail&goto :oe_editionchangepre +goto :oe_edition -:: Block the change to/from CloudEdition editions +::======================================================================================================================================== -for %%# in (202 203) do if %osSKU%==%%# ( -%eline% -echo [%winos% ^| SKU:%osSKU% ^| %winbuild%] -echo It's not recommended to change this installed edition to any other. -echo Aborting... -goto ced_done -) +:oe_editionchangepre -for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" ( -echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# " -) +cls +call :ch_getinfo +call :oe_tempcleanup +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getlist\:.*';iex ($f[1])" -if defined _target ( -for %%# in (%_target%) do ( -echo %%# | findstr /i "CountrySpecific CloudEdition ServerRdsh" %nul% || (set "_ntarget=!_ntarget! %%#") -) +:oe_editionchange + +cls +if not defined terminal ( +mode 98, 45 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=44;$B.Height=100;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) -if not defined _ntarget ( -%line% +if not exist %SystemRoot%\Temp\%list%.txt ( +%eline% +echo Failed to generate available editions list. echo: -if defined dismnotworking call :dk_color %Red% "DISM.exe is not responding." -call :dk_color %Gray% "Target Edition not found." -echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition. -%line% -goto ced_done +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :oe_goback ) -::======================================================================================================================================== - -:cedmenu2 - -cls -mode 98, 30 set inpt= set counter=0 set verified=0 @@ -10007,639 +9554,702 @@ set targetedition= %line% echo: -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." -) +call :dk_color %Gray% "Installed Office editions: %_oIds%" +call :dk_color %Gray% "You can select one of the following Office Editions." +if %winbuild% LSS 10240 echo Unsupported products such as 2019/2021/2024 are excluded from this list. %line% echo: -for %%A in (%_ntarget%) do ( +for /f "usebackq delims=" %%A in (%SystemRoot%\Temp\%list%.txt) do ( set /a counter+=1 +if !counter! LSS 10 ( echo [!counter!] %%A +) else ( +echo [!counter!] %%A +) set targetedition!counter!=%%A ) %line% echo: -echo [0] %_exitmsg% +echo [0] Go Back echo: -call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":" +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" set /p inpt= -if "%inpt%"=="" goto cedmenu2 -if "%inpt%"=="0" exit /b +if "%inpt%"=="" goto :oe_editionchange +if "%inpt%"=="0" (call :oe_tempcleanup & goto :oe_edition) for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) set targetedition=!targetedition%inpt%! -if %verified%==0 goto cedmenu2 +if %verified%==0 goto :oe_editionchange ::======================================================================================================================================== -if %winbuild% LSS 10240 goto :cbsmethod -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" goto :ced_change_server +:: Set app exclusions cls -mode con cols=105 lines=32 - -set key= -set _chan= -set _dismapi=0 - -:: Check if DISM Api or slmgr.vbs is required for edition upgrade - -if not exist "%SystemRoot%\System32\spp\tokens\skus\%targetedition%\" ( -set _dismapi=1 -) - -set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK" - -call :ced_targetSKU %targetedition% -if defined targetSKU call :ced_windowskey -if defined key if defined pkeychannel set _chan=%pkeychannel% -if not defined key call :changeeditiondata - -if not defined key ( +set suites= +echo %list% | find /i "Suites" %nul1% && ( +set suites=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getappnames\:.*';iex ($f[1])" +if not exist %SystemRoot%\Temp\getAppIds.txt ( %eline% -echo [%targetedition% ^| %winbuild%] -echo Unable to get product key from pkeyhelper.dll +echo Failed to generate available apps list. echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :oe_goback +) ) -::======================================================================================================================================== - -:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" or DISM Api method and restart -:: In other cases, editions can be changed instantly with "slmgr /ipk" - -if %_dismapi%==1 ( -mode con cols=105 lines=40 -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -%eline% -echo Pending Reboot flags found. -echo: -echo Restart the system and try again. -goto ced_done +for %%# in ( +Access +Excel +Lync +OneNote +Outlook +PowerPoint +Project +Publisher +Visio +Word +) do ( +if defined suites ( +find /i "%%#" "%SystemRoot%\Temp\getAppIds.txt" %nul1% && (set %%#_st=On) || (set %%#_st=) +) else ( +set %%#_st= ) ) +if defined Lync_st set Lync_st=Off +set OneDrive_st=Off +if defined suites (set Teams_st=Off) else (set Teams_st=) + +:oe_excludeapps + cls -%line% -echo: -if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] -echo: +if not defined terminal mode 98, 32 -if %_dismapi%==1 ( -call :dk_color %Green% "Notes-" +%line% echo: -echo - Save your work before continue, system will auto restart. +call :dk_color %Gray% "Target edition: %targetedition%" +call :dk_color %Gray% "You can exclude the below apps from installation." +%line% +if defined suites echo: +if defined Access_st echo [A] Access : %Access_st% +if defined Excel_st echo [E] Excel : %Excel_st% +if defined OneNote_st echo [N] OneNote : %OneNote_st% +if defined Outlook_st echo [O] Outlook : %Outlook_st% +if defined PowerPoint_st echo [P] PowerPoint : %PowerPoint_st% +if defined Project_st echo [J] Project : %Project_st% +if defined Publisher_st echo [R] Publisher : %Publisher_st% +if defined Visio_st echo [V] Visio : %Visio_st% +if defined Word_st echo [W] Word : %Word_st% +echo: +if defined Lync_st echo [L] SkypeForBusiness : %Lync_st% +if defined OneDrive_st echo [D] OneDrive : %OneDrive_st% +if defined Teams_st echo [T] Teams : %Teams_st% +%line% echo: -echo - You will need to activate with HWID option once the edition is changed. +echo [1] Continue +echo [0] Go Back %line% echo: -choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : " -if !errorlevel!==1 exit /b +call :dk_color %_Green% "Choose a menu option using your keyboard:" +choice /C:AENOPJRVWLDT10 /N +set _el=!errorlevel! +if !_el!==14 goto :oe_editionchangepre +if !_el!==13 call :excludelist & goto :oe_editionchangefinal +if !_el!==12 if defined Teams_st (if "%Teams_st%"=="Off" (set Teams_st=ON) else (set Teams_st=Off)) +if !_el!==11 if defined OneDrive_st (if "%OneDrive_st%"=="Off" (set OneDrive_st=ON) else (set OneDrive_st=Off)) +if !_el!==10 if defined Lync_st (if "%Lync_st%"=="Off" (set Lync_st=ON) else (set Lync_st=Off)) +if !_el!==9 if defined Word_st (if "%Word_st%"=="Off" (set Word_st=ON) else (set Word_st=Off)) +if !_el!==8 if defined Visio_st (if "%Visio_st%"=="Off" (set Visio_st=ON) else (set Visio_st=Off)) +if !_el!==7 if defined Publisher_st (if "%Publisher_st%"=="Off" (set Publisher_st=ON) else (set Publisher_st=Off)) +if !_el!==6 if defined Project_st (if "%Project_st%"=="Off" (set Project_st=ON) else (set Project_st=Off)) +if !_el!==5 if defined PowerPoint_st (if "%PowerPoint_st%"=="Off" (set PowerPoint_st=ON) else (set PowerPoint_st=Off)) +if !_el!==4 if defined Outlook_st (if "%Outlook_st%"=="Off" (set Outlook_st=ON) else (set Outlook_st=Off)) +if !_el!==3 if defined OneNote_st (if "%OneNote_st%"=="Off" (set OneNote_st=ON) else (set OneNote_st=Off)) +if !_el!==2 if defined Excel_st (if "%Excel_st%"=="Off" (set Excel_st=ON) else (set Excel_st=Off)) +if !_el!==1 if defined Access_st (if "%Access_st%"=="Off" (set Access_st=ON) else (set Access_st=Off)) +goto :oe_excludeapps + +:excludelist + +set excludelist= +for %%# in ( +Access +Excel +OneNote +Outlook +PowerPoint +Project +Publisher +Visio +Word +Lync +OneDrive +Teams +) do ( +if /i "!%%#_st!"=="Off" if defined excludelist (set excludelist=!excludelist!,%%#) else (set excludelist=,%%#) ) +exit /b ::======================================================================================================================================== -if %_dismapi%==0 ( -echo Installing %_chan% Key [%key%] -echo: -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!]" +:: Final command to change/add edition -if !error_code! EQU 0 ( -call :dk_refresh -call :dk_color %Green% "[Successful]" -echo: -call :dk_color %Gray% "Reboot is required to properly change the Edition." -) else ( -call :dk_color %Red% "[Unsuccessful] [Error Code: 0x!=ExitCode!]" -echo Check this page for help. %mas%troubleshoot -) -) +:oe_editionchangefinal -if %_dismapi%==1 ( -echo: -echo Applying the DISM API method with %_chan% Key %key%. Please wait... -echo: -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%;" -timeout /t 3 %nul1% -echo: -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%change_edition_issues" -) -%line% +cls +if not defined terminal mode 105, 32 -goto ced_done +:: Check for Project and Visio with unsupported language -::======================================================================================================================================== +set projvis= +set langmatched= +echo: %Project_st% %Visio_st% | find /i "ON" %nul% && set projvis=1 +echo: %targetedition% | findstr /i "Project Visio" %nul% && set projvis=1 -:cbsmethod +if defined projvis ( +for %%# in ( +ar-sa +cs-cz +da-dk +de-de +el-gr +en-us +es-es +fi-fi +fr-fr +he-il +hu-hu +it-it +ja-jp +ko-kr +nb-no +nl-nl +pl-pl +pt-br +pt-pt +ro-ro +ru-ru +sk-sk +sl-si +sv-se +tr-tr +uk-ua +zh-cn +zh-tw +) do ( +if /i "%_lang%"=="%%#" set langmatched=1 +) +if not defined langmatched ( +%eline% +echo %_lang% language is not available for Project/Visio apps. +echo: +call :dk_color %Blue% "Install Office in the supported language for Project/Visio from the below URL." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :oe_goback +) +) -cls -mode con cols=105 lines=32 -%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;}" +:: Thanks to @abbodi1406 for first discovering OfficeClickToRun.exe uses +:: Thanks to @may for the suggestion to use it to change edition with CDN as a source +:: OfficeClickToRun.exe with productstoadd method is used here to add editions +:: It uses delta updates, meaning that since it's using same installed build, it will consume very less Internet -REM %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -REM %eline% -REM echo Pending reboot flags found. -REM echo: -REM echo Restart the system and try again. -REM goto ced_done -REM ) +set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=Groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" -echo: -if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] -echo: -call :dk_color %Blue% "Important - Save your work before continue, system will auto reboot." -echo: -choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : " -if %errorlevel%==1 exit /b +if %change%==1 ( +set "c2rcommand=!c2rcommand! productstoremove=AllProducts" +) echo: -echo Initializing... +echo Running the below command, please wait... echo: +echo %c2rcommand% +%c2rcommand% +set errorcode=%errorlevel% +timeout /t 10 %nul% -if %_stg%==0 (set stage=) else (set stage=-StageCurrent) -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;" echo: -call :dk_color %Blue% "Incase of errors, you must restart your system before trying again." -echo Check this page for help. %mas%troubleshoot -%line% +if %errorcode% EQU 0 ( +call :dk_color %Gray% "Now run the Office activation option from the main menu." +) else ( +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) -goto ced_done +call :oe_tempcleanup +goto :oe_goback ::======================================================================================================================================== -:ced_change_server - -cls -mode con cols=105 lines=32 -%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;}" +:: Remove Office editions -set key= -set _chan= -set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM" +:oe_removeedition -call :ced_targetSKU %targetedition% -if defined targetSKU call :ced_windowskey -if defined key if defined pkeychannel set _chan=%pkeychannel% -if not defined key call :changeeditiondata +call :ch_getinfo -if not defined key ( -%eline% -echo [%targetedition% ^| %winbuild%] -echo Unable to get product key from pkeyhelper.dll -echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +cls +if not defined terminal ( +mode 98, 35 ) -::======================================================================================================================================== +set counter=0 +for %%A in (%_oIds%) do (set /a counter+=1) -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -%eline% -echo Pending reboot flags found. +if !counter! LEQ 1 ( echo: -echo Restart the system and try again. -goto ced_done +echo Only "%_oIds%" product is installed. +echo This option is available only when multiple products are installed. +goto :oe_goback ) -cls -echo: -if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] -echo: -echo Applying the command with %_chan% Key -echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula -DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula - -call :dk_color %Blue% "You must restart the system at this stage." -echo Help: %mas%troubleshoot - -::======================================================================================================================================== +::=============== -:ced_done +set inpt= +set counter=0 +set verified=0 +set targetedition= +%line% +echo: +call :dk_color %Gray% "You can uninstall one of the following Office editions." +%line% echo: -call :dk_color %_Yellow% "Press any key to %_exitmsg%..." -pause %nul1% -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 if exist %Systemdrive%\Windows\System32\spp\tokens\skus\%%a ( -call set "_wtarget= !_wtarget! %%a " -) +for %%A in (%_oIds%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A ) -exit /b - -::======================================================================================================================================== -:: Check pending reboot flags - -:checkrebootflag: -function Test-PendingReboot -{ - if (Test-Path -Path "$env:windir\WinSxS\pending.xml") { return $true } - if (Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -EA Ignore) { return $true } - if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -EA Ignore) { return $true } - try { - $util = [wmiclass]"\\.\root\ccm\clientsdk:CCM_ClientUtilities" - $status = $util.DetermineIfRebootPending() - if(($status -ne $null) -and $status.RebootPending){ - return $true - } - }catch{} - - return $false -} -Test-PendingReboot -:checkrebootflag: +%line% +echo: +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_removeedition +if "%inpt%"=="0" goto :oemenu +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto :oe_removeedition -::======================================================================================================================================== +::=============== -:ced_windowskey +cls +if not defined terminal mode 105, 32 -for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b -for %%# in (%keyflow%) do ( -call :dk_pkey %targetSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( -set key=!pkey! -exit /b -) +set _lang= +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%\%targetedition%.16" /f "-" /k ^| findstr /i ".*16\\.*-.*"') do ( +if defined _lang (set "_lang=!_lang!_%%a") else (set "_lang=_%%a") ) -exit /b - -::======================================================================================================================================== - -:ced_targetSKU -set k=%1 -set targetSKU= -for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set "c2rcommand="%_c2rExe%" platform=%_oArch% productstoremove=%targetedition%.16%_lang%" -call :dk_reflection +echo: +echo Running the below command, please wait... +echo: +echo %c2rcommand% +%c2rcommand% -set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionIdFromName', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); -set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionIdFromName('%k%', [ref]$out); $out +if %errorlevel% NEQ 0 ( +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) -for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set targetSKU=%%a) -if "%targetSKU%"=="0" set targetSKU= -exit /b +goto :oe_goback ::======================================================================================================================================== -:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition +:: Change Office update channel -:cbsxml:[ -param ( - [Parameter()] - [String]$SetEdition, +:oe_changeupdchnl - [Parameter()] - [Switch]$GetTargetEditions, +call :ch_getinfo - [Parameter()] - [Switch]$StageCurrent +cls +if not defined terminal ( +mode 98, 33 ) -function Get-AssemblyIdentity { - param ( - [String]$PackageName - ) - - $PackageName = [String]$PackageName - $packageData = ($PackageName -split '~') - - if($packageData[3] -eq '') { - $packageData[3] = 'neutral' - } - - return "" -} - -function Get-SxsName { - param ( - [String]$PackageName - ) - - $name = ($PackageName -replace '[^A-z0-9\-\._]', '') - - if($name.Length -gt 40) { - $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '') - } - - return $name.ToLower() -} - -function Find-EditionXmlInSxs { - param ( - [String]$Edition - ) - - $candidates = @($Edition, 'Client', 'Server') - $winSxs = $Env:SystemRoot + '\WinSxS' - $allInSxs = Get-ChildItem -Path $winSxs | select Name +call :oe_chkinternet +if not defined _int ( +goto :oe_goback +) - foreach($candidate in $candidates) { - $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate" - $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35') +if %winbuild% LSS 10240 ( +echo %_oIds% | findstr "2019 2021 2024" %nul% && ( +%eline% +echo Installed Office editions: %_oIds% +echo Unsupported Office edition is installed on your Windows build version %winbuild%. +goto :oe_goback +) +) - if($packages.Length -eq 0) { - continue - } +::=============== - $package = $packages[-1].Name - $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml' +set inpt= +set counter=0 +set verified=0 +set targetFFN= +set targetchannel= - if(Test-Path -Path $testPath -PathType Leaf) { - return $testPath - } - } +%line% +echo: +call :dk_color %Gray% "Installed update channel: %_AudienceData%, %_version%, Client: %_clversion%" +call :dk_color %Gray% "Unsupported update channels are excluded from this list." +%line% +echo: - return $null -} +for %%# in ( +"5440FD1F-7ECB-4221-8110-145EFAA6372F_Insider Fast [Beta] - Insiders::DevMain" +"64256AFE-F5D9-4F86-8936-8840A6A4F5BE_Monthly Preview - Insiders::CC" +"492350F6-3A01-4F97-B9C0-C7C6DDF67D60_Monthly [Current] - Production::CC" +"55336B82-A18D-4DD6-B5F6-9E5095C314A6_Monthly Enterprise - Production::MEC" +"B8F9B850-328D-4355-9145-C59439A0C4CF_Semi Annual Preview - Insiders::FRDC" +"7FFBC6BF-BC32-4F92-8982-F9DD17FD3114_Semi Annual - Production::DC" +"EA4A4090-DE26-49D7-93C1-91BFF9E53FC3_DevMain Channel - Dogfood::DevMain" +"B61285DD-D9F7-41F2-9757-8F61CBA4E9C8_Microsoft Elite - Microsoft::DevMain" +"F2E724C1-748F-4B47-8FB8-8E0D210E9208_Perpetual2019 VL - Production::LTSC" +"1D2D2EA6-1680-4C56-AC58-A441C8C24FF9_Microsoft2019 VL - Microsoft::LTSC" +"5030841D-C919-4594-8D2D-84AE4F96E58E_Perpetual2021 VL - Production::LTSC2021" +"86752282-5841-4120-AC80-DB03AE6B5FDB_Microsoft2021 VL - Microsoft::LTSC2021" +"7983BAC0-E531-40CF-BE00-FD24FE66619C_Perpetual2024 VL - Production::LTSC2024" +"C02D8FE6-5242-4DA8-972F-82EE55E00671_Microsoft2024 VL - Microsoft::LTSC2024" +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( +set supported= +if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) +if %winbuild% GEQ 10240 (if defined ltsc19 echo %%B | findstr /i "LTSC\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if defined ltsc21 echo %%B | findstr /i "LTSC2021\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if defined ltsc24 echo %%B | findstr /i "LTSC2024\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported=) +if defined supported ( +set /a counter+=1 +if !counter! LSS 10 ( +echo [!counter!] %%B +) else ( +echo [!counter!] %%B +) +set targetFFN!counter!=%%A +set targetchannel!counter!=%%B +) +) +) -function Find-EditionXml { - param ( - [String]$Edition - ) +%line% +echo: +echo [R] Learn about update channels +echo [0] Go back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_changeupdchnl +if "%inpt%"=="0" goto :oemenu +if /i "%inpt%"=="R" start https://learn.microsoft.com/microsoft-365-apps/updates/overview-update-channels & goto :oe_changeupdchnl +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetFFN=!targetFFN%inpt%! +set targetchannel=!targetchannel%inpt%! +if %verified%==0 goto :oe_changeupdchnl - $servicingEditions = $Env:SystemRoot + '\servicing\Editions' - $editionXml = $Edition + 'Edition.xml' +::======================= - $editionXmlInServicing = $servicingEditions + '\' + $editionXml +cls +if not defined terminal mode 105, 32 + +:: Get build number for the target FFN, using build number with OfficeC2RClient.exe command to trigger updates provides accurate results + +set build= +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getbuild\:.*';iex ($f[1])" %nul6%') do (set build=%%a) +echo "%build%" | find /i "16." %nul% || set build= + +:: Cleanup Office update related registries, thanks to @abbodi1406 +:: https://techcommunity.microsoft.com/t5/office-365-blog/how-to-manage-office-365-proplus-channels-for-it-pros/ba-p/795813 +:: https://learn.microsoft.com/en-us/microsoft-365-apps/updates/change-update-channels#considerations-when-changing-channels + +echo: +for /f "tokens=1 delims=-" %%A in ("%targetchannel%") do (echo Target update channel: %%A) +echo: +echo Cleaning Office update registry keys... +echo Adding new update channel to registry keys... + +%nul% reg add %o16c2r_reg%\Configuration /v CDNBaseUrl /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f +%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannel /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f +%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannelChanged /t REG_SZ /d "True" /f +%nul% reg delete %o16c2r_reg%\Configuration /v UnmanagedUpdateURL /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdateUrl /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdatePath /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdateToVersion /f +%nul% reg delete %o16c2r_reg%\Updates /v UpdateToVersion /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f /reg:32 +%nul% reg delete HKCU\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f /reg:32 +%nul% reg delete HKCU\Software\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f + +if not defined build ( +if %winbuild% GEQ 9200 call :dk_color %Gray% "Failed to detect build number for the target FFN." +set "updcommand="%_c2rCexe%" /update user" +) else ( +set "updcommand="%_c2rCexe%" /update user updatetoversion=%build%" +) +echo Running the below command to trigger updates... +echo: +echo %updcommand% +%updcommand% +echo: +echo Help - %mas%troubleshoot +goto :oe_goback - if(Test-Path -Path $editionXmlInServicing -PathType Leaf) { - return $editionXmlInServicing - } +::======================================================================================================================================== - return Find-EditionXmlInSxs -Edition $Edition -} +:oe_goback -function Write-UpgradeCandidates { - param ( - [HashTable]$InstallCandidates - ) +call :oe_tempcleanup - $editionCount = 0 - Write-Host 'Editions that can be upgraded to:' - foreach($candidate in $InstallCandidates.Keys) { - Write-Host "Target Edition : $candidate" - $editionCount++ - } +echo: +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($editionCount -eq 0) { - Write-Host '(no editions are available)' - } -} +if defined terminal ( +call :dk_color %_Yellow% "Press [0] key to go back..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to go back..." +pause %nul1% +) +goto :oemenu -function Write-UpgradeXml { - param ( - [Array]$RemovalCandidates, - [Array]$InstallCandidates, - [Boolean]$Stage - ) +::======================================================================================================================================== - $removeAction = 'remove' - if($Stage) { - $removeAction = 'stage' - } +:oe_tempcleanup - Write-Output '' - Write-Output '' - Write-Output '' +del /f /q %SystemRoot%\Temp\SingleApps_Volume.txt %nul% +del /f /q %SystemRoot%\Temp\SingleApps_Retail.txt %nul% +del /f /q %SystemRoot%\Temp\Suites_Volume.txt %nul% +del /f /q %SystemRoot%\Temp\Suites_Retail.txt %nul% +del /f /q %SystemRoot%\Temp\getAppIds.txt %nul% +exit /b - foreach($package in $InstallCandidates) { - Write-Output '' - Write-Output (Get-AssemblyIdentity -PackageName $package) - Write-Output '' - } +::======================================================================================================================================== - foreach($package in $RemovalCandidates) { - Write-Output "" - Write-Output (Get-AssemblyIdentity -PackageName $package) - Write-Output '' - } +:: Fetch required info - Write-Output '' - Write-Output '' -} +:ch_getinfo -function Write-Usage { - Get-Help $script:MyInvocation.MyCommand.Path -detailed -} +set _oRoot= +set _oArch= +set _updch= +set _oIds= +set _lang= +set _cfolder= +set _version= +set _clversion= +set _AudienceData= +set _actconfig= +set _c2rXml= +set _c2rExe= +set _c2rCexe= +set _masterxml= +set ltsc19= +set ltsc21= +set ltsc24= +set ltscfound= -$version = '1.0' -$getTargetsParam = $GetTargetEditions.IsPresent -$stageCurrentParam = $StageCurrent.IsPresent +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientFolder" %nul6%') do (set "_cfolder=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceId" %nul6%') do (set "_updch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientCulture" %nul6%') do (set "_lang=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientVersionToReport" %nul6%') do (set "_clversion=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\ProductReleaseIDs /v ActiveConfiguration" %nul6%') do (set "_actconfig=%%b") -if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) { - Write-Usage - Exit 1 -} +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%" /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +if defined _oIds (set "_oIds=!_oIds! %%a") else (set "_oIds=%%a") +) +set _oIds=%_oIds:.16=% -$removalCandidates = @(); -$installCandidates = @{}; +set verchk=0 +for /f "tokens=3 delims=." %%a in ("%_version%") do set "verchk=%%a" -$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' } -foreach($package in $packages) { - $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState - $packageName = ($package.Name -split '\\')[-1] - $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1] +if exist "%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml" set "_c2rXml=%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml" - if($state -eq 0x40) { - if($null -eq $installCandidates[$packageEdition]) { - $installCandidates[$packageEdition] = @() - } +if exist "%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml" ( +set "_masterxml=%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml" +) - if($false -eq ($installCandidates[$packageEdition] -contains $packageName)) { - $installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName) - } - } +if exist "%_cfolder%\OfficeClickToRun.exe" ( +set "_c2rExe=%_cfolder%\OfficeClickToRun.exe" +) - if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($removalCandidates -contains $packageName))) { - $removalCandidates = $removalCandidates + @($packageName) - } -} +if exist "%_cfolder%\OfficeC2RClient.exe" ( +set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe" +) -if($getTargetsParam) { - Write-UpgradeCandidates -InstallCandidates $installCandidates - Exit -} +echo %_AudienceData% | findstr /i "LTSC\>" %nul% && set ltsc19=LTSC +echo %_clversion% %_version% | findstr "16.0.103 16.0.104 16.0.105" %nul% && set ltsc19=LTSC -if($false -eq ($installCandidates.Keys -contains $SetEdition)) { - Write-Error "The system cannot be upgraded to `"$SetEdition`"" - Exit 1 -} +echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 +echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 -$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml' +echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 +:: LTSC 2024 build is not fixed yet -Write-UpgradeXml -RemovalCandidates $removalCandidates ` - -InstallCandidates $installCandidates[$SetEdition] ` - -Stage $stageCurrentParam >$xmlPath +if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1 -$editionXml = Find-EditionXml -Edition $SetEdition -if($null -eq $editionXml) { - Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...' -} +exit /b -Write-Host 'Starting the upgrade process. This may take a while...' +::======================================================================================================================================== -DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath -$dismError = $LASTEXITCODE +:: Check Internet connection -Remove-Item -Path $xmlPath -Force +:oe_chkinternet -if(($dismError -ne 0) -and ($dismError -ne 3010)) { - Write-Error 'Failed to upgrade to the target edition' - Exit $dismError -} +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) +) -if($null -ne $editionXml) { - $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml' - Copy-Item -Path $editionXml -Destination $destination +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1) +) - DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml - $dismError = $LASTEXITCODE +if not defined _int ( +%eline% +call :dk_color %Red% "Internet is not connected." +call :dk_color %Blue% "Internet is required for this operation." +) +exit /b - if(($dismError -ne 0) -and ($dismError -ne 3010)) { - Write-Error 'Failed to apply edition specific settings' - Exit $dismError - } -} +::======================================================================================================================================== -Restart-Computer -:cbsxml:] +:: Get available build number for a FFN -::======================================================================================================================================== +:getbuild: +$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072) +[System.Net.ServicePointManager]::SecurityProtocol = $Tls12 -:: Change edition using DISM API -:: Thanks to Alex (aka may, ave9858) +$FFN = $env:targetFFN +$windowsBuild = [System.Environment]::OSVersion.Version.Build -:dismapi:[ -param ( - [Parameter()] - [String]$TargetEdition, +$baseUrl = "https://mrodevicemgr.officeapps.live.com/mrodevicemgrsvc/api/v2/C2RReleaseData?audienceFFN=$FFN" +$url = if ($windowsBuild -lt 9200) { "$baseUrl&osver=Client|6.1" } elseif ($windowsBuild -lt 10240) { "$baseUrl&osver=Client|6.3" } else { $baseUrl } - [Parameter()] - [String]$Key -) +$response = if ($windowsBuild -ge 9200) { irm -Uri $url -Method Get } else { (New-Object System.Net.WebClient).DownloadString($url) } -$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) -$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) -$TB = $ModuleBuilder.DefineType(0) +if ($windowsBuild -lt 9200) { + if ($response -match '"AvailableBuild"\s*:\s*"([^"]+)"') { Write-Host $matches[1] } +} else { + Write-Host $response.AvailableBuild +} +:getbuild: + +::======================================================================================================================================== + +:: Get available edition list from c2rpridslicensefiles_auto.xml +:: and filter the list using MasterDescriptor.x-none.xml +:: and exclude unsupported products on Windows 7/8/8.1 + +:getlist: +$xmlPath1 = $env:_c2rXml +$xmlPath2 = $env:_masterxml +$outputDir = $env:SystemRoot + "\Temp\" +$buildNumber = [System.Environment]::OSVersion.Version.Build +$excludedKeywords = @("2019", "2021", "2024") +$productReleaseIds = @() + +if (Test-Path $xmlPath1) { + $xml1 = New-Object -TypeName System.Xml.XmlDocument + $xml1.Load($xmlPath1) + foreach ($node in $xml1.SelectNodes("//ProductReleaseId")) { + $id = $node.GetAttribute("id") + $exclude = $false + if ($buildNumber -lt 10240) { + foreach ($keyword in $excludedKeywords) { + if ($id -match $keyword) { $exclude = $true; break } + } + } + if ($id -ne "CommonLicenseFiles" -and -not $exclude) { $productReleaseIds += $id } + } +} -[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() +$categories = @{ + "Suites_Retail" = @(); "Suites_Volume" = @() + "SingleApps_Retail" = @(); "SingleApps_Volume" = @() +} -[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 +foreach ($id in $productReleaseIds) { + $category = if ($id -match "Retail") { "Retail" } else { "Volume" } + $categories["SingleApps_$category"] += $id } -:dismapi:] -::======================================================================================================================================== +if (Test-Path $xmlPath2) { + $xml2 = New-Object -TypeName System.Xml.XmlDocument + $xml2.Load($xmlPath2) + foreach ($sku in $xml2.SelectNodes("//SKU")) { + $skuId = $sku.GetAttribute("ID") + if ($productReleaseIds -contains $skuId) { + $appIds = $sku.SelectNodes("Apps/App") | ForEach-Object { $_.GetAttribute("id") } + if ($appIds -contains "Excel" -and $appIds -contains "Word") { + $category = if ($skuId -match "Retail") { "Retail" } else { "Volume" } + $categories["Suites_$category"] += $skuId + $categories["SingleApps_$category"] = $categories["SingleApps_$category"] | Where-Object { $_ -ne $skuId } + } + } + } +} -:: 1st column = Generic Retail/OEM/MAK/GVLK Key -:: 2nd column = Key Type -:: 3rd column = WMI Edition ID -:: 4th column = Version name incase same Edition ID is used in different OS versions with different key -:: Separator = _ +foreach ($section in $categories.Keys) { + $filePath = Join-Path -Path $outputDir -ChildPath "$section.txt" + $ids = $categories[$section] + if ($ids.Count -gt 0) { $ids | Out-File -FilePath $filePath -Encoding ASCII } +} +:getlist: -:: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible. -:: Only RS3 and older version Generic keys are stored here, later ones are extracted from the pkeyhelper.dll itself +::======================================================================================================================================== -:changeeditiondata +:: Get App list for a specific product ID using MasterDescriptor.x-none.xml -if %winbuild% GTR 17763 exit /b -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) +:getappnames: +$xmlPath = $env:_masterxml +$targetSkuId = $env:targetedition +$outputDir = $env:SystemRoot + "\Temp\" +$outputFile = Join-Path -Path $outputDir -ChildPath "getAppIds.txt" +$excludeIds = @("shared", "PowerPivot", "PowerView", "MondoOnly", "OSM", "OSMUX", "Groove", "DCF") -set h= -for %%# in ( -XGV%h%PP-NM%h%H47-7TT%h%HJ-W%h%3FW7-8HV%h%2C__OEM:NONSLP_Enterprise -D6R%h%D9-D4%h%N8T-RT9%h%QX-Y%h%W6YT-FCW%h%WJ______Retail_Starter -3V6%h%Q6-NQ%h%XCX-V8Y%h%XR-9%h%QCYV-QPF%h%CT__Volume:MAK_EnterpriseN -3NF%h%XW-2T%h%27M-2BD%h%W6-4%h%GHRV-68X%h%RX______Retail_StarterN -VK7%h%JG-NP%h%HTM-C97%h%JM-9%h%MPGT-3V6%h%6T______Retail_Professional -2B8%h%7N-8K%h%FHP-DKV%h%6R-Y%h%2C8J-PKC%h%KT______Retail_ProfessionalN -4CP%h%RK-NM%h%3K3-X6X%h%XQ-R%h%XX86-WXC%h%HW______Retail_CoreN -N24%h%34-X9%h%D7W-8PF%h%6X-8%h%DV9T-8TY%h%MD______Retail_CoreCountrySpecific -BT7%h%9Q-G7%h%N6G-PGB%h%YW-4%h%YWX6-6F4%h%BT______Retail_CoreSingleLanguage -YTM%h%G3-N6%h%DKC-DKB%h%77-7%h%M9GH-8HV%h%X7______Retail_Core -XKC%h%NC-J2%h%6Q9-KFH%h%D2-F%h%KTHY-KD7%h%2Y__OEM:NONSLP_PPIPro -YNM%h%GQ-8R%h%YV3-4PG%h%Q3-C%h%8XTP-7CF%h%BY______Retail_Education -84N%h%GF-MH%h%BT6-FXB%h%X8-Q%h%WJK7-DRR%h%8H______Retail_EducationN -NK9%h%6Y-D9%h%CD8-W44%h%CQ-R%h%8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 -FWN%h%7H-PF%h%93Q-4GG%h%P8-M%h%8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH -2DB%h%W3-N2%h%PJG-MVH%h%W3-G%h%7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 -NTX%h%6B-BR%h%YC2-K67%h%86-F%h%6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH -G3K%h%NM-CH%h%G6T-R36%h%X3-9%h%QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage -HNG%h%CC-Y3%h%8KG-QVK%h%8D-W%h%MWRK-X86%h%VK______Retail_ProfessionalCountrySpecific -DXG%h%7C-N3%h%6C4-C4H%h%TG-X%h%4T3X-2YV%h%77______Retail_ProfessionalWorkstation -WYP%h%NQ-8C%h%467-V2W%h%6J-T%h%X4WX-WT2%h%RQ______Retail_ProfessionalWorkstationN -8PT%h%T6-RN%h%W4C-6V7%h%J2-C%h%2D3X-MHB%h%PB______Retail_ProfessionalEducation -GJT%h%YN-HD%h%MQY-FRR%h%76-H%h%VGC7-QPF%h%8P______Retail_ProfessionalEducationN -C4N%h%TJ-CX%h%6Q2-VXD%h%MR-X%h%VKGM-F9D%h%JC__Volume:MAK_EnterpriseG -46P%h%N6-R9%h%BK9-CVH%h%KB-H%h%WQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN -NJC%h%F7-PW%h%8QT-332%h%4D-6%h%88JX-2YV%h%66______Retail_ServerRdsh -V3W%h%VW-N2%h%PV2-CGW%h%C3-3%h%4QGF-VMJ%h%2C______Retail_Cloud -NH9%h%J3-68%h%WK7-6FB%h%93-4%h%K3DF-DJ4%h%F6______Retail_CloudN -2HN%h%6V-HG%h%TM8-6C9%h%7C-R%h%K67V-JQP%h%FD______Retail_CloudE -WC2%h%BQ-8N%h%RM3-FDD%h%YY-2%h%BFGV-KHK%h%QY_Volume:GVLK_ServerStandard%Cor%_RS1 -CB7%h%KF-BW%h%N84-R7R%h%2Y-7%h%93K2-8XD%h%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1 -JCK%h%RF-N3%h%7P4-C2D%h%82-9%h%YXRT-4M6%h%3B_Volume:GVLK_ServerSolution_RS1 -QN4%h%C6-GB%h%JD2-FB4%h%22-G%h%HWJK-GJG%h%2R_Volume:GVLK_ServerCloudStorage_RS1 -VP3%h%4G-4N%h%PPG-79J%h%TQ-8%h%64T4-R3M%h%QX_Volume:GVLK_ServerAzureCor_RS1 -9JQ%h%NQ-V8%h%HQ6-PKB%h%8H-G%h%GHRY-R62%h%H6______Retail_ServerAzureNano_RS1 -VN8%h%D3-PR%h%82H-DB6%h%BJ-J%h%9P4M-92F%h%6J______Retail_ServerStorageStandard_RS1 -48T%h%QX-NV%h%K3R-D8Q%h%R3-G%h%THHM-8FH%h%XC______Retail_ServerStorageWorkgroup_RS1 -2HX%h%DN-KR%h%XHB-GPY%h%C7-Y%h%CKFJ-7FV%h%DG_Volume:GVLK_ServerDatacenterACor_RS3 -PTX%h%N8-JF%h%HJM-4WC%h%78-M%h%PCBR-9W4%h%KR_Volume:GVLK_ServerStandardACor_RS3 -) do ( -for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C ( +$xml = New-Object -TypeName System.Xml.XmlDocument +$xml.Load($xmlPath) -if not defined key ( -set 4th=%%D -if not defined 4th ( -set "key=%%A" & set "_chan=%%B" -) else ( -echo "%branch%" | find /i "%%D" %nul1% && (set "key=%%A" & set "_chan=%%B") -) -) -) -) -exit /b +$appIdsList = @() +$skuNodes = $xml.SelectNodes("//SKU[@ID='$targetSkuId']") -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +foreach ($skuNode in $skuNodes) { + foreach ($app in $skuNode.SelectNodes("Apps/App")) { + $appId = $app.GetAttribute("id") + if ($excludeIds -notcontains $appId) { + $appIdsList += $appId + } + } +} -:MASend -echo: -if defined _MASunattended timeout /t 2 & exit /b -echo Press any key to exit... -pause >nul -exit /b +if ($appIdsList.Count -gt 0) { + $appIdsList | Out-File -FilePath $outputFile -Encoding ASCII +} +:getappnames: ::======================================================================================================================================== :: Leave empty line below diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 0620cc9..3cb7bc6 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 :: ::============================================================================ @@ -21,32 +18,41 @@ set _act=0 :: To disable changing edition if current edition doesn't support HWID activation, change the value to 1 from 0 or run the script with "/HWID-NoEditionChange" parameter set _NoEditionChange=0 +:: To run the script in debug mode, change 0 to "/HWID" in below line +set "_debug=0" + :: If value is changed in above lines or parameter is used then script will run in unattended mode ::======================================================================================================================================== -:: Set Path variable, it helps if it is misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system -set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +setlocal EnableExtensions +setlocal DisableDelayedExpansion + +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" + +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 1>nul -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" @@ -63,6 +69,33 @@ exit /b ::======================================================================================================================================== +:: Debug code + +if "%_debug%" EQU "0" ( +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" +goto :_debug +) + +set "nul1=" +set "nul2=" +set "nul6=" +set "nul=" + +@echo on +@prompt $G +@call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" +@echo off +@exit /b + +:_debug + +::======================================================================================================================================== + set "blank=" set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" @@ -74,10 +107,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -86,9 +119,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: -ping 127.0.0.1 -n 6 >nul +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -118,74 +155,27 @@ for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -set "nul1=1>nul" -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 :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." -) - -::======================================================================================================================================== +call :dk_setvar if %winbuild% LSS 10240 ( %eline% echo Unsupported OS version detected [%winbuild%]. -echo HWID Activation is supported only for Windows 10/11. -echo Use Online KMS Activation option. +echo HWID Activation is only supported on Windows 10/11. +echo: +call :dk_color %Blue% "Use Online KMS activation option." goto dk_done ) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% -echo HWID Activation is not supported for Windows Server. -echo Use KMS38 or Online KMS Activation option. -goto dk_done -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. +echo HWID Activation is not supported on Windows Server. +call :dk_color %Blue% "Use KMS38 or Online KMS activation option." goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -194,6 +184,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -204,8 +195,8 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( 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 The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. goto dk_done @@ -214,31 +205,83 @@ goto dk_done ::======================================================================================================================================== +:: 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 dk_done +) + +::======================================================================================================================================== + :: 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'. +echo Right click on this script and select 'Run as administrator'. 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 +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) + +:: Check if script is running in Terminal app -if %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) +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); -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 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 @@ -247,20 +290,20 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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) @@ -270,40 +313,39 @@ if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%v ::======================================================================================================================================== cls +if not defined terminal ( mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) title HWID Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell - -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +for %%# in ( +sppsvc.exe +ClipUp.exe +) do ( +if not exist %SysPath%\%%# ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode +echo [%SysPath%\%%#] file is missing, aborting... echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) +) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -314,12 +356,12 @@ if defined _perm ( cls echo ___________________________________________________________________________________________ echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." +call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate Anyway [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -333,40 +375,27 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 %eline% echo [%winos% ^| %winbuild%] echo: -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% +echo Evaluation editions cannot be activated outside of their evaluation period. echo: -echo Download it from here, -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) ::======================================================================================================================================== -call :dk_checksku - -if not defined osSKU ( -%eline% -echo SKU value was not detected properly. Aborting... -goto dk_done -) - -::======================================================================================================================================== - set error= cls 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 "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%] +call :dk_showosinfo :: Check Internet connection set _int= for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _int=1) +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) if not defined _int ( @@ -379,29 +408,14 @@ echo Checking Internet Connection [Connected%ping_f%] ) else ( set error=1 call :dk_color %Red% "Checking Internet Connection [Not Connected]" -) - -::======================================================================================================================================== - -:: Check Windows Script Host - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] +call :dk_color %Blue% "Internet is required for HWID activation." ) ::======================================================================================================================================== echo Initiating Diagnostic Tests... -set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt DoSvc UsoSvc CryptSvc BITS TrustedInstaller wuauserv" -if %winbuild% GEQ 17134 set "_serv=%_serv% WaaSMedicSvc" +set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt" :: Client License Service (ClipSVC) :: Microsoft Account Sign-in Assistant @@ -409,49 +423,24 @@ if %winbuild% GEQ 17134 set "_serv=%_serv% WaaSMedicSvc" :: CNG Key Isolation :: Windows License Manager Service :: Windows Management Instrumentation -:: Delivery Optimization -:: Update Orchestrator Service -:: Cryptographic Services -:: Background Intelligent Transfer Service -:: Windows Modules Installer -:: Windows Update -:: Windows Update Medic Service call :dk_errorcheck -:: Check Windows updates and store app blockers - -set updatesblock= -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\Policies\Microsoft\Windows\WindowsUpdate /s %nul2% | findstr /i "NoAutoUpdate DisableWindowsUpdateAccess" %nul% && set updatesblock=1 - -if defined updatesblock call :dk_color %Gray% "Checking Update Blocker In Registry [Found]" - -if defined applist echo: %serv_e% | find /i "wuauserv" %nul% && ( -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 %nul2% | find /i "0x1" %nul% && ( -call :dk_color %Gray% "Checking Store Blocker In Registry [Found]" -) - ::======================================================================================================================================== :: Detect Key set key= set altkey= -set skufound= set changekey= set altapplist= set altedition= set notworking= -if defined applist call :hwiddata key +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :hwiddata key if not defined key ( -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1]);"') do (set altapplist=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1])"') do (set altapplist=%%a) if defined altapplist call :hwiddata key ) @@ -467,13 +456,17 @@ call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Acti if not defined key ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skufound ( -echo Unable to find this product in the supported product list. +if not defined skunotfound ( +echo This product does not support HWID activation. +echo Make sure you are using the latest version of the script. +echo If you are, then try KMS38 activation option. +set fixes=%fixes% %mas% +echo %mas% ) else ( -echo Required License files not found in %SystemRoot%\System32\spp\tokens\skus\ +echo Required license files not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -echo Make sure you are using updated version of the script. -echo %mas% echo: goto dk_done ) @@ -486,30 +479,17 @@ if defined notworking set error=1 echo: if defined changekey ( -call :dk_color %Blue% "[%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: ) -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 errorcode=%errorlevel% -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]" - -if %errorcode% EQU 0 ( -call :dk_refresh -echo Installing Generic Product Key [%key%] [Successful] -) else ( -call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%" -if not defined error ( -if defined altapplist call :dk_color %Red% "Activation ID not found for this key." -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 -) -set error=1 +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] detected. Script will activate base edition [SKU ID-%regSKU%]." +echo: ) +call :dk_inskey "[%key%]" + ::======================================================================================================================================== :: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries @@ -534,12 +514,6 @@ 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 :: 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]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -goto :dl_final -) - set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" if not exist "%tdir%\" md "%tdir%\" %nul% @@ -552,7 +526,7 @@ call :hwiddata ticket copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]" +call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting...]" echo [%encoded%] if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :dl_final @@ -563,14 +537,14 @@ echo Generating GenuineTicket.xml [Successful] set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) @@ -597,7 +571,7 @@ set rebuildinfo=1 call :dk_color %Red% "Checking Ticket Migration [Failed]" ) -if defined applist if not defined showfix if defined rebuildinfo ( +if not defined altapplist if not defined showfix if defined rebuildinfo ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" ) @@ -621,13 +595,31 @@ goto :dl_final ::========================================================================================================================================== +:: Clear store ID related registry to fix activation if Internet is connected + +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" + +if defined _int ( +reg delete "%_ident%" /f %nul% +reg query "%_ident%" %nul% && ( +echo: +set error=1 +call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" +) +for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +call :dk_refresh +call :dk_act +call :dk_checkperm +) + +::========================================================================================================================================== + :: Extended licensing servers tests incase error not found and activation failed +if %keyerror% EQU 0 if not defined _perm if defined _int ( set resfail= -if not defined error ( - ipconfig /flushdns %nul% -set "tls=$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072); [System.Net.ServicePointManager]::SecurityProtocol = $Tls12;" +set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" for %%# in ( login.live.com/ppsecure/deviceaddcredential.srf @@ -647,41 +639,58 @@ if not defined resfail ( if defined resfail ( set error=1 echo: -call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" +call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ::========================================================================================================================================== -:: Clear store ID related registry to fix activation incase error not found +if %keyerror% EQU 0 if not defined _perm if defined _int ( -if not defined error ( +reg query "%_ident%" %nul% || ( +set error=1 echo: -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" -reg delete "!_ident!" /f %nul% -reg query "!_ident!" %nul% && ( -call :dk_color %Red% "Deleting a Registry [Failed] [!_ident!]" -) || ( -echo Deleting a Registry [Successful] [!_ident!] +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" ) -REM Refresh some services and license status +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 +if defined wublock call :dk_color %Red% "Checking Update Blocker In Registry [Found]" -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% Restart-Service %%# %nul%) -call :dk_refresh -call :dk_act -call :dk_checkperm +reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( +set storeblock=1 +call :dk_color %Red% "Checking Store Blocker In Registry [Found]" +) + +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || set wucorrupt=1 +) + +for %%G in (Parameters Security TriggerInfo) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucorrupt=1 +) + +if defined wucorrupt ( +call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" +) else ( +%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 10 | Out-Null" +sc query wuauserv | find /i "RUNNING" %nul% || ( +set wuerror=1 +sc start wuauserv %nul% +call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" +) ) REM Check Internet related error codes -if not defined error if not defined _perm ( -echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf" %nul% && ( -set error=1 -echo: +if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock ( +echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +) ) ) @@ -693,11 +702,12 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license. ) else ( call :dk_color %Red% "Activation Failed %error_code%" if defined notworking ( -call :dk_color %Blue% "At the time of writing this, HWID Activation was not supported for this product." -call :dk_color %Blue% "Use KMS38 Activation option." +call :dk_color %Blue% "At the time of writing, HWID Activation is not supported for this product." +call :dk_color %Blue% "Use KMS38 activation option instead." ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -716,51 +726,173 @@ call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - ) ) -if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." +REM if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." + +:: Trigger reevaluation of SPP's Scheduled Tasks +if defined _perm ( +call :dk_reeval %nul% +) goto :dk_done ::======================================================================================================================================== +:: 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 + +:: Show OS info + +:dk_showosinfo + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) +) + +echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] +exit /b + :: Check SKU value :dk_checksku +call :dk_reflection + set osSKU= set slcSKU= set wmiSKU= set regSKU= +set winsub= if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); 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) +set slcSKU=%slcSKU: =% if "%slcSKU%"=="0" set slcSKU= -if 1%slcSKU% NEQ +1%slcSKU% set slcSKU= +for /f "tokens=* delims=0123456789" %%a in ("%slcSKU%") do (if not "[%%a]"=="[]" set slcSKU=) 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 %winbuild% GEQ 15063 %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';iex ($f[1])" %nul2% | find /i "Subscription_is_activated" %nul% && ( +if defined regSKU if defined slcSKU if not "%regSKU%"=="%slcSKU%" ( +set winsub=1 +set osSKU=%regSKU% +) +) + +if not defined osSKU set osSKU=%slcSKU% if not defined osSKU set osSKU=%wmiSKU% if not defined osSKU set osSKU=%regSKU% exit /b +:: Get Windows Subscription status + +:winsubstatus: +$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(6, 1).DefineDynamicModule(4).DefineType(2) +[void]$DM.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$m = [System.Runtime.InteropServices.Marshal] +$p = $m::AllocHGlobal(12) +$r = $DM.CreateType()::ClipGetSubscriptionStatus([ref]$p) +if ($r -eq 0) { + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: + :: Get Windows permanent activation status :dk_checkperm -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='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 1 wmic path %spp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= 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% +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% +exit /b + +:: Install Key + +:dk_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] +) else ( +call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." +call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +set error=1 +) + exit /b :: Activation command @@ -768,28 +900,53 @@ exit /b :dk_act set error_code= -if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" call Activate %nul% -if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).Activate()" %nul% -if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ato %nul% +if %_wmic% EQU 1 wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL" call Activate %nul% +if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 (set "error_code=[Error Code: 0x%=ExitCode%]") else (set error_code=) exit /b -:: Get Windows Activation IDs +:: Get all products 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" %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='+$_)}" %nul6%')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Trigger reevaluation, it helps in updating SPP tasks + +:dk_reeval + +:: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP + +set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" +reg delete "%ruleskey%" /v "State" /f %nul% +reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); +set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" exit /b :: Get Activation IDs from licensing files if not found through WMI :getactivationid: -$folderPath = "$env:windir\System32\spp\tokens\skus" +$folderPath = "$env:SysPath\spp\tokens\skus" $files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms" $guids = @() foreach ($file in $files) { @@ -804,22 +961,61 @@ $guidsString = $guids -join " " $guidsString :getactivationid: +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + :: Check wmic.exe :dk_ckeckwmic set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 ) exit /b +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +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%%') @@ -831,6 +1027,22 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) + +if not defined winsub exit /b + +:: Check base edition product name if Windows subscription license is found + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a +) else ( +set winos=Windows 10 %%a +) +) exit /b :: Common lines used in PowerShell reflection code @@ -844,9 +1056,68 @@ exit /b ::======================================================================================================================================== +:dk_chkmal + +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. + +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico +if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS +set pupfound=%pupfound1%%pupfound2% + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +set wucount=0 +for %%# in (wuauserv) do ( +set _corrupt= +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 & set /a wucount+=1) +) +) +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) +exit /b + +::======================================================================================================================================== + :dk_errorcheck set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) + +::======================================================================================================================================== :: Check corrupt services @@ -858,7 +1129,6 @@ 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 /i %%#==TrustedInstaller if /i %%G==DependOnService set _corrupt= ) if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) @@ -866,6 +1136,7 @@ if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (s if defined serv_cor ( set error=1 +set showfix=1 call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) @@ -892,12 +1163,6 @@ if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%# if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% -if /i %%#==DoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==UsoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==CryptSvc sc config %%# start= auto %nul% -if /i %%#==BITS sc config %%# start= delayed-auto %nul% -if /i %%#==wuauserv sc config %%# start= demand %nul% -if /i %%#==WaaSMedicSvc sc config %%# start= demand %nul% if !errorlevel!==0 ( if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") ) else ( @@ -924,7 +1189,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% Start-Service %%# %nul% +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -938,7 +1203,7 @@ if defined serv_e ( set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( -call :dk_color %Blue% "Restart the system to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) @@ -974,96 +1239,94 @@ call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE set wpainfo= set wpaerror= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) echo "%wpainfo%" | find /i "Error Found" %nul% && ( set error=1 set wpaerror=1 -call :dk_color %Red% "Checking WPA Registry Error [%wpainfo%]" +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" ) || ( echo Checking WPA Registry Count [%wpainfo%] ) -DISM /English /Online /Get-CurrentEdition %nul% -set dism_error=%errorlevel% -cmd /c exit /b %dism_error% -if %dism_error% NEQ 0 set "dism_error=0x%=ExitCode%" -if %dism_error% NEQ 0 ( -call :dk_color %Red% "Checking DISM [Not Responding] [%dism_error%]" -) - - if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 -set showfix=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" -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 %mas%genuine-installation-media.html" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) ) -set osedition= +set osedition=0 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 an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if not %osedition%==0 ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( -if not defined osedition ( +if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SystemRoot%\System32\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set error=1 +set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( set error=1 -call :dk_color %Red% "Checking Package File [Not Found] [%osedition%]" +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" if %error_code% NEQ 0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" -) - - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] %error_code%" ) 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 %_wmic% EQU 0 %psc% "Get-WmiObject -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." +call :dk_color %Red% "Checking WMI [Not Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) +if not defined officeact ( +if %winbuild% GEQ 10240 ( %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%]" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) +) ) - reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 @@ -1079,17 +1342,49 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System ) +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. + +if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +echo Checking Eval WLMS Service [Found] +) +) + + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) +) + + 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% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]" -%psc% Restart-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" set error=1 ) 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_color2 %Blue% "Possibly Caused By Gaming Spoofers." %_Yellow% " Help - %mas%issues_due_to_gaming_spoofers" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1097,29 +1392,49 @@ 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%\" ( +if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 set error=1 -REM This code creates token folder only if it's missing and sets default permission for it +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +:: This code creates token folder only if it's missing and sets default permission for it + +if not defined toerr if not exist "%tokenstore%\" ( 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)';" +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 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%\]" +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) ) -call :dk_actids -if not defined applist ( -%psc% Stop-Service sppsvc %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 ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set "_notfoundids=Not found" +) set error=1 -call :dk_color %Red% "Checking Activation IDs [Not Found]" +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) @@ -1130,41 +1445,65 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke ) -if not exist %SystemRoot%\system32\sppsvc.exe ( -set error=1 -set showfix=1 -call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +) ) -:: This code checks if NT SERVICE\sppsvc has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if not exist "%tokenstore%\" set permerror=1 - +if %winbuild% GEQ 9200 ( for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) +) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) ) + if defined permerror ( set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 -call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +) ) -:: If required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." ) +) if not defined showfix if defined wpaerror ( set showfix=1 @@ -1176,33 +1515,49 @@ exit /b :: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems :wpatest: -$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA") -$count = $wpaKey.SubKeyCount - +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} $osVersion = [System.Environment]::OSVersion.Version $minBuildNumber = 14393 - if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $keyNumber = $subkeyName -replace '.*-', '' - $subkeyHashTable[$keyNumber] = $true + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Host "Total Keys $count. Error Found- $i key does not exist" + Write-Output "Total Keys $count. Error Found - $i key does not exist." $wpaKey.Close() - exit + exit } } } $wpaKey.GetSubKeyNames() | ForEach-Object { - $subkey = $wpaKey.OpenSubKey($_) - $p = $subkey.GetValueNames() - if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { - Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" - $wpaKey.Close() - exit + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } } } $count @@ -1235,8 +1590,21 @@ exit /b echo: if %_unattended%==1 timeout /t 2 & exit /b + +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 ::======================================================================================================================================== @@ -1245,7 +1613,7 @@ exit /b :: 2nd column = Generic Retail/OEM/MAK Key :: 3rd column = SKU ID :: 4th column = Key part number -:: 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) +:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check mass grave[.]dev/hwid#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 :: 7th column = Key Type :: 8th column = WMI Edition ID (For reference only) @@ -1257,50 +1625,46 @@ exit /b set f= for %%# in ( -8b351c9c-f398-4515-9900-09df49427262_XG%f%VPP-NMH%f%47-7T%f%THJ-W3F%f%W7-8H%f%V2C___4_X19-99683_HGNKjkKcKQHO6n8srMUrDh/MElffBZarLqCMD9rWtgFKf3YzYOLDPEMGhuO/auNMKCeiU7ebFbQALS/MyZ7TvidMQ2dvzXeXXKzPBjfwQx549WJUU7qAQ9Txg9cR9SAT8b12Pry2iBk+nZWD9VtHK3kOnEYkvp5WTCTsrSi6Re4_0_OEM:NONSLP_Enterprise -c83cef07-6b72-4bbc-a28f-a00386872839_3V%f%6Q6-NQX%f%CX-V8%f%YXR-9QC%f%YV-QP%f%FCT__27_X19-98746_NHn2n0N1UfVf00CfaI5LCDMDsKdVAWpD/HAfUrcTAKsw9d2Sks4h5MhyH/WUx+B6dFi8ol7D3AHorR8y9dqVS1Bd2FdZNJl/tTR1PGwYn6KL88NS19aHmFNdX8s4438vaa+Ty8Qk8EDcwm/wscC8lQmi3/RgUKYdyGFvpbGSVlk_0_Volume:MAK_EnterpriseN -4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK%f%7JG-NPH%f%TM-C9%f%7JM-9MP%f%GT-3V%f%66T__48_X19-98841_Yl/jNfxJ1SnaIZCIZ4m6Pf3ySNoQXifNeqfltNaNctx+onwiivOx7qcSn8dFtURzgMzSOFnsRQzb5IrvuqHoxWWl1S3JIQn56FvKsvSx7aFXIX3+2Q98G1amPV/WEQ0uHA5d7Ya6An+g0Z0zRP7evGoomTs4YuweaWiZQjQzSpA_0_____Retail_Professional -9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B%f%87N-8KF%f%HP-DK%f%V6R-Y2C%f%8J-PK%f%CKT__49_X19-98859_Ge0mRQbW8ALk7T09V+1k1yg66qoS0lhkgPIROOIOgxKmWPAvsiLAYPKDqM4+neFCA/qf1dHFmdh0VUrwFBPYsK251UeWuElj4bZFVISL6gUt1eZwbGfv5eurQ0i+qZiFv+CcQOEFsd5DD4Up6xPLLQS3nAXODL5rSrn2sHRoCVY_0_____Retail_ProfessionalN -f742e4ff-909d-4fe9-aacb-3231d24a0c58_4C%f%PRK-NM3%f%K3-X6%f%XXQ-RXX%f%86-WX%f%CHW__98_X19-98877_vel4ytVtnE8FhvN87Cflz9sbh5QwHD1YGOeej9QP7hF3vlBR4EX2/S/09gRneeXVbQnjDOCd2KFMKRUWHLM7ZhFBk8AtlG+kvUawPZ+CIrwrD3mhi7NMv8UX/xkLK3HnBupMEuEwsMJgCUD8Pn6om1mEiQebHBAqu4cT7GN9Y0g_0_____Retail_CoreN -1d1bac85-7365-4fea-949a-96978ec91ae0_N2%f%434-X9D%f%7W-8P%f%F6X-8DV%f%9T-8T%f%YMD__99_X19-99652_Nv17eUTrr1TmUX6frlI7V69VR6yWb7alppCFJPcdjfI+xX4/Cf2np3zm7jmC+zxFb9nELUs477/ydw2KCCXFfM53bKpBQZKHE5+MdGJGxebOCcOtJ3hrkDJtwlVxTQmUgk5xnlmpk8PHg82M2uM5B7UsGLxGKK4d3hi0voSyKeI_0_____Retail_CoreCountrySpecific -3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT%f%79Q-G7N%f%6G-PG%f%BYW-4YW%f%X6-6F%f%4BT_100_X19-99661_FV2Eao/R5v8sGrfQeOjQ4daokVlNOlqRCDZXuaC45bQd5PsNU3t1b4AwWeYM8TAwbHauzr4tPG0UlsUqUikCZHy0poROx35bBBMBym6Zbm9wDBVyi7nCzBtwS86eOonQ3cU6WfZxhZRze0POdR33G3QTNPrnVIM2gf6nZJYqDOA_0_____Retail_CoreSingleLanguage -2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YT%f%MG3-N6D%f%KC-DK%f%B77-7M9%f%GH-8H%f%VX7_101_X19-98868_GH/jwFxIcdQhNxJIlFka8c1H48PF0y7TgJwaryAUzqSKXynONLw7MVciDJFVXTkCjbXSdxLSWpPIC50/xyy1rAf8aC7WuN/9cRNAvtFPC1IVAJaMeq1vf4mCqRrrxJQP6ZEcuAeHFzLe/LLovGWCd8rrs6BbBwJXCvAqXImvycQ_0_____Retail_Core -2a6137f3-75c0-4f26-8e3e-d83d802865a4_XK%f%CNC-J26%f%Q9-KF%f%HD2-FKT%f%HY-KD%f%72Y_119_X19-99606_hci78IRWDLBtdbnAIKLDgV9whYgtHc1uYyp9y6FszE9wZBD5Nc8CUD2pI2s2RRd3M04C4O7M3tisB3Ov/XVjpAbxlX3MWfUR5w4MH0AphbuQX0p5MuHEDYyfqlRgBBRzOKePF06qfYvPQMuEfDpKCKFwNojQxBV8O0Arf5zmrIw_0_OEM:NONSLP_PPIPro -e558417a-5123-4f6f-91e7-385c1c7ca9d4_YN%f%MGQ-8RY%f%V3-4P%f%GQ3-C8X%f%TP-7C%f%FBY_121_X19-98886_x9tPFDZmjZMf29zFeHV5SHbXj8Wd8YAcCn/0hbpLcId4D7OWqkQKXxXHIegRlwcWjtII0sZ6WYB0HQV2KH3LvYRnWKpJ5SxeOgdzBIJ6fhegYGGyiXsBv9sEb3/zidPU6ZK9LugVGAcRZ6HQOiXyOw+Yf5H35iM+2oDZXSpjvJw_0_____Retail_Education -c5198a66-e435-4432-89cf-ec777c9d0352_84%f%NGF-MHB%f%T6-FX%f%BX8-QWJ%f%K7-DR%f%R8H_122_X19-98892_jkL4YZkmBCJtvL1fT30ZPBcjmzshBSxjwrE0Q00AZ1hYnhrH+npzo1MPCT6ZRHw19ZLTz7wzyBb0qqcBVbtEjZW0Xs2MYLxgriyoONkhnPE6KSUJBw7C0enFVLHEqnVu/nkaOFfockN3bc+Eouw6W2lmHjklPHc9c6Clo04jul0_0_____Retail_EducationN -f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJ%f%B47-8PN%f%2T-MC%f%GDY-JTY%f%3D-CB%f%CPV_125_X23-50331_OPGhsyx+Ctw7w/KLMRNrY+fNBmKPjUG0R9RqkWk4e8ez+ExSJxSLLex5WhO5QSNgXLmEra+cCsN6C638aLjIdH2/L7D+8z/C6EDgRvbHMmidHg1lX3/O8lv0JudHkGtHJYewjorn/xXGY++vOCTQdZNk6qzEgmYSvPehKfdg8js_1_Volume:MAK_EnterpriseS_Ge -cce9d2de-98ee-4ce2-8113-222620c64a27_KC%f%NVH-YKW%f%X8-GJ%f%JB9-H9F%f%DT-6F%f%7W2_125_X22-66075_GCqWmJOsTVun9z4QkE9n2XqBvt3ZWSPl9QmIh9Q2mXMG/QVt2IE7S+ES/NWlyTSNjLVySr1D2sGjxgEzy9kLwn7VENQVJ736h1iOdMj/3rdqLMSpTa813+nPSQgKpqJ3uMuvIvRP0FdB7Y4qt8qf9kNKK25A1QknioD/6YubL/4_1_Volume:MAK_EnterpriseS_VB -d06934ee-5448-4fd1-964a-cd077618aa06_43%f%TBQ-NH9%f%2J-XK%f%TM7-KT3%f%KK-P3%f%9PB_125_X21-83233_EpB6qOCo8pRgO5kL4vxEHck2J1vxyd9OqvxUenDnYO9AkcGWat/D74ZcFg5SFlIya1U8l5zv+tsvZ4wAvQ1IaFW1PwOKJLOaGgejqZ41TIMdFGGw+G+s1RHsEnrWr3UOakTodby1aIMUMoqf3NdaM5aWFo8fOmqWC5/LnCoighs_0_OEM:NONSLP_EnterpriseS_RS5 -706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK%f%96Y-D9C%f%D8-W4%f%4CQ-R8Y%f%TK-DY%f%JWX_125_X21-05035_ntcKmazIvLpZOryft28gWBHu1nHSbR+Gp143f/BiVe+BD2UjHBZfSR1q405xmQZsygz6VRK6+zm8FPR++71pkmArgCLhodCQJ5I4m7rAJNw/YX99pILphi1yCRcvHsOTGa825GUVXgf530tHT6hr0HQ1lGeGgG1hPekpqqBbTlg_0_OEM:NONSLP_EnterpriseS_RS1 -faa57748-75c8-40a2-b851-71ce92aa8b45_FW%f%N7H-PF9%f%3Q-4G%f%GP8-M8R%f%F3-MD%f%WWW_125_X19-99617_Fe9CDClilrAmwwT7Yhfx67GafWRQEpwyj8R+a4eaTqbpPcAt7d1hv1rx8Sa9AzopEGxIrb7IhiPoDZs0XaT1HN0/olJJ/MnD73CfBP4sdQdLTsSJE3dKMWYTQHpnjqRaS/pNBYRr8l9Mv8yfcP8uS2MjIQ1cRTqRmC7WMpShyCg_0_OEM:NONSLP_EnterpriseS_TH -837766ff-61c5-427d-87c3-a2acbd44767a_XF%f%C77-XNR%f%XM-2Q%f%36W-FCM%f%9T-YH%f%DJ9_126_X23-50304_h6V6Q4DL/hlvcD3GyVxrVfP1BEL4a5TdyNCMlbq/OZnky/HowuRAcHMpN59fwqLS98+7WEDooWCrxriXcATwo0fwOGs/fEfP/Pa5SKP+Xnng1eoPm1PkjuZaqA8p2dPQv32wJ0u3QW7VMQM9BzzpyqtNAsqNS/wl7vfN7tyLbDo_1_Volume:MAK_EnterpriseSN_Ge -2c060131-0e43-4e01-adc1-cf5ad1100da8_RQ%f%FNW-9TP%f%M3-JQ%f%73T-QV4%f%VQ-DV%f%9PT_126_X22-66108_w/HFPDNCz4EogszDYZ8xUJh8aylfpgh6gzm9k8JSteprY5UumLc5n6KUwiSE3/5NaiI9gZ3xmTJq+g1OSPsdGwhuA+8LA2pQhA+wU8VO/ZaYxe1T4WF6oip/c0n6xA1sx/mWYNwd/WBDJpslTw5NRNLc5wWh0FV5RtxCaXE07lM_1_Volume:MAK_EnterpriseSN_VB -e8f74caa-03fb-4839-8bcc-2e442b317e53_M3%f%3WV-NHY%f%3C-R7%f%FPM-BQG%f%PT-23%f%9PG_126_X21-83264_Fl7tjifybEI9hArxMVFKqIqmI6mrCZy4EtJyVjpo2eSfeMTBli55+E0i2AaPfE2FJknUig7HuiNC1Pu2IWZcj5ShVFQEKPY6K//RucX8oPQfh0zK5r1aNJNvV4gMlqvOyGD8sXttLBZv8wg1w/++cNk/z38DE2shiDf7LYnK4w0_1_Volume:MAK_EnterpriseSN_RS5 -3d1022d8-969f-4222-b54b-327f5a5af4c9_2D%f%BW3-N2P%f%JG-MV%f%HW3-G7T%f%DK-9H%f%KR4_126_X21-04921_zLPNvcl1iqOefy0VLg+WZgNtRNhuGpn8+BFKjMqjaNOSKiuDcR6GNDS5FF1Aqk6/e6shJ+ohKzuwrnmYq3iNQ3I2MBlYjM5kuNfKs8Vl9dCjSpQr//GBGps6HtF2xrG/2g/yhtYC7FbtGDIE16uOeNKFcVg+XMb0qHE/5Etyfd8_0_Volume:MAK_EnterpriseSN_RS1 -60c243e1-f90b-4a1b-ba89-387294948fb6_NT%f%X6B-BRY%f%C2-K6%f%786-F6M%f%VQ-M7%f%V2X_126_X19-98770_kbXfe0z9Vi1S0yfxMWzI5+UtWsJKzxs7wLGUDLjrckFDn1bDQb4MvvuCK1w+Qrq33lemiGpNDspa+ehXiYEeSPFcCvUBpoMlGBFfzurNCHWiv3o1k3jBoawJr/VoDoVZfxhkps0fVoubf9oy6C6AgrkZ7PjCaS58edMcaUWvYYg_0_Volume:MAK_EnterpriseSN_TH -01eb852c-424d-4060-94b8-c10d799d7364_3X%f%P6D-CRN%f%D4-DR%f%YM2-GM8%f%4D-4G%f%G8Y_139_X23-37869_PVW0XnRJnsWYjTqxb6StCi2tge/uUwegjdiFaFUiZpwdJ620RK+MIAsSq5S+egXXzIWNntoy2fB6BO8F1wBFmxP/mm/3rn5C33jtF5QrbNqY7X9HMbqSiC7zhs4v4u2Xa4oZQx8JQkwr8Q2c/NgHrOJKKRASsSckhunxZ+WVEuM_1_____Retail_ProfessionalCountrySpecific_Zn -eb6d346f-1c60-4643-b960-40ec31596c45_DX%f%G7C-N36%f%C4-C4%f%HTG-X4T%f%3X-2Y%f%V77_161_X21-43626_MaVqTkRrGnOqYizl15whCOKWzx01+BZTVAalvEuHXM+WV55jnIfhWmd/u1GqCd5OplqXdU959zmipK2Iwgu2nw/g91nW//sQiN/cUcvg1Lxo6pC3gAo1AjTpHmGIIf9XlZMYlD+Vl6gXsi/Auwh3yrSSFh5s7gOczZoDTqQwHXA_0_____Retail_ProfessionalWorkstation -89e87510-ba92-45f6-8329-3afa905e3e83_WY%f%PNQ-8C4%f%67-V2%f%W6J-TX4%f%WX-WT%f%2RQ_162_X21-43644_JVGQowLiCcPtGY9ndbBDV+rTu/q5ljmQTwQWZgBIQsrAeQjLD8jLEk/qse7riZ7tMT6PKFVNXeWqF7PhLAmACbE8O3Lvp65XMd/Oml9Daynj5/4n7unsffFHIHH8TGyO5j7xb4dkFNqC5TX3P8/1gQEkTIdZEOTQQXFu0L2SP5c_0_____Retail_ProfessionalWorkstationN -62f0c100-9c53-4e02-b886-a3528ddfe7f6_8P%f%TT6-RNW%f%4C-6V%f%7J2-C2D%f%3X-MH%f%BPB_164_X21-04955_CEDgxI8f/fxMBiwmeXw5Of55DG32sbGALzHihXkdbYTDaE3pY37oAA4zwGHALzAFN/t254QImGPYR6hATgl+Cp804f7serJqiLeXY965Zy67I4CKIMBm49lzHLFJeDnVTjDB0wVyN29pvgO3+HLhZ22KYCpkRHFFMy2OKxS68Yc_0_____Retail_ProfessionalEducation -13a38698-4a49-4b9e-8e83-98fe51110953_GJ%f%TYN-HDM%f%QY-FR%f%R76-HVG%f%C7-QP%f%F8P_165_X21-04956_r35zp9OfxKSBcTxKWon3zFtbOiCufAPo6xRGY5DJqCRFKdB0jgZalNQitvjmaZ/Rlez2vjRJnEart4LrvyW4d9rrukAjR3+c3UkeTKwoD3qBl9AdRJbXCa2BdsoXJs1WVS4w4LuVzpB/SZDuggZt0F2DlMB427F5aflook/n1pY_0_____Retail_ProfessionalEducationN -df96023b-dcd9-4be2-afa0-c6c871159ebe_NJ%f%CF7-PW8%f%QT-33%f%24D-688%f%JX-2Y%f%V66_175_X21-41295_rVpetYUmiRB48YJfCvJHiaZapJ0bO8gQDRoql+rq5IobiSRu//efV1VXqVpBkwILQRKgKIVONSTUF5y2TSxlDLbDSPKp7UHfbz17g6vRKLwOameYEz0ZcK3NTbApN/cMljHvvF/mBag1+sHjWu+eoFzk8H89k9nw8LMeVOPJRDc_0_____Retail_ServerRdsh -d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3%f%WVW-N2P%f%V2-CG%f%WC3-34Q%f%GF-VM%f%J2C_178_X21-32983_Xzme9hDZR6H0Yx0deURVdE6LiTOkVqWng5W/OTbkxRc0rq+mSYpo/f/yqhtwYlrkBPWx16Yok5Bvcb34vbKHvEAtxfYp4te20uexLzVOtBcoeEozARv4W/6MhYfl+llZtR5efsktj4N4/G4sVbuGvZ9nzNfQO9TwV6NGgGEj2Ec_0_____Retail_Cloud -af5c9381-9240-417d-8d35-eb40cd03e484_NH%f%9J3-68W%f%K7-6F%f%B93-4K3%f%DF-DJ%f%4F6_179_X21-32987_QGRDZOU/VZhYLOSdp2xDnFs8HInNZctcQlWCIrORVnxTQr55IJwN4vK3PJHjkfRLQ/bgUrcEIhyFbANqZFUq8yD1YNubb2bjNORgI/m8u85O9V7nDGtxzO/viEBSWyEHnrzLKKWYqkRQKbbSW3ungaZR0Ti5O2mAUI4HzAFej50_0_____Retail_CloudN -8ab9bdd1-1f67-4997-82d9-8878520837d9_XQ%f%QYW-NFF%f%MW-XJ%f%PBH-K87%f%32-CK%f%FFD_188_X21-99378_djy0od0uuKd2rrIl+V1/2+MeRltNgW7FEeTNQsPMkVSL75NBphgoso4uS0JPv2D7Y1iEEvmVq6G842Kyt52QOwXgFWmP/IQ6Sq1dr+fHK/4Et7bEPrrGBEZoCfWqk0kdcZRPBij2KN6qCRWhrk1hX2g+U40smx/EYCLGh9HCi24_0_____OEM:DM_IoTEnterprise -ed655016-a9e8-4434-95d9-4345352c2552_QP%f%M6N-7J2%f%WJ-P8%f%8HH-P3Y%f%RH-YY%f%74H_191_X21-99682_qHs/PzfhYWdtSys2edzcz4h+Qs8aDqb8BIiQ/mJ/+0uyoJh1fitbRCIgiFh2WAGZXjdgB8hZeheNwHibd8ChXaXg4u+0XlOdFlaDTgTXblji8fjETzDBk9aGkeMCvyVXRuUYhTSdp83IqGHz7XuLwN2p/6AUArx9JZCoLGV8j3w_0_OEM:NONSLP_IoTEnterpriseS_VB -6c4de1b8-24bb-4c17-9a77-7b939414c298_CG%f%K42-GYN%f%6Y-VD%f%22B-BX9%f%8W-J8%f%JXD_191_X23-12617_J/fpIRynsVQXbp4qZNKp6RvOgZ/P2klILUKQguMlcwrBZybwNkHg/kM5LNOF/aDzEktbPnLnX40GEvKkYT6/qP4cMhn/SOY0/hYOkIdR34ilzNlVNq5xP7CMjCjaUYJe+6ydHPK6FpOuEoWOYYP5BZENKNGyBy4w4shkMAw19mA_0_OEM:NONSLP_IoTEnterpriseS_Ge -d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9%f%VKN-3BG%f%WV-Y6%f%24W-MCR%f%MQ-BH%f%DCD_202_X22-53884_kyoNx2s93U6OUSklB1xn+GXcwCJO1QTEtACYnChi8aXSoxGQ6H2xHfUdHVCwUA1OR0UeNcRrMmOzZBOEUBtdoGWSYPg9AMjvxlxq9JOzYAH+G6lT0UbCWgMSGGrqdcIfmshyEak3aUmsZK6l+uIAFCCZZ/HbbCRkkHC5rWKstMI_0_____Retail_CloudEditionN -92fb8726-92a8-4ffc-94ce-f82e07444653_KY%f%7PN-VR6%f%RX-83%f%W6Y-6DD%f%YQ-T6%f%R4W_203_X22-53847_gD6HnT4jP4rcNu9u83gvDiQq1xs7QSujcDbo60Di5iSVa9/ihZ7nlhnA0eDEZfnoDXriRiPPqc09T6AhSnFxLYitAkOuPJqL5UMobIrab9dwTKlowqFolxoHhLOO4V92Hsvn/9JLy7rEzoiAWHhX/0cpMr3FCzVYPeUW1OyLT1A_0_____Retail_CloudEdition -5a85300a-bfce-474f-ac07-a30983e3fb90_N9%f%79K-XWD%f%77-YW%f%3GB-HBG%f%H6-D3%f%2MH_205_X23-15042_blZopkUuayCTgZKH4bOFiisH9GTAHG5/js6UX/qcMWWc3sWNxKSX1OLp1k3h8Xx1cFuvfG/fNAw/I83ssEtPY+A0Gx1JF4QpRqsGOqJ5ruQ2tGW56CJcCVHkB+i46nJAD759gYmy3pEYMQbmpWbhLx3MJ6kvwxKfU+0VCio8k50_0_____OEM:DM_IoTEnterpriseSK -80083eae-7031-4394-9e88-4901973d56fe_P8%f%Q7T-WNK%f%7X-PM%f%FXY-VXH%f%BG-RR%f%K69_206_X23-62084_habUJ0hhAG0P8iIKaRQ74/wZQHyAdFlwHmrejNjOSRG08JeqilJlTM6V8G9UERLJ92/uMDVHIVOPXfN8Zdh8JuYO8oflPnqymIRmff/pU+Gpb871jV2JDA4Cft5gmn+ictKoN4VoSfEZRR+R5hzF2FsoCExDNNw6gLdjtiX94uA_0_____OEM:DM_IoTEnterpriseK +8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8H%f%V2C___4_X19-99683_HGNKjkKcKQHO6n8srMUrDh/MElffBZarLqCMD9rWtgFKf3YzYOLDPEMGhuO/auNMKCeiU7ebFbQALS/MyZ7TvidMQ2dvzXeXXKzPBjfwQx549WJUU7qAQ9Txg9cR9SAT8b12Pry2iBk+nZWD9VtHK3kOnEYkvp5WTCTsrSi6Re4_0_OEM:NONSLP_Enterprise +c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QP%f%FCT__27_X19-98746_NHn2n0N1UfVf00CfaI5LCDMDsKdVAWpD/HAfUrcTAKsw9d2Sks4h5MhyH/WUx+B6dFi8ol7D3AHorR8y9dqVS1Bd2FdZNJl/tTR1PGwYn6KL88NS19aHmFNdX8s4438vaa+Ty8Qk8EDcwm/wscC8lQmi3/RgUKYdyGFvpbGSVlk_0_Volume:MAK_EnterpriseN +4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T__48_X19-98841_Yl/jNfxJ1SnaIZCIZ4m6Pf3ySNoQXifNeqfltNaNctx+onwiivOx7qcSn8dFtURzgMzSOFnsRQzb5IrvuqHoxWWl1S3JIQn56FvKsvSx7aFXIX3+2Q98G1amPV/WEQ0uHA5d7Ya6An+g0Z0zRP7evGoomTs4YuweaWiZQjQzSpA_0_____Retail_Professional +9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PK%f%CKT__49_X19-98859_Ge0mRQbW8ALk7T09V+1k1yg66qoS0lhkgPIROOIOgxKmWPAvsiLAYPKDqM4+neFCA/qf1dHFmdh0VUrwFBPYsK251UeWuElj4bZFVISL6gUt1eZwbGfv5eurQ0i+qZiFv+CcQOEFsd5DD4Up6xPLLQS3nAXODL5rSrn2sHRoCVY_0_____Retail_ProfessionalN +f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WX%f%CHW__98_X19-98877_vel4ytVtnE8FhvN87Cflz9sbh5QwHD1YGOeej9QP7hF3vlBR4EX2/S/09gRneeXVbQnjDOCd2KFMKRUWHLM7ZhFBk8AtlG+kvUawPZ+CIrwrD3mhi7NMv8UX/xkLK3HnBupMEuEwsMJgCUD8Pn6om1mEiQebHBAqu4cT7GN9Y0g_0_____Retail_CoreN +1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8T%f%YMD__99_X19-99652_Nv17eUTrr1TmUX6frlI7V69VR6yWb7alppCFJPcdjfI+xX4/Cf2np3zm7jmC+zxFb9nELUs477/ydw2KCCXFfM53bKpBQZKHE5+MdGJGxebOCcOtJ3hrkDJtwlVxTQmUgk5xnlmpk8PHg82M2uM5B7UsGLxGKK4d3hi0voSyKeI_0_____Retail_CoreCountrySpecific +3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F%f%4BT_100_X19-99661_FV2Eao/R5v8sGrfQeOjQ4daokVlNOlqRCDZXuaC45bQd5PsNU3t1b4AwWeYM8TAwbHauzr4tPG0UlsUqUikCZHy0poROx35bBBMBym6Zbm9wDBVyi7nCzBtwS86eOonQ3cU6WfZxhZRze0POdR33G3QTNPrnVIM2gf6nZJYqDOA_0_____Retail_CoreSingleLanguage +2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8H%f%VX7_101_X19-98868_GH/jwFxIcdQhNxJIlFka8c1H48PF0y7TgJwaryAUzqSKXynONLw7MVciDJFVXTkCjbXSdxLSWpPIC50/xyy1rAf8aC7WuN/9cRNAvtFPC1IVAJaMeq1vf4mCqRrrxJQP6ZEcuAeHFzLe/LLovGWCd8rrs6BbBwJXCvAqXImvycQ_0_____Retail_Core +2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD%f%72Y_119_X19-99606_hci78IRWDLBtdbnAIKLDgV9whYgtHc1uYyp9y6FszE9wZBD5Nc8CUD2pI2s2RRd3M04C4O7M3tisB3Ov/XVjpAbxlX3MWfUR5w4MH0AphbuQX0p5MuHEDYyfqlRgBBRzOKePF06qfYvPQMuEfDpKCKFwNojQxBV8O0Arf5zmrIw_0_OEM:NONSLP_PPIPro +e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7C%f%FBY_121_X19-98886_x9tPFDZmjZMf29zFeHV5SHbXj8Wd8YAcCn/0hbpLcId4D7OWqkQKXxXHIegRlwcWjtII0sZ6WYB0HQV2KH3LvYRnWKpJ5SxeOgdzBIJ6fhegYGGyiXsBv9sEb3/zidPU6ZK9LugVGAcRZ6HQOiXyOw+Yf5H35iM+2oDZXSpjvJw_0_____Retail_Education +c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DR%f%R8H_122_X19-98892_jkL4YZkmBCJtvL1fT30ZPBcjmzshBSxjwrE0Q00AZ1hYnhrH+npzo1MPCT6ZRHw19ZLTz7wzyBb0qqcBVbtEjZW0Xs2MYLxgriyoONkhnPE6KSUJBw7C0enFVLHEqnVu/nkaOFfockN3bc+Eouw6W2lmHjklPHc9c6Clo04jul0_0_____Retail_EducationN +f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJB47-8PN2T-MCGDY-JTY3D-CB%f%CPV_125_X23-50331_OPGhsyx+Ctw7w/KLMRNrY+fNBmKPjUG0R9RqkWk4e8ez+ExSJxSLLex5WhO5QSNgXLmEra+cCsN6C638aLjIdH2/L7D+8z/C6EDgRvbHMmidHg1lX3/O8lv0JudHkGtHJYewjorn/xXGY++vOCTQdZNk6qzEgmYSvPehKfdg8js_1_Volume:MAK_EnterpriseS_Ge +cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F%f%7W2_125_X22-66075_GCqWmJOsTVun9z4QkE9n2XqBvt3ZWSPl9QmIh9Q2mXMG/QVt2IE7S+ES/NWlyTSNjLVySr1D2sGjxgEzy9kLwn7VENQVJ736h1iOdMj/3rdqLMSpTa813+nPSQgKpqJ3uMuvIvRP0FdB7Y4qt8qf9kNKK25A1QknioD/6YubL/4_1_Volume:MAK_EnterpriseS_VB +d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P3%f%9PB_125_X21-83233_EpB6qOCo8pRgO5kL4vxEHck2J1vxyd9OqvxUenDnYO9AkcGWat/D74ZcFg5SFlIya1U8l5zv+tsvZ4wAvQ1IaFW1PwOKJLOaGgejqZ41TIMdFGGw+G+s1RHsEnrWr3UOakTodby1aIMUMoqf3NdaM5aWFo8fOmqWC5/LnCoighs_0_OEM:NONSLP_EnterpriseS_RS5 +706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DY%f%JWX_125_X21-05035_ntcKmazIvLpZOryft28gWBHu1nHSbR+Gp143f/BiVe+BD2UjHBZfSR1q405xmQZsygz6VRK6+zm8FPR++71pkmArgCLhodCQJ5I4m7rAJNw/YX99pILphi1yCRcvHsOTGa825GUVXgf530tHT6hr0HQ1lGeGgG1hPekpqqBbTlg_0_OEM:NONSLP_EnterpriseS_RS1 +faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MD%f%WWW_125_X19-99617_Fe9CDClilrAmwwT7Yhfx67GafWRQEpwyj8R+a4eaTqbpPcAt7d1hv1rx8Sa9AzopEGxIrb7IhiPoDZs0XaT1HN0/olJJ/MnD73CfBP4sdQdLTsSJE3dKMWYTQHpnjqRaS/pNBYRr8l9Mv8yfcP8uS2MjIQ1cRTqRmC7WMpShyCg_0_OEM:NONSLP_EnterpriseS_TH +3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9H%f%KR4_126_X21-04921_zLPNvcl1iqOefy0VLg+WZgNtRNhuGpn8+BFKjMqjaNOSKiuDcR6GNDS5FF1Aqk6/e6shJ+ohKzuwrnmYq3iNQ3I2MBlYjM5kuNfKs8Vl9dCjSpQr//GBGps6HtF2xrG/2g/yhtYC7FbtGDIE16uOeNKFcVg+XMb0qHE/5Etyfd8_0_Volume:MAK_EnterpriseSN_RS1 +60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7%f%V2X_126_X19-98770_kbXfe0z9Vi1S0yfxMWzI5+UtWsJKzxs7wLGUDLjrckFDn1bDQb4MvvuCK1w+Qrq33lemiGpNDspa+ehXiYEeSPFcCvUBpoMlGBFfzurNCHWiv3o1k3jBoawJr/VoDoVZfxhkps0fVoubf9oy6C6AgrkZ7PjCaS58edMcaUWvYYg_0_Volume:MAK_EnterpriseSN_TH +01eb852c-424d-4060-94b8-c10d799d7364_3XP6D-CRND4-DRYM2-GM84D-4G%f%G8Y_139_X23-37869_PVW0XnRJnsWYjTqxb6StCi2tge/uUwegjdiFaFUiZpwdJ620RK+MIAsSq5S+egXXzIWNntoy2fB6BO8F1wBFmxP/mm/3rn5C33jtF5QrbNqY7X9HMbqSiC7zhs4v4u2Xa4oZQx8JQkwr8Q2c/NgHrOJKKRASsSckhunxZ+WVEuM_1_____Retail_ProfessionalCountrySpecific_Zn +eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2Y%f%V77_161_X21-43626_MaVqTkRrGnOqYizl15whCOKWzx01+BZTVAalvEuHXM+WV55jnIfhWmd/u1GqCd5OplqXdU959zmipK2Iwgu2nw/g91nW//sQiN/cUcvg1Lxo6pC3gAo1AjTpHmGIIf9XlZMYlD+Vl6gXsi/Auwh3yrSSFh5s7gOczZoDTqQwHXA_0_____Retail_ProfessionalWorkstation +89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT%f%2RQ_162_X21-43644_JVGQowLiCcPtGY9ndbBDV+rTu/q5ljmQTwQWZgBIQsrAeQjLD8jLEk/qse7riZ7tMT6PKFVNXeWqF7PhLAmACbE8O3Lvp65XMd/Oml9Daynj5/4n7unsffFHIHH8TGyO5j7xb4dkFNqC5TX3P8/1gQEkTIdZEOTQQXFu0L2SP5c_0_____Retail_ProfessionalWorkstationN +62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MH%f%BPB_164_X21-04955_CEDgxI8f/fxMBiwmeXw5Of55DG32sbGALzHihXkdbYTDaE3pY37oAA4zwGHALzAFN/t254QImGPYR6hATgl+Cp804f7serJqiLeXY965Zy67I4CKIMBm49lzHLFJeDnVTjDB0wVyN29pvgO3+HLhZ22KYCpkRHFFMy2OKxS68Yc_0_____Retail_ProfessionalEducation +13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QP%f%F8P_165_X21-04956_r35zp9OfxKSBcTxKWon3zFtbOiCufAPo6xRGY5DJqCRFKdB0jgZalNQitvjmaZ/Rlez2vjRJnEart4LrvyW4d9rrukAjR3+c3UkeTKwoD3qBl9AdRJbXCa2BdsoXJs1WVS4w4LuVzpB/SZDuggZt0F2DlMB427F5aflook/n1pY_0_____Retail_ProfessionalEducationN +df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2Y%f%V66_175_X21-41295_rVpetYUmiRB48YJfCvJHiaZapJ0bO8gQDRoql+rq5IobiSRu//efV1VXqVpBkwILQRKgKIVONSTUF5y2TSxlDLbDSPKp7UHfbz17g6vRKLwOameYEz0ZcK3NTbApN/cMljHvvF/mBag1+sHjWu+eoFzk8H89k9nw8LMeVOPJRDc_0_____Retail_ServerRdsh +d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VM%f%J2C_178_X21-32983_Xzme9hDZR6H0Yx0deURVdE6LiTOkVqWng5W/OTbkxRc0rq+mSYpo/f/yqhtwYlrkBPWx16Yok5Bvcb34vbKHvEAtxfYp4te20uexLzVOtBcoeEozARv4W/6MhYfl+llZtR5efsktj4N4/G4sVbuGvZ9nzNfQO9TwV6NGgGEj2Ec_0_____Retail_Cloud +af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ%f%4F6_179_X21-32987_QGRDZOU/VZhYLOSdp2xDnFs8HInNZctcQlWCIrORVnxTQr55IJwN4vK3PJHjkfRLQ/bgUrcEIhyFbANqZFUq8yD1YNubb2bjNORgI/m8u85O9V7nDGtxzO/viEBSWyEHnrzLKKWYqkRQKbbSW3ungaZR0Ti5O2mAUI4HzAFej50_0_____Retail_CloudN +8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CK%f%FFD_188_X21-99378_djy0od0uuKd2rrIl+V1/2+MeRltNgW7FEeTNQsPMkVSL75NBphgoso4uS0JPv2D7Y1iEEvmVq6G842Kyt52QOwXgFWmP/IQ6Sq1dr+fHK/4Et7bEPrrGBEZoCfWqk0kdcZRPBij2KN6qCRWhrk1hX2g+U40smx/EYCLGh9HCi24_0_____OEM:DM_IoTEnterprise +ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY%f%74H_191_X21-99682_qHs/PzfhYWdtSys2edzcz4h+Qs8aDqb8BIiQ/mJ/+0uyoJh1fitbRCIgiFh2WAGZXjdgB8hZeheNwHibd8ChXaXg4u+0XlOdFlaDTgTXblji8fjETzDBk9aGkeMCvyVXRuUYhTSdp83IqGHz7XuLwN2p/6AUArx9JZCoLGV8j3w_0_OEM:NONSLP_IoTEnterpriseS_VB +6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8%f%JXD_191_X23-12617_J/fpIRynsVQXbp4qZNKp6RvOgZ/P2klILUKQguMlcwrBZybwNkHg/kM5LNOF/aDzEktbPnLnX40GEvKkYT6/qP4cMhn/SOY0/hYOkIdR34ilzNlVNq5xP7CMjCjaUYJe+6ydHPK6FpOuEoWOYYP5BZENKNGyBy4w4shkMAw19mA_0_OEM:NONSLP_IoTEnterpriseS_Ge +d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BH%f%DCD_202_X22-53884_kyoNx2s93U6OUSklB1xn+GXcwCJO1QTEtACYnChi8aXSoxGQ6H2xHfUdHVCwUA1OR0UeNcRrMmOzZBOEUBtdoGWSYPg9AMjvxlxq9JOzYAH+G6lT0UbCWgMSGGrqdcIfmshyEak3aUmsZK6l+uIAFCCZZ/HbbCRkkHC5rWKstMI_0_____Retail_CloudEditionN +92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6%f%R4W_203_X22-53847_gD6HnT4jP4rcNu9u83gvDiQq1xs7QSujcDbo60Di5iSVa9/ihZ7nlhnA0eDEZfnoDXriRiPPqc09T6AhSnFxLYitAkOuPJqL5UMobIrab9dwTKlowqFolxoHhLOO4V92Hsvn/9JLy7rEzoiAWHhX/0cpMr3FCzVYPeUW1OyLT1A_0_____Retail_CloudEdition +5a85300a-bfce-474f-ac07-a30983e3fb90_N979K-XWD77-YW3GB-HBGH6-D3%f%2MH_205_X23-15042_blZopkUuayCTgZKH4bOFiisH9GTAHG5/js6UX/qcMWWc3sWNxKSX1OLp1k3h8Xx1cFuvfG/fNAw/I83ssEtPY+A0Gx1JF4QpRqsGOqJ5ruQ2tGW56CJcCVHkB+i46nJAD759gYmy3pEYMQbmpWbhLx3MJ6kvwxKfU+0VCio8k50_0_____OEM:DM_IoTEnterpriseSK +80083eae-7031-4394-9e88-4901973d56fe_P8Q7T-WNK7X-PMFXY-VXHBG-RR%f%K69_206_X23-62084_habUJ0hhAG0P8iIKaRQ74/wZQHyAdFlwHmrejNjOSRG08JeqilJlTM6V8G9UERLJ92/uMDVHIVOPXfN8Zdh8JuYO8oflPnqymIRmff/pU+Gpb871jV2JDA4Cft5gmn+ictKoN4VoSfEZRR+R5hzF2FsoCExDNNw6gLdjtiX94uA_0_____OEM:DM_IoTEnterpriseK ) do ( for /f "tokens=1-9 delims=_" %%A in ("%%#") do ( REM Detect key if %1==key if %osSKU%==%%C if not defined key ( -set skufound=1 -echo "!applist! !altapplist!" | find /i "%%A" %nul1% && ( +echo "!allapps! !altapplist!" | find /i "%%A" %nul1% && ( if %%F==1 set notworking=1 set key=%%B ) @@ -1339,15 +1703,15 @@ set notfoundaltactID= if %_NoEditionChange%==1 exit /b 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-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 -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 +125_EnterpriseS-2021_______________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY%f%74H_IoTEnterpriseS-2021 +125_EnterpriseS-2024_______________f6e29426-a256-4316-88bf-cc5b0f95ec0c_6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8%f%JXD_IoTEnterpriseS-2024 +138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional +139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional +139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V%f%66T_Professional ) do ( for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( -echo "!applist! !altapplist!" | find /i "%%C" %nul1% && ( -echo "!applist!" | find /i "%%D" %nul1% && ( +echo "!allapps! !altapplist!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( set altkey=%%E set altedition=%%F ) || ( diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 80beb9f..962a146 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 :: ::============================================================================ @@ -24,32 +21,41 @@ set _rem=0 :: To disable changing edition if current edition doesn't support KMS38 activation, change the value to 1 from 0 or run the script with "/KMS38-NoEditionChange" parameter set _NoEditionChange=0 +:: To run the script in debug mode, change 0 to "/KMS38" in below line +set "_debug=0" + :: If value is changed in above lines or parameter is used then script will run in unattended mode ::======================================================================================================================================== -:: 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 1>nul -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" @@ -66,6 +72,33 @@ exit /b ::======================================================================================================================================== +:: Debug code + +if "%_debug%" EQU "0" ( +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" +goto :_debug +) + +set "nul1=" +set "nul2=" +set "nul6=" +set "nul=" + +@echo on +@prompt $G +@call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" +@echo off +@exit /b + +:_debug + +::======================================================================================================================================== + set "blank=" set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" @@ -77,10 +110,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -89,9 +122,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: -ping 127.0.0.1 -n 6 >nul +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -122,69 +159,26 @@ for %%A in (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended= ::======================================================================================================================================== -set "nul1=1>nul" -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 _k38= -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." -) - +call :dk_setvar set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f" -::======================================================================================================================================== - if %winbuild% LSS 14393 ( %eline% echo Unsupported OS version detected [%winbuild%]. -echo KMS38 Activation is supported for Windows 10/11/Server, build 14393 and later. -goto dk_done +echo KMS38 activation is only supported on Windows 10/11/Server, build 14393 and later. +echo: +if %winbuild% LSS 10240 ( +call :dk_color %Blue% "Use Online KMS activation option." +) else ( +call :dk_color %Blue% "Use HWID activation option." ) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -193,6 +187,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -203,8 +198,8 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( 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 The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. goto dk_done @@ -213,31 +208,83 @@ goto dk_done ::======================================================================================================================================== +:: 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 dk_done +) + +::======================================================================================================================================== + :: 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'. +echo Right click on this script and select 'Run as administrator'. 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 +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) + +:: Check if script is running in Terminal app -if %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) +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); -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 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 @@ -246,20 +293,20 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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) @@ -275,14 +322,14 @@ if %_rem%==1 goto :k_uninstall if %_unattended%==0 ( cls -mode 76, 25 +if not defined terminal mode 76, 25 title KMS38 Activation %masver% echo: echo: echo: echo: -echo ____________________________________________________________ +echo: ______________________________________________________ echo: echo [1] KMS38 Activation echo ____________________________________________ @@ -290,9 +337,9 @@ echo: echo [2] Remove KM38 Protection echo: echo [0] %_exitmsg% -echo ____________________________________________________________ +echo: ______________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b @@ -306,40 +353,38 @@ goto :k_menu :k_menu2 cls +if not defined terminal ( mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) title KMS38 Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%SysPath%\clipup.exe" set a_cor=1 +if not exist %SysPath%\sppsvc.exe (set _fmiss=sppsvc.exe) +if not exist %SysPath%\ClipUp.exe if not defined a_cor (set _fmiss=%_fmiss%ClipUp.exe) -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +if defined _fmiss ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode -echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. +echo [%_fmiss%] file is missing, aborting... echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -:: Show info for potential script stuck scenario - -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -350,12 +395,12 @@ if defined _perm ( cls echo ___________________________________________________________________________________________ echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." +call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate Anyway [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -378,13 +423,12 @@ echo [%winos% ^| %winbuild%] if defined _evalserv ( echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: -echo In MAS, goto Extras and use 'Change Edition' option. +call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% +echo Evaluation editions cannot be activated outside of their evaluation period. echo: -echo Download it from here, -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) goto dk_done ) @@ -394,29 +438,28 @@ goto dk_done :: Check clipup.exe for the detection and activation of server cor and acor editions -set a_cor= -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%systemroot%\System32\clipup.exe" set a_cor=1 - if defined a_cor ( if not exist "!_work!\clipup.exe" ( %eline% -echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] version. -echo It's required for KMS38 Activation. -echo Check below page on how to activate it. -echo %mas%kms38.html +echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] versions. +echo The file is required for KMS38 activation. +echo Check the below page for instructions on how to activate it. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" goto dk_done ) ) -::======================================================================================================================================== +:: Check file signature -call :dk_checksku - -if not defined osSKU ( +if defined a_cor ( +%psc% "if (-not (Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').IsOSBinary) {Exit 3}" %nul% +if !errorlevel!==3 ( %eline% -echo SKU value was not detected properly. Aborting... +echo Valid digital signature not found in clipup.exe file. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) +) ::======================================================================================================================================== @@ -424,24 +467,7 @@ set error= cls 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 "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 - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] -) +call :dk_showosinfo ::======================================================================================================================================== @@ -460,47 +486,48 @@ call :dk_errorcheck :: Check if GVLK (KMS key) is already installed or not -set _gvlk= -call :dk_channel -if /i "Volume:GVLK"=="%_channel%" set _gvlk=1 +call :k_channel :: Detect Key set key= set pkey= set altkey= -set skufound= set changekey= set altedition= -call :kms38data getkey -if not defined key call :dk_gvlk %nul% -if defined applist if not defined key call :kms38fallback +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :kms38data key +if not defined key call :k_gvlk %nul% +if defined allapps if not defined key call :kms38fallback 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." +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR %nul6%') do if not errorlevel 1 set /a UBR=%%b +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( +call :dk_color %Blue% "Windows must be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." ) ) 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]" ) if not defined key if not defined _gvlk ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skufound ( -echo Unable to find this product in the supported product list. +if not defined skunotfound ( +echo This product does not support KMS38 activation. +echo Make sure you are using the latest version of the script. +set fixes=%fixes% %mas% +echo %mas% ) else ( -echo Required License files not installed. +echo Required license files were not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -echo Make sure you are using updated version of the script. -echo %mas% echo: goto dk_done ) @@ -511,37 +538,24 @@ goto dk_done echo: if defined changekey ( -call :dk_color %Blue% "[%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: +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription edition [SKU ID-%slcSKU%] found. Script will activate the base edition [SKU ID-%regSKU%]." echo: ) set _partial= 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 %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='+$_)}" %nul6%') do set "_partial=%%#" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null AND LicenseDependsOn is NULL" Get PartialProductKey /value %nul6%') do set "_partial=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#" call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK] ) -set error_code= if defined key ( -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!]" - -if !error_code! EQU 0 ( -call :dk_refresh -echo Installing KMS Client Setup Key [%key%] [Successful] -) else ( -call :dk_color %Red% "Installing KMS Client Setup Key [%key%] [Failed] !error_code!" -if not defined error ( -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 -) -set error=1 -) +call :dk_inskey "[%key%]" ) ::======================================================================================================================================== @@ -549,12 +563,13 @@ set error=1 :: Check activation ID for setting specific KMS host 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" %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='+$_)}" %nul6%') do call set "app=%%a" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is 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 %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).ID | %% {echo ('ID='+$_)}" %nul6%') do call set "app=%%a" if not defined app ( call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..." -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -568,7 +583,7 @@ echo: %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1])" %nul% reg delete "HKLM\%specific_kms%" /f ) @@ -607,12 +622,6 @@ goto :k_final :: 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) -if not exist %SystemRoot%\system32\ClipUp.exe ( -call :dk_color %Red% "Checking ClipUp.exe File [Not found, aborting the process]" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -goto :k_final -) - set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" if not exist "%tdir%\" md "%tdir%\" %nul% @@ -622,7 +631,7 @@ if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q :: 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;" -:: Check mass grave[.]dev/kms38.html#Manual_Activation to see how it's generated +:: Check mass grave [.] dev/kms38#manual-activation to see how it's generated set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA=" set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA" @@ -631,7 +640,7 @@ set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAV copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting the process]" +call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting...]" if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :k_final ) else ( @@ -642,7 +651,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" :: Stop sppsvc -%psc% Stop-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" sc query sppsvc | find /i "STOPPED" %nul% && ( echo Stopping sppsvc Service [Successful] @@ -651,14 +660,14 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" ) %_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) @@ -685,7 +694,7 @@ set rebuildinfo=1 call :dk_color %Red% "Checking Ticket Migration [Failed]" ) -if defined applist if not defined showfix if defined rebuildinfo ( +if not defined showfix if defined rebuildinfo ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" ) @@ -708,8 +717,8 @@ goto :k_final :: Clear 180 Days KMS Activation lock with Windows SKU specific rearm and without the need to restart the system -if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where ID='%app%' call ReArmsku %nul% -if %_wmic% EQU 0 %psc% "$null=([WMI]'SoftwareLicensingProduct=''%app%''').ReArmsku()" %nul% +if %_wmic% EQU 1 wmic path %spp% where ID='%app%' call ReArmsku %nul% +if %_wmic% EQU 0 %psc% "$null=([WMI]'%spp%=''%app%''').ReArmsku()" %nul% if %errorlevel%==0 ( echo Applying SKU-ID Rearm [Successful] @@ -727,34 +736,35 @@ goto :k_final call :dk_color %Red% "Activation Failed" if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ::======================================================================================================================================== :k_final -:: Remove the added Specific KMS Host (Local Host) if activation is not completed +:: Remove the specific KMS host (LocalHost) added by the script if activation is not completed echo: if not defined _k38 ( %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -call :dk_color %Red% "Removing The Added Specific KMS Host [Failed]" +call :dk_color %Red% "Removing the Added Specific KMS Host [Failed]" ) || ( -echo Removing The Added Specific KMS Host [Successful] +echo Removing the Added Specific KMS Host [Successful] ) ) :: Protect KMS38 if opted by the user and conditions are correct 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 query "HKLM\%specific_kms%" && ( -echo Protect KMS38 From KMS [Successful] [Locked A Registry Key] +echo Protect KMS38 From KMS [Successful] [Locked a Registry Key] ) || ( -call :dk_color %Red% "Protect KMS38 From KMS [Failed To Lock A Registry Key]" +call :dk_color %Red% "Protect KMS38 From KMS [Failed to Lock a Registry Key]" ) ) @@ -764,16 +774,21 @@ if defined a_cor if exist "%_clipup%" del /f /q "%_clipup%" %nul% if defined a_cor ( if exist "%_clipup%" ( -call :dk_color %Red% "Deleting copied clipup.exe file [Failed]" +call :dk_color %Red% "Deleting Copied clipup.exe File [Failed]" ) else ( -echo Deleting copied clipup.exe file [Successful] +echo Deleting Copied clipup.exe File [Successful] ) ) -for %%# in (175 407) do if %osSKU%==%%# ( +for %%# in (407) do if %osSKU%==%%# ( call :dk_color %Red% "%winos% does not support activation on non-azure platforms." ) +:: Trigger reevaluation of SPP's Scheduled Tasks + +if defined _k38 ( +call :dk_reeval %nul% +) goto :dk_done ::======================================================================================================================================== @@ -781,14 +796,14 @@ goto :dk_done :k_uninstall cls -mode 99, 28 +if not defined terminal mode 99, 28 title Remove KMS38 Protection %masver% %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1])" %nul% reg delete "HKLM\%specific_kms%" /f ) @@ -833,31 +848,123 @@ $key.SetAccessControl($acl) ::======================================================================================================================================== +:: 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 + +:: Show OS info + +:dk_showosinfo + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) +) + +echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] +exit /b + :: Check SKU value :dk_checksku +call :dk_reflection + set osSKU= set slcSKU= set wmiSKU= set regSKU= +set winsub= if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); 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) +set slcSKU=%slcSKU: =% if "%slcSKU%"=="0" set slcSKU= -if 1%slcSKU% NEQ +1%slcSKU% set slcSKU= +for /f "tokens=* delims=0123456789" %%a in ("%slcSKU%") do (if not "[%%a]"=="[]" set slcSKU=) 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 %winbuild% GEQ 15063 %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';iex ($f[1])" %nul2% | find /i "Subscription_is_activated" %nul% && ( +if defined regSKU if defined slcSKU if not "%regSKU%"=="%slcSKU%" ( +set winsub=1 +set osSKU=%regSKU% +) +) + +if not defined osSKU set osSKU=%slcSKU% if not defined osSKU set osSKU=%wmiSKU% if not defined osSKU set osSKU=%regSKU% exit /b +:: Get Windows Subscription status + +:winsubstatus: +$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(6, 1).DefineDynamicModule(4).DefineType(2) +[void]$DM.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$m = [System.Runtime.InteropServices.Marshal] +$p = $m::AllocHGlobal(12) +$r = $DM.CreateType()::ClipGetSubscriptionStatus([ref]$p) +if ($r -eq 0) { + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: + :: Check KMS activation status :k_actinfo @@ -872,8 +979,8 @@ exit /b :k_checkexp 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" %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='+$_)}" %nul6%') do set "gpr=%%#" +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get GracePeriodRemaining /VALUE" %nul6%') do set "gpr=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" %nul6%') do set "gpr=%%#" if %gpr% GTR 259200 (set _k38=1) else (set _k38=) exit /b @@ -881,52 +988,143 @@ exit /b :dk_checkperm -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='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 1 wmic path %spp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= 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% +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% +exit /b + +:: Install Key + +:dk_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] +) else ( +call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." +call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +set error=1 +) + exit /b :: Get Windows installed key channel -:dk_channel +:k_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='+$_)}" %nul6%') do set "_channel=%%#" +set _gvlk= +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like '%%KMSCLIENT%%'" Get Name /value %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like ''%%KMSCLIENT%%''').Get()).Name | %% {echo ('Name='+$_)}" %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) exit /b -:: Get Windows Activation IDs +:: Get all products 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" %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='+$_)}" %nul6%')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Trigger reevaluation, it helps in updating SPP tasks + +:dk_reeval + +:: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP + +set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" +reg delete "%ruleskey%" /v "State" /f %nul% +reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); +set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" exit /b +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + :: Check wmic.exe :dk_ckeckwmic set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 ) exit /b +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +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%%') @@ -938,6 +1136,22 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) + +if not defined winsub exit /b + +:: Check base edition product name if Windows subscription license is found + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a +) else ( +set winos=Windows 10 %%a +) +) exit /b :: Common lines used in PowerShell reflection code @@ -954,7 +1168,7 @@ exit /b :: Get Product Key from pkeyhelper.dll for future new editions :: It works on Windows 10 1803 (17134) and later builds. -:dk_pkey +:k_pkey call :dk_reflection @@ -967,11 +1181,11 @@ exit /b :: Get channel name for the key which was extracted from pkeyhelper.dll -:dk_pkeychannel +:k_pkeychannel set k=%1 set m=[Runtime.InteropServices.Marshal] -set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms +set p=%SysPath%\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3); set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8); @@ -981,13 +1195,13 @@ set pkeychannel= for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkeychannel=%%a) exit /b -:dk_gvlk +:k_gvlk for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b for %%# in (Volume:GVLK) do ( -call :dk_pkey %osSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( +call :k_pkey %osSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) @@ -996,9 +1210,68 @@ exit /b ::======================================================================================================================================== +:dk_chkmal + +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. + +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico +if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS +set pupfound=%pupfound1%%pupfound2% + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +set wucount=0 +for %%# in (wuauserv) do ( +set _corrupt= +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 & set /a wucount+=1) +) +) +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) +exit /b + +::======================================================================================================================================== + :dk_errorcheck set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) + +::======================================================================================================================================== :: Check corrupt services @@ -1010,7 +1283,6 @@ 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 /i %%#==TrustedInstaller if /i %%G==DependOnService set _corrupt= ) if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) @@ -1018,6 +1290,7 @@ if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (s if defined serv_cor ( set error=1 +set showfix=1 call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) @@ -1044,12 +1317,6 @@ if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%# if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% -if /i %%#==DoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==UsoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==CryptSvc sc config %%# start= auto %nul% -if /i %%#==BITS sc config %%# start= delayed-auto %nul% -if /i %%#==wuauserv sc config %%# start= demand %nul% -if /i %%#==WaaSMedicSvc sc config %%# start= demand %nul% if !errorlevel!==0 ( if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") ) else ( @@ -1076,7 +1343,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% Start-Service %%# %nul% +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1090,7 +1357,7 @@ if defined serv_e ( set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( -call :dk_color %Blue% "Restart the system to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) @@ -1126,96 +1393,94 @@ call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE set wpainfo= set wpaerror= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) echo "%wpainfo%" | find /i "Error Found" %nul% && ( set error=1 set wpaerror=1 -call :dk_color %Red% "Checking WPA Registry Error [%wpainfo%]" +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" ) || ( echo Checking WPA Registry Count [%wpainfo%] ) -DISM /English /Online /Get-CurrentEdition %nul% -set dism_error=%errorlevel% -cmd /c exit /b %dism_error% -if %dism_error% NEQ 0 set "dism_error=0x%=ExitCode%" -if %dism_error% NEQ 0 ( -call :dk_color %Red% "Checking DISM [Not Responding] [%dism_error%]" -) - - if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 -set showfix=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" -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 %mas%genuine-installation-media.html" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) ) -set osedition= +set osedition=0 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 an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if not %osedition%==0 ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( -if not defined osedition ( +if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SystemRoot%\System32\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set error=1 +set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( set error=1 -call :dk_color %Red% "Checking Package File [Not Found] [%osedition%]" +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" if %error_code% NEQ 0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" -) - - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] %error_code%" ) 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 %_wmic% EQU 0 %psc% "Get-WmiObject -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." +call :dk_color %Red% "Checking WMI [Not Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) +if not defined officeact ( +if %winbuild% GEQ 10240 ( %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%]" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) +) ) - reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 @@ -1231,17 +1496,49 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System ) +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. + +if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +echo Checking Eval WLMS Service [Found] +) +) + + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) +) + + 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% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]" -%psc% Restart-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" set error=1 ) 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 %Blue% "Possibly Caused By Gaming Spoofers. Help: %mas%troubleshoot" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1249,29 +1546,49 @@ 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%\" ( +if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 set error=1 -REM This code creates token folder only if it's missing and sets default permission for it +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +:: This code creates token folder only if it's missing and sets default permission for it + +if not defined toerr if not exist "%tokenstore%\" ( 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)';" +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 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%\]" +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) ) -call :dk_actids -if not defined applist ( -%psc% Stop-Service sppsvc %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 ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set "_notfoundids=Not found" +) set error=1 -call :dk_color %Red% "Checking Activation IDs [Not Found]" +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) @@ -1282,41 +1599,65 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke ) -if not exist %SystemRoot%\system32\sppsvc.exe ( -set error=1 -set showfix=1 -call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +) ) -:: This code checks if NT SERVICE\sppsvc has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if not exist "%tokenstore%\" set permerror=1 - +if %winbuild% GEQ 9200 ( for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) ) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) +) + if defined permerror ( set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 -call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +) ) -:: If required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." ) +) if not defined showfix if defined wpaerror ( set showfix=1 @@ -1328,33 +1669,49 @@ exit /b :: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems :wpatest: -$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA") -$count = $wpaKey.SubKeyCount - +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} $osVersion = [System.Environment]::OSVersion.Version $minBuildNumber = 14393 - if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $keyNumber = $subkeyName -replace '.*-', '' - $subkeyHashTable[$keyNumber] = $true + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Host "Total Keys $count. Error Found- $i key does not exist" + Write-Output "Total Keys $count. Error Found - $i key does not exist." $wpaKey.Close() - exit + exit } } } $wpaKey.GetSubKeyNames() | ForEach-Object { - $subkey = $wpaKey.OpenSubKey($_) - $p = $subkey.GetValueNames() - if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { - Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" - $wpaKey.Close() - exit + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } } } $count @@ -1387,8 +1744,21 @@ exit /b echo: if %_unattended%==1 timeout /t 2 & exit /b + +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 ::======================================================================================================================================== @@ -1404,63 +1774,64 @@ exit /b set f= for %%# in ( -73111121-5638-40f6-bc11-f1d7b0d64300_NP%f%PR9-FWD%f%CX-D2%f%C8J-H872%f%K-2Y%f%T43___4_Enterprise -7dc26449-db21-4e09-ba37-28f2958506a6_DP%f%NXD-67Y%f%Y9-WW%f%FJJ-RYH9%f%9-RM%f%832___7_ServerStandard_Ge -9bd77860-9b31-4b7b-96ad-2564017315bf_VD%f%YBN-27W%f%PP-V4%f%HQT-9VMD%f%4-VM%f%K7H___7_ServerStandard_FE -de32eafd-aaee-4662-9444-c1befb41bde2_N6%f%9G4-B89%f%J2-4G%f%8F4-WWYC%f%C-J4%f%64C___7_ServerStandard_RS5 -8c1c5410-9f39-4805-8c9d-63a07706358f_WC%f%2BQ-8NR%f%M3-FD%f%DYY-2BFG%f%V-KH%f%KQY___7_ServerStandard_RS1 -c052f164-cdf6-409a-a0cb-853ba0f0f55a_CN%f%FDQ-2BW%f%8H-9V%f%4WM-TKCP%f%D-MD%f%2QF___8_ServerDatacenter_Ge -ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX%f%4NM-KYW%f%YW-QJ%f%JR4-XV3Q%f%B-6V%f%M33___8_ServerDatacenter_FE -34e1ae55-27f8-4950-8877-7a03be5fb181_WM%f%DGN-G9P%f%QG-XV%f%VXX-R3X4%f%3-63%f%DFG___8_ServerDatacenter_RS5 -21c56779-b449-4d20-adfc-eece0e1ad74b_CB%f%7KF-BWN%f%84-R7%f%R2Y-793K%f%2-8X%f%DDG___8_ServerDatacenter_RS1 -e272e3e2-732f-4c65-a8f0-484747d0d947_DP%f%H2V-TTN%f%VB-4X%f%9Q3-TJR4%f%H-KH%f%JW4__27_EnterpriseN -2de67392-b7a7-462a-b1ca-108dd189f588_W2%f%69N-WFG%f%WX-YV%f%C9B-4J6C%f%9-T8%f%3GX__48_Professional -a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH%f%37W-N47%f%XK-V7%f%XM9-C722%f%7-GC%f%QG9__49_ProfessionalN -034d3cbb-5d4b-4245-b3f8-f84571314078_WV%f%DHN-86M%f%7X-46%f%6P6-VHXV%f%7-YY%f%726__50_ServerSolution_RS5 -2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JC%f%KRF-N37%f%P4-C2%f%D82-9YXR%f%T-4M%f%63B__50_ServerSolution_RS1 -7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3K%f%HY7-WNT%f%83-DG%f%QKR-F7HP%f%R-84%f%4BM__98_CoreN -a9107544-f4a0-4053-a96a-1479abdef912_PV%f%MJN-6DF%f%Y6-9C%f%CP6-7BKT%f%T-D3%f%WVR__99_CoreCountrySpecific -cd918a57-a41b-4c82-8dce-1a538e221a83_7H%f%NRX-D7K%f%GG-3K%f%4RQ-4WPJ%f%4-YT%f%DFH_100_CoreSingleLanguage -58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX%f%9XD-98N%f%7V-6W%f%MQ6-BX7F%f%G-H8%f%Q99_101_Core -7b4433f4-b1e7-4788-895a-c45378d38253_QN%f%4C6-GBJ%f%D2-FB%f%422-GHWJ%f%K-GJ%f%G2R_110_ServerCloudStorage -8de8eb62-bbe0-40ac-ac17-f75595071ea3_GR%f%FBW-QND%f%C4-6Q%f%BHG-CCK3%f%B-2P%f%R88_120_ServerARM64_RS5 -43d9af6e-5e86-4be8-a797-d072a046896c_K9%f%FYF-G6N%f%CK-73%f%M32-XMVP%f%Y-F9%f%DRR_120_ServerARM64_RS4 -e0c42288-980c-4788-a014-c080d2e1926e_NW%f%6C2-QMP%f%VW-D7%f%KKK-3GKT%f%6-VC%f%FB2_121_Education -3c102355-d027-42c6-ad23-2e7ef8a02585_2W%f%H4N-8QG%f%BV-H2%f%2JP-CT43%f%Q-MD%f%WWJ_122_EducationN -32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7%f%XTQ-FN8%f%P6-TT%f%KYV-9D4C%f%C-J4%f%62D_125_EnterpriseS_RS5,VB,Ge -2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DC%f%PHK-NFM%f%TC-H8%f%8MJ-PFHP%f%Y-QJ%f%4BJ_125_EnterpriseS_RS1 -7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WN%f%MTR-4C8%f%8C-JK%f%8YV-HQ7T%f%2-76%f%DF9_125_EnterpriseS_TH1 -7103a333-b8c8-49cc-93ce-d37c09687f92_92%f%NFX-8DJ%f%QP-P6%f%BBQ-THF9%f%C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge -9f776d83-7156-45b2-8a5c-359b9c9f22a3_QF%f%FDN-GRT%f%3P-VK%f%WWX-X7T3%f%R-8B%f%639_126_EnterpriseSN_RS1 -87b838b7-41b6-4590-8318-5797951d8529_2F%f%77B-TNF%f%GY-69%f%QQF-B8YK%f%P-D6%f%9TJ_126_EnterpriseSN_TH1 -39e69c41-42b4-4a0a-abad-8e3c10a797cc_QF%f%ND9-D3Y%f%9C-J3%f%KKY-6RPV%f%P-2D%f%PYV_145_ServerDatacenterACor_FE -90c362e5-0da1-4bfd-b53b-b87d309ade43_6N%f%MRW-2C8%f%FM-D2%f%4W7-TQWM%f%Y-CW%f%H2D_145_ServerDatacenterACor_RS5 -e49c08e7-da82-42f8-bde2-b570fbcae76c_2H%f%XDN-KRX%f%HB-GP%f%YC7-YCKF%f%J-7F%f%VDG_145_ServerDatacenterACor_RS3 -f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67%f%KN8-4FY%f%JW-24%f%87Q-MQ2J%f%7-4C%f%4RG_146_ServerStandardACor_FE -73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2%f%KJX-J94%f%YW-TQ%f%VFB-DG9Y%f%T-72%f%4CC_146_ServerStandardACor_RS5 -61c5ef22-f14f-4553-a824-c4b31e84b100_PT%f%XN8-JFH%f%JM-4W%f%C78-MPCB%f%R-9W%f%4KR_146_ServerStandardACor_RS3 -82bbc092-bc50-4e16-8e18-b74fc486aec3_NR%f%G8B-VKK%f%3Q-CX%f%VCJ-9G2X%f%F-6Q%f%84J_161_ProfessionalWorkstation -4b1571d3-bafb-4b40-8087-a961be2caf65_9F%f%NHH-K3H%f%BT-3W%f%4TD-6383%f%H-6X%f%YWF_162_ProfessionalWorkstationN -3f1afc82-f8ac-4f6c-8005-1d233e606eee_6T%f%P4R-GNP%f%TD-KY%f%YHQ-7B7D%f%P-J4%f%47Y_164_ProfessionalEducation -5300b18c-2e33-4dc2-8291-47ffcec746dd_YV%f%WGF-BXN%f%MC-HT%f%QYQ-CPQ9%f%9-66%f%QFC_165_ProfessionalEducationN -45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_QN%f%7G3-4RM%f%92-MT%f%6QR-PR96%f%6-FV%f%YV7_168_ServerAzureCor_Ge -8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N%f%379-GGT%f%MK-23%f%C6M-XVVT%f%C-CK%f%FRQ_168_ServerAzureCor_FE -a99cc1f0-7719-4306-9645-294102fbff95_FD%f%NH6-VW9%f%RW-BX%f%PJ7-4XTY%f%G-23%f%9TB_168_ServerAzureCor_RS5 -3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP%f%34G-4NP%f%PG-79%f%JTQ-864T%f%4-R3%f%MQX_168_ServerAzureCor_RS1 -e0b2d383-d112-413f-8a80-97f373a5820c_YY%f%VX9-NTF%f%WV-6M%f%DM3-9PT4%f%T-4M%f%68B_171_EnterpriseG -e38454fb-41a4-4f59-a5dc-25080e354730_44%f%RPN-FTY%f%23-9V%f%TTB-MP9B%f%X-T8%f%4FV_172_EnterpriseGN -ec868e65-fadf-4759-b23e-93fe37f2cc29_CP%f%WHC-NT2%f%C7-VY%f%W78-DHDB%f%2-PG%f%3GK_175_ServerRdsh_RS5 -e4db50ea-bda1-4566-b047-0ca50abc6f07_7N%f%BT4-WGB%f%QX-MP%f%4H7-QXFF%f%8-YP%f%3KX_175_ServerRdsh_RS3 -0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NB%f%TWJ-3DR%f%69-3C%f%4V8-C26M%f%C-GQ%f%9M6_183_CloudE -59eb965c-9150-42b7-a0ec-22151b9897c5_KB%f%N8V-HFG%f%Q4-MG%f%XVD-347P%f%6-PD%f%QGT_191_IoTEnterpriseS_VB,NI -d30136fc-cb4b-416e-a23d-87207abc44a9_6X%f%N7V-PCB%f%DC-BD%f%BRH-8DQY%f%7-G6%f%R44_202_CloudEditionN -ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37%f%D7F-N49%f%CB-WQ%f%R8W-TBJ7%f%3-FM%f%8RX_203_CloudEdition -c2e946d1-cfa2-4523-8c87-30bc696ee584_NQ%f%8HH-FTD%f%TM-6V%f%GY7-TQ3D%f%V-XF%f%BV2_407_ServerTurbine_Ge -19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NT%f%BV8-9K7%f%Q8-V2%f%7C6-M2BT%f%V-KH%f%MXV_407_ServerTurbine_RS5 +:: Windows 10/11 +73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43___4_Enterprise +e272e3e2-732f-4c65-a8f0-484747d0d947_DPH2V-TTNVB-4X9Q3-TJR4H-KH%f%JW4__27_EnterpriseN +2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX__48_Professional +a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH37W-N47XK-V7XM9-C7227-GC%f%QG9__49_ProfessionalN +7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3KHY7-WNT83-DGQKR-F7HPR-84%f%4BM__98_CoreN +a9107544-f4a0-4053-a96a-1479abdef912_PVMJN-6DFY6-9CCP6-7BKTT-D3%f%WVR__99_CoreCountrySpecific +cd918a57-a41b-4c82-8dce-1a538e221a83_7HNRX-D7KGG-3K4RQ-4WPJ4-YT%f%DFH_100_CoreSingleLanguage +58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX9XD-98N7V-6WMQ6-BX7FG-H8%f%Q99_101_Core +e0c42288-980c-4788-a014-c080d2e1926e_NW6C2-QMPVW-D7KKK-3GKT6-VC%f%FB2_121_Education +3c102355-d027-42c6-ad23-2e7ef8a02585_2WH4N-8QGBV-H22JP-CT43Q-MD%f%WWJ_122_EducationN +32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_125_EnterpriseS_RS5,VB,Ge +2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCPHK-NFMTC-H88MJ-PFHPY-QJ%f%4BJ_125_EnterpriseS_RS1 +7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNMTR-4C88C-JK8YV-HQ7T2-76%f%DF9_125_EnterpriseS_TH1 +7103a333-b8c8-49cc-93ce-d37c09687f92_92NFX-8DJQP-P6BBQ-THF9C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge +9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFFDN-GRT3P-VKWWX-X7T3R-8B%f%639_126_EnterpriseSN_RS1 +87b838b7-41b6-4590-8318-5797951d8529_2F77B-TNFGY-69QQF-B8YKP-D6%f%9TJ_126_EnterpriseSN_TH1 +82bbc092-bc50-4e16-8e18-b74fc486aec3_NRG8B-VKK3Q-CXVCJ-9G2XF-6Q%f%84J_161_ProfessionalWorkstation +4b1571d3-bafb-4b40-8087-a961be2caf65_9FNHH-K3HBT-3W4TD-6383H-6X%f%YWF_162_ProfessionalWorkstationN +3f1afc82-f8ac-4f6c-8005-1d233e606eee_6TP4R-GNPTD-KYYHQ-7B7DP-J4%f%47Y_164_ProfessionalEducation +5300b18c-2e33-4dc2-8291-47ffcec746dd_YVWGF-BXNMC-HTQYQ-CPQ99-66%f%QFC_165_ProfessionalEducationN +e0b2d383-d112-413f-8a80-97f373a5820c_YYVX9-NTFWV-6MDM3-9PT4T-4M%f%68B_171_EnterpriseG +e38454fb-41a4-4f59-a5dc-25080e354730_44RPN-FTY23-9VTTB-MP9BX-T8%f%4FV_172_EnterpriseGN +ec868e65-fadf-4759-b23e-93fe37f2cc29_CPWHC-NT2C7-VYW78-DHDB2-PG%f%3GK_175_ServerRdsh_RS5 +e4db50ea-bda1-4566-b047-0ca50abc6f07_7NBT4-WGBQX-MP4H7-QXFF8-YP%f%3KX_175_ServerRdsh_RS3 +0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBTWJ-3DR69-3C4V8-C26MC-GQ%f%9M6_183_CloudE +59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_191_IoTEnterpriseS_VB,NI +d30136fc-cb4b-416e-a23d-87207abc44a9_6XN7V-PCBDC-BDBRH-8DQY7-G6%f%R44_202_CloudEditionN +ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D7F-N49CB-WQR8W-TBJ73-FM%f%8RX_203_CloudEdition +:: Windows 2016/19/22/25 LTSC/SAC +7dc26449-db21-4e09-ba37-28f2958506a6_TVRH6-WHNXV-R9WG3-9XRFY-MY%f%832___7_ServerStandard_Ge +9bd77860-9b31-4b7b-96ad-2564017315bf_VDYBN-27WPP-V4HQT-9VMD4-VM%f%K7H___7_ServerStandard_FE +de32eafd-aaee-4662-9444-c1befb41bde2_N69G4-B89J2-4G8F4-WWYCC-J4%f%64C___7_ServerStandard_RS5 +8c1c5410-9f39-4805-8c9d-63a07706358f_WC2BQ-8NRM3-FDDYY-2BFGV-KH%f%KQY___7_ServerStandard_RS1 +c052f164-cdf6-409a-a0cb-853ba0f0f55a_D764K-2NDRG-47T6Q-P8T8W-YP%f%6DF___8_ServerDatacenter_Ge +ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX4NM-KYWYW-QJJR4-XV3QB-6V%f%M33___8_ServerDatacenter_FE +34e1ae55-27f8-4950-8877-7a03be5fb181_WMDGN-G9PQG-XVVXX-R3X43-63%f%DFG___8_ServerDatacenter_RS5 +21c56779-b449-4d20-adfc-eece0e1ad74b_CB7KF-BWN84-R7R2Y-793K2-8X%f%DDG___8_ServerDatacenter_RS1 +034d3cbb-5d4b-4245-b3f8-f84571314078_WVDHN-86M7X-466P6-VHXV7-YY%f%726__50_ServerSolution_RS5 +2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JCKRF-N37P4-C2D82-9YXRT-4M%f%63B__50_ServerSolution_RS1 +7b4433f4-b1e7-4788-895a-c45378d38253_QN4C6-GBJD2-FB422-GHWJK-GJ%f%G2R_110_ServerCloudStorage +8de8eb62-bbe0-40ac-ac17-f75595071ea3_GRFBW-QNDC4-6QBHG-CCK3B-2P%f%R88_120_ServerARM64_RS5 +43d9af6e-5e86-4be8-a797-d072a046896c_K9FYF-G6NCK-73M32-XMVPY-F9%f%DRR_120_ServerARM64_RS4 +39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFND9-D3Y9C-J3KKY-6RPVP-2D%f%PYV_145_ServerDatacenterACor_FE +90c362e5-0da1-4bfd-b53b-b87d309ade43_6NMRW-2C8FM-D24W7-TQWMY-CW%f%H2D_145_ServerDatacenterACor_RS5 +e49c08e7-da82-42f8-bde2-b570fbcae76c_2HXDN-KRXHB-GPYC7-YCKFJ-7F%f%VDG_145_ServerDatacenterACor_RS3 +f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67KN8-4FYJW-2487Q-MQ2J7-4C%f%4RG_146_ServerStandardACor_FE +73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2KJX-J94YW-TQVFB-DG9YT-72%f%4CC_146_ServerStandardACor_RS5 +61c5ef22-f14f-4553-a824-c4b31e84b100_PTXN8-JFHJM-4WC78-MPCBR-9W%f%4KR_146_ServerStandardACor_RS3 +45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_FCNV3-279Q9-BQB46-FTKXX-9H%f%PRH_168_ServerAzureCor_Ge +8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N379-GGTMK-23C6M-XVVTC-CK%f%FRQ_168_ServerAzureCor_FE +a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_ServerAzureCor_RS5 +3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP34G-4NPPG-79JTQ-864T4-R3%f%MQX_168_ServerAzureCor_RS1 +c2e946d1-cfa2-4523-8c87-30bc696ee584_XGN3F-F394H-FD2MY-PP6FD-8M%f%CRC_407_ServerTurbine_Ge +19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTBV8-9K7Q8-V27C6-M2BTV-KH%f%MXV_407_ServerTurbine_RS5 ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( -set skufound=1 -if %1==getkey if not defined key echo "!applist!" | find /i "%%A" %nul1% && set key=%%B +if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) ) exit /b @@ -1484,17 +1855,17 @@ set notfoundaltactID= if %_NoEditionChange%==1 exit /b 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 -206_IoTEnterpriseK_________________80083eae-7031-4394-9e88-4901973d56fe_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 -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 -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 +188_IoTEnterprise__________________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +206_IoTEnterpriseK_________________80083eae-7031-4394-9e88-4901973d56fe_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +191_IoTEnterpriseS-2021____________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_EnterpriseS-2021 +205_IoTEnterpriseSK________________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_IoTEnterpriseS +138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional ) do ( for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( -echo "!applist!" | find /i "%%C" %nul1% && ( -echo "!applist!" | find /i "%%D" %nul1% && ( +echo "!allapps!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( set altkey=%%E set altedition=%%F ) || ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d356aa7..ec2e8c9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 :: ::============================================================================ @@ -21,32 +18,41 @@ set _act=0 :: To remove Ohook activation, run the script with /Ohook-Uninstall parameter or change 0 to 1 in below line set _rem=0 +:: To run the script in debug mode, change 0 to "/Ohook" in below line +set "_debug=0" + :: If value is changed in above lines or parameter is used then script will run in unattended mode ::======================================================================================================================================== -:: 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 "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" + +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 1>nul -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" @@ -63,6 +69,33 @@ exit /b ::======================================================================================================================================== +:: Debug code + +if "%_debug%" EQU "0" ( +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" +goto :_debug +) + +set "nul1=" +set "nul2=" +set "nul6=" +set "nul=" + +@echo on +@prompt $G +@call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" +@echo off +@exit /b + +:_debug + +::======================================================================================================================================== + set "blank=" set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" @@ -74,10 +107,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -86,9 +119,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: -ping 127.0.0.1 -n 6 >nul +echo: +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -118,66 +155,20 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -set "nul1=1>nul" -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 :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." -) - -::======================================================================================================================================== +call :dk_setvar if %winbuild% LSS 9200 ( %eline% echo Unsupported OS version detected [%winbuild%]. -echo Ohook Activation is supported on Windows 8 and later and their server equivalent. -goto dk_done -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. +echo Ohook Activation is supported only on Windows 8/10/11 and their server equivalents. +echo: +call :dk_color %Blue% "Use Online KMS activation option instead." goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -186,9 +177,10 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" -set "_Local=%LocalAppData%" + setlocal EnableDelayedExpansion ::======================================================================================================================================== @@ -196,8 +188,8 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( 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 The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. goto dk_done @@ -206,31 +198,83 @@ goto dk_done ::======================================================================================================================================== +:: 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 dk_done +) + +::======================================================================================================================================== + :: 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'. +echo Right click on this script and select 'Run as administrator'. 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 +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) -if %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) +:: Check if script is running in Terminal app -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 +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 @@ -239,20 +283,20 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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) @@ -268,13 +312,14 @@ if %_rem%==1 goto :oh_uninstall if %_unattended%==0 ( cls -mode 76, 25 +if not defined terminal mode 76, 25 title Ohook Activation %masver% - +call :oh_checkapps echo: echo: echo: echo: +if defined checknames (call :dk_color %_Yellow% " Close [!checknames!] before proceeding...") echo ____________________________________________________________ echo: echo [1] Install Ohook Office Activation @@ -287,11 +332,11 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,0]" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b -if !_el!==3 start %mas%genuine-installation-media.html &goto :oh_menu +if !_el!==3 start %mas%genuine-installation-media &goto :oh_menu if !_el!==2 goto :oh_uninstall if !_el!==1 goto :oh_menu2 goto :oh_menu @@ -302,41 +347,35 @@ goto :oh_menu :oh_menu2 cls +if not defined terminal ( mode 130, 32 +if exist "%SysPath%\spp\store_test\" mode 134, 32 %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" - +) title Ohook Activation %masver% echo: echo Initializing... +call :dk_chkmal -:: Check PowerShell - -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( +if not exist %SysPath%\sppsvc.exe ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode +echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -echo Check this page for help. %mas%troubleshoot +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ::======================================================================================================================================== -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." -echo: -) +call :dk_reflection +call :dk_ckeckwmic +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -344,30 +383,17 @@ set error= cls echo: -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b -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% ^| %osarch%] - -::======================================================================================================================================== - -:: Check Windows Script Host - -set _WSH=1 -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 %nul2% | find /i "0x0" %nul1% && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% -echo Enabling Windows Script Host [Successful] -) +call :dk_showosinfo ::======================================================================================================================================== echo Initiating Diagnostic Tests... set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + set officeact=1 call :dk_errorcheck @@ -391,6 +417,10 @@ echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" ) +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + ::======================================================================================================================================== :: Check supported office versions @@ -424,14 +454,15 @@ call :dk_color %Red% "Checking Supported Office Install [Not Found]" call :dk_color %Red% "Checking Installed Office [Not Found]" ) -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +if defined ohub ( echo: -echo You have only Office dashboard app installed, you need to install full Office version. +echo You only have the Office dashboard app installed, you need to install the full version of Office. ) echo: -call :dk_color %Blue% "Download and install Office from below URL and try again." +call :dk_color %Blue% "Download and install Office from the below URL and then try again." echo: -echo %mas%genuine-installation-media.html +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" goto dk_done ) @@ -440,22 +471,46 @@ if not "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 if not "%o14msi%%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( -call :dk_color %Gray% "Checking Multiple Office Install [Found. Its best to install only one version]" +call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" ) ::======================================================================================================================================== +:: Check Windows Server + +set winserver= +reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType %nul2% | find /i "WinNT" %nul1% || set winserver=1 +if not defined winserver ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Server" %nul1% && set winserver=1 +) + +::======================================================================================================================================== + +:: Check already activated products list + +set actiProds15= +set actiProds16= + +if not "%o15c2r%%o15msi%"=="" call :oh_findactivated -like 15 +if not "%o16c2r%%o16msi%"=="" call :oh_findactivated -notlike 16 + +::======================================================================================================================================== + :: Process Office 15.0 C2R if not defined o15c2r goto :starto16c2r call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=15 for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") -if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( @@ -465,17 +520,17 @@ echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") set "_oLPath=%_oRoot%\Licenses" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) echo: -echo Activating Office 15.0 %_oArch% C2R... +echo Activating Office... [C2R ^| %_version% ^| %_oArch%] if not defined _oIds ( call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -483,6 +538,7 @@ set error=1 goto :starto16c2r ) +call :oh_fixprids call :oh_process call :oh_hookinstall @@ -495,32 +551,36 @@ call :oh_hookinstall if not defined o16c2r goto :startmsi call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=16 for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") ) set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% set "_oLPath=%_oRoot%\Licenses16" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) echo: -echo Activating Office 16.0 %_oArch% C2R... +echo Activating Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] if not defined _oIds ( call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -528,76 +588,38 @@ set error=1 goto :startmsi ) +call :oh_fixprids call :oh_process call :oh_hookinstall ::======================================================================================================================================== -:: Find remnants of Office vNext license block and remove it because it stops non vNext licenses from appearing -:: https://learn.microsoft.com/en-us/office/troubleshoot/activation/reset-office-365-proplus-activation-state - -set _sid= -set sub_next= - -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! HKU\%%a") else (set "_sid=HKU\%%a")) - -if not defined _sid ( -call :dk_color %Red% "Checking User Accounts SID [Not Found]" -) - -dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*" %nul% && set sub_next=1 -dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*" %nul% && set sub_next=1 - -for %%# in (!_sid! HKCU) do if not defined sub_next ( -reg query %%#\Software\Microsoft\Office\16.0\Common\Licensing\LicensingNext /v MigrationToV5Done %nul2% | find /i "0x1" %nul% && ( -reg query %%#\Software\Microsoft\Office\16.0\Common\Licensing\LicensingNext %nul2% | findstr /i "volume retail" %nul2% | findstr /i "0x2 0x3" %nul% && ( -set sub_next=1 -) -) -) - -if defined sub_next ( -rmdir /s /q "!_Local!\Microsoft\Office\Licenses\" %nul% -rmdir /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul% -for %%# in (!_sid! HKCU) do ( -reg delete %%#\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% -reg delete %%#\Software\Microsoft\Office\16.0\Common\Identity /f %nul% -reg delete %%#\Software\Microsoft\Office\16.0\Registration /f %nul% -) -) - -if defined sub_next echo Removing Office vNext Block [Successful] - -::======================================================================================================================================== - -:: Subscription products attempt to validate the license and may show a banner "There was a problem checking this device's license status." -:: Resiliency registry entry can skip this check +:: Old version (16.0.9xxxx and below) of Office with subscription license key may show a banner to sign in to fix license issue. +:: Although script applies a Resiliency registry entry to fix that but it doesn't work on old office versions. +:: Below code checks that condition and informs the user to update the Office. -if defined o16c2r ( -for %%# in (!_sid! HKCU) do (reg delete %%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul%) -for %%# in (!_sid! HKCU) do ( -reg query "%%#\Volatile Environment" %nul% && ( -reg add %%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +if defined _sublic ( +if not exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( +call :dk_color %Gray% "Checking Old Office With Sub License [Found. Update Office, otherwise, it may show a licensing issue-related banner.]" ) ) -echo Adding Reg Keys To Skip License Check [Successful] -) ::======================================================================================================================================== -:: mass grave[.]dev/office-license-is-not-genuine.html +:: mass grave[.]dev/office-license-is-not-genuine :: Add registry keys for volume products so that 'non-genuine' banner won't appear :: Script already is using MAK instead of GVLK so it won't appear anyway, but registry keys are added incase Office installs default GVLK grace key for volume products +set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" echo "%_oIds%" | find /i "Volume" %nul1% && ( if %winbuild% GEQ 9200 ( -if not [%osarch%]==[x86] ( -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /reg:32 %nul% -reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 %nul% +if not "%osarch%"=="x86" ( +reg delete "%kmskey%" /f /reg:32 %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 %nul% ) -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% -reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% -echo Adding a Reg To Prevent Banner [Successful] +reg delete "%kmskey%" /f %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% +echo Adding a Registry to Prevent Banner [Successful] ) ) @@ -610,51 +632,23 @@ if defined o16msi call :oh_processmsi 16 %o16msi_reg% ::======================================================================================================================================== -:: Uninstall other / grace Keys - -set upk_result=0 -set allapplist= - -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='0ff1ce15-a989-479d-af46-f275c6370663' and PartialProductKey is not null) 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=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" -%chkapp% do (if defined allapplist (call set "allapplist=!allapplist! %%a") else (call set "allapplist=%%a")) - -for %%# in (%allapplist%) do ( -echo "%_allactid%" | find /i "%%#" %nul1% || ( -cscript //nologo %windir%\system32\slmgr.vbs /upk %%# %nul% && ( -set upk_result=1 -) || ( -set error=1 -set upk_result=2 -) -) -) - -if not %upk_result%==0 echo: -if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] -if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" - -::======================================================================================================================================== - -:: Refresh Windows Insider Preview Licenses -:: It required in Insider versions otherwise office may not activate - -if exist "%windir%\system32\spp\store_test\2.0\tokens.dat" ( -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -) +call :oh_clearblock +call :oh_uninstkey +call :oh_licrefresh ::======================================================================================================================================== echo: if not defined error ( call :dk_color %Green% "Office is permanently activated." +if defined ohub call :dk_color %Gray% "Office apps such as Word, Excel are activated, use them directly. Ignore 'Buy' button in Office dashboard app." echo Help: %mas%troubleshoot ) else ( call :dk_color %Red% "Some errors were detected." if not defined ierror if not defined showfix if not defined serv_cor if not defined serv_cste call :dk_color %Blue% "%_fixmsg%" echo: -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -664,7 +658,7 @@ goto :dk_done :oh_uninstall cls -mode 99, 28 +if not defined terminal mode 99, 32 title Uninstall Ohook Activation %masver% set _present= @@ -673,7 +667,7 @@ call :oh_reset call :oh_getpath echo: -echo Uninstalling Ohook Activation... +echo Uninstalling Ohook activation... echo: if defined o16c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_16CHook=%%b\root\vfs")) @@ -704,35 +698,54 @@ if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" (set _present=1& del /s /f reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( echo: -echo Deleting - Registry keys to skip license check -reg delete HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +echo Deleting - Registry keys for skipping license check + +reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% +reg query HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +reg unload HKU\DEF_TEMP %nul% + +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty $('{0}\{1}' -f $p, $_.PSChildName)).ProfileImagePath; if ($pi -like $('{0}\Users\*' -f $Env:SystemDrive)) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +for %%# in (!_sidlist!) do ( + +reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! %%a") else (set "_sid=%%a")) -for %%# in (!_sid!) do (reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( -reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +reg query HKU\%%#\Software %nul% || ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +reg load HKU\%%# "%%b\NTUSER.DAT" %nul% +reg query HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f +reg unload HKU\%%# %nul% +) ) ) ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" %nul% && ( +set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" +reg query "%kmskey%" %nul% && ( echo: -echo Deleting - Registry keys to prevent non-genuine banner -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f +echo Deleting - Registry keys for preventing non-genuine banner +reg delete "%kmskey%" /f ) -reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" %nul% && ( -reg delete "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" /f +reg query "%kmskey%" /reg:32 %nul% && ( +reg delete "%kmskey%" /f /reg:32 ) echo __________________________________________________________________________________________ echo: if not defined _present ( -echo Ohook Activation is not installed. +echo Ohook activation is not installed. ) else ( if defined _unerror ( call :dk_color %Red% "Failed to uninstall Ohook activation." -call :dk_color %Blue% "Close Office apps if they are running and try again." +call :oh_checkapps +if defined checknames ( +call :dk_color %Blue% "Close [!checknames!] and try again." +call :dk_color %Blue% "If it is still not fixed, reboot your machine using the restart option and try again." +) else ( +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." ) @@ -745,6 +758,7 @@ goto :dk_done :oh_reset +set key= set _oRoot= set _oArch= set _oIds= @@ -752,11 +766,15 @@ set _oLPath= set _hookPath= set _hook= set _sppcPath= -set _key= set _actid= set _prod= set _lic= +set _arr= +set _prids= +set _config= +set _version= set _License= +set _oBranding= exit /b ::======================================================================================================================================== @@ -785,25 +803,32 @@ exit /b ::======================================================================================================================================== -:oh_installkey +:: Some Office Retail to Volume converter tools may edit the ProductReleaseIds to add VL products. This code restores it because it may affect features. + +:oh_fixprids + +if not defined _prids ( +call :dk_color %Gray% "Checking ProductReleaseIds In Registry [Not Found]" +exit /b +) + +set _pridsR= +set _pridsE= +for /f "skip=2 tokens=2*" %%a in ('"reg query %_prids%" %nul6%') do (set "_pridsR=%%b") -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 errorcode=%errorlevel% -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]" +set _pridsR=%_pridsR:,= % +for %%# in (%_pridsR%) do (echo %%# | findstr /I "%_oIds%" %nul1% || set _pridsE=1) +for %%# in (%_oIds%) do (echo %%# | findstr /I "%_pridsR%" %nul1% || set _pridsE=1) -if %errorcode% EQU 0 ( -call :dk_refresh -echo Installing Generic Product Key [%_key%] [%_prod%] [%_lic%] [Successful] +if not defined _pridsE exit /b +reg add %_prids% /t REG_SZ /d "" /f %nul1% + +for %%# in (%_oIds%) do ( +for /f "skip=2 tokens=2*" %%a in ('reg query %_prids%') do if not "%%b"=="" ( +reg add %_prids% /t REG_SZ /d "%%b,%%#" /f %nul1% ) else ( -call :dk_color %Red% "Installing Generic Product Key [%_key%] [%_prod%] [Failed] %errorcode%" -if not defined error ( -call :dk_color %Blue% "%_fixmsg%" -set showfix=1 +reg add %_prids% /t REG_SZ /d "%%#" /f %nul1% ) -set error=1 ) exit /b @@ -815,18 +840,15 @@ exit /b if not defined _oLPath exit /b if %oVer%==16 ( -"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%_key% %nul% +"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% ) else ( -"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%_key% %nul% +"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% ) -call :oh_actids -echo "!oapplist!" | find /i "!_actid!" %nul1% && ( -call :dk_color %Gray% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Successful]" -exit /b -) +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b -:: Fallback to /ilc method to install licenses incase integrator.exe is not working +:: Fallback to manual method to install licenses incase integrator.exe is not working set _License=%_License:XVolume=XC2RVL_% @@ -843,18 +865,17 @@ set _License=%_License:Retail=R_% set _License=%_License:Volume=VL_% for %%# in ("!_oLPath!\client-issuance-*.xrm-ms") do ( -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\%%~nx#" %nul% +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") ) -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\pkeyconfig-office.xrm-ms" %nul% for %%# in ("!_oLPath!\%_License%*.xrm-ms") do ( -cscript //nologo %windir%\system32\slmgr.vbs /ilc "!_oLPath!\%%~nx#" %nul% +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") ) -call :oh_actids -echo "!oapplist!" | find /i "!_actid!" %nul1% && ( -call :dk_color %Gray% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Successful with /ilc Method]" -) || ( +%psc% "$sls = Get-WmiObject %sps%; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); InstallLicenseArr '!_arr!'; InstallLicenseFile '"!_oLPath!\pkeyconfig-office.xrm-ms"'" %nul% + +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% || ( set error=1 call :dk_color %Red% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Failed]" ) @@ -874,30 +895,52 @@ if %_hook%==sppc64.dll set offset=3076 del /s /q "%_hookPath%\sppcs.dll" %nul% del /s /q "%_hookPath%\sppc.dll" %nul% -if exist "%_hookPath%\sppcs.dll" set ierror=1 -if exist "%_hookPath%\sppc.dll" set ierror=1 +if exist "%_hookPath%\sppcs.dll" set "ierror=Remove Previous Ohook Install" +if exist "%_hookPath%\sppc.dll" set "ierror=Remove Previous Ohook Install" mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 set ierror=1 +if not %errorlevel%==0 ( +if not defined ierror set ierror=mklink +) + +set exhook= +if exist "!_work!\BIN\%_hook%" set exhook=1 -if not exist "%_hookPath%\sppc.dll" call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" -if not exist "%_hookPath%\sppc.dll" set ierror=1 +if not exist "%_hookPath%\sppc.dll" ( +if defined exhook ( +pushd "!_work!\BIN\" +copy /y /b "%_hook%" "%_hookPath%\sppc.dll" %nul% +popd +) else ( +call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" +) +) +if not exist "%_hookPath%\sppc.dll" (if not defined ierror set ierror=Copy) echo: if not defined ierror ( -echo Symlinking System's sppc.dll To ["%_hookPath%\sppcs.dll"] [Successful] -echo Extracting Custom %_hook% To ["%_hookPath%\sppc.dll"] [Successful] +echo Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] +if defined exhook ( +echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] +) else ( +echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] +) ) else ( set error=1 -call :dk_color %Red% "Symlinking Systems sppc.dll [Failed]" -call :dk_color %Red% "Extracting Custom %_hook% [Failed]" -echo ["%_hookPath%\sppc.dll"] +call :dk_color %Red% "Installing Ohook [Failed to %ierror%]" +echo: +call :oh_checkapps +if defined checknames ( +call :dk_color %Blue% "Close [!checknames!] and try again." +call :dk_color %Blue% "If it is still not fixed, reboot your machine using the restart option and try again." +) else ( +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if /i "%ierror%"=="Copy" call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +) echo: -call :dk_color %Blue% "Close ALL Office apps including Outlook and try again." -call :dk_color %Blue% "If its still not resolved then restart system and try again." ) -if not defined ierror ( +if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 @@ -914,7 +957,13 @@ exit /b :oh_process for %%# in (%_oIds%) do ( -set _key= + +echo: !actiProds%oVer%! | find /i "-%%#-" %nul1% && ( +call :dk_color %Gray% "Checking Activation Status [%%# is already permanently activated]" + +) || ( + +set key= set _actid= set _lic= set _preview= @@ -927,32 +976,29 @@ set _prod=%%#!_preview! call :ohookdata getinfo !_prod! -if not [!_key!]==[] ( -echo "!oapplist!" | find /i "!_actid!" %nul1% || call :oh_installlic -call :oh_installkey +if not "!key!"=="" ( +echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( set error=1 call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" -call :dk_color %Blue% "Make sure you are using Latest MAS script." +call :dk_color %Blue% "Make sure you are using the latest version of MAS." +set fixes=%fixes% %mas% +call :dk_color %_Yellow% "%mas%" +) ) ) -exit /b - -::======================================================================================================================================== - -:oh_msiproducts - -set msitemp=%SystemRoot%\Temp\_msitemp.txt - -if %oVer%==15 set _psmsikey=%o15msi_reg:HKLM\=HKLM:% -if %oVer%==16 set _psmsikey=%o16msi_reg:HKLM\=HKLM:% - -if exist %msitemp% del /f /q %msitemp% -%psc% "$Key = '%_psmsikey%\Registration\{*FF1CE}'; $keydata = Get-ItemProperty -Path $Key -Name "DigitalProductID"; $binaryData = $keydata."DigitalProductID"; $stringData = [System.Text.Encoding]::Unicode.GetString($binaryData);$stringData" >>%msitemp% +:: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server +:: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if exist %msitemp% call :ohookdata getmsiprod -if exist %msitemp% del /f /q %msitemp% +if defined winserver if defined _config ( +echo %_oIds% | find /i "Retail" %nul1% && ( +set scaIsNeeded=1 +reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% +echo Adding SharedComputerLicensing Reg [Successful] [Needed on Server With Retail Office]" +) +) exit /b @@ -963,33 +1009,47 @@ exit /b :: Process Office MSI Version call :oh_reset -call :oh_actids +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") if "%_oRoot:~-1%"=="\" set "_oRoot=%_oRoot:~0,-1%" echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 -if not [%osarch%]==[x86] if not defined _oArch set _oArch=x64 -if [%osarch%]==[x86] set _oArch=x86 - -if [%_oArch%]==[x64] (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") -if [%_oArch%]==[x86] (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") -if not [%osarch%]==[x86] ( -if [%_oArch%]==[x64] set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 +if "%osarch%"=="x86" set _oArch=x86 + +if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") +if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") +if not "%osarch%"=="x86" ( +if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) -call :oh_msiproducts +set "_common=%CommonProgramFiles%" +if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" +set "_common2=%CommonProgramFiles(x86)%" + +for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" +if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" + +call :ohookdata getmsiprod %2 echo: -echo Activating Office %1.0 %_oArch% MSI... +echo Activating Office... [MSI ^| %_version% ^| %_oArch%] + +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking BRANDING.XML [Not Found, aborting activation...]" +exit /b +) if not defined _oIds ( set error=1 -call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +call :dk_color %Red% "Checking Installed Products [Product IDs not found, aborting activation...]" exit /b ) @@ -1000,50 +1060,430 @@ 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% +:oh_findactivated + +set oVer=%2 +set _FsortIds= +set actiProds= + +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT LicenseFamily, Name FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name %1 '*Office 15*' }).LicenseFamily" %nul6%') do call set "actiProds=%%a !actiProds!" + +if not defined actiProds exit /b + +for %%# in (%actiProds%) do ( +set _sortIds=%%# +set _sortIds=!_sortIds:OfficeSPDFreeR_=SPDRetail_! +set _sortIds=!_sortIds:XC2RVL_=XVolume_! +set _sortIds=!_sortIds:CO365R_=Retail_! +set _sortIds=!_sortIds:O365R_=Retail_! +set _sortIds=!_sortIds:E5R_=Retail_! +set _sortIds=!_sortIds:MSDNR_=Retail_! +set _sortIds=!_sortIds:DemoR_=Retail_! +set _sortIds=!_sortIds:EDUR_=Retail_! +set _sortIds=!_sortIds:R_=Retail_! +set _sortIds=!_sortIds:VL_=Volume_! +set _sortIds=!_sortIds:Office16=! +set _sortIds=!_sortIds:Office19=! +set _sortIds=!_sortIds:Office21=! +set _sortIds=!_sortIds:Office24=! +set _sortIds=!_sortIds:Office=! +for /f "tokens=1 delims=-_" %%a in ("!_sortIds!") do set "_sortIds=-%%a-" +set _FsortIds=!_sortIds! !_FsortIds! +) + +call :ohookdata findactivated %2 exit /b -:: Get Windows Activation IDs +:: Below IDs are not checked for permanent activation +set _sortIds=!_sortIds:PreviewVL_=Volume_! +set _sortIds=!_sortIds:PreInstallR_=Retail_! -: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" %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='+$_)}" %nul6%')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) -exit /b +:oh_clearblock -:: Get Office Activation IDs +:: Find remnants of Office vNext/shared/device license block and remove it because it stops other licenses from appearing +:: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state -:oh_actids +set _sidlist= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -set oapplist= -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='0ff1ce15-a989-479d-af46-f275c6370663') 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=''0ff1ce15-a989-479d-af46-f275c6370663''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" -%chkapp% do (if defined oapplist (call set "oapplist=!oapplist! %%a") else (call set "oapplist=%%a")) +if not defined _sidlist ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" exit /b +) -:: Check wmic.exe +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 -:dk_ckeckwmic +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" +) + +::========================== + +:: Load the unloaded useraccounts registry + +set loadedsids= +set failedtoload= +set failedtounload= +for %%# in (%_sidlist%) do ( +reg query HKU\%%#\Software %nul% || ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +reg load HKU\%%# "%%b\NTUSER.DAT" %nul% +reg query HKU\%%#\Software %nul% && ( +call set "loadedsids=%%loadedsids%% %%#" +) || ( +set failedtoload=1 +) +) +) +) + +::========================== + +:: Clear the vNext/shared/device license blocks which may prevent ohook activation + +rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% + +for %%x in (15 16) do ( +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% + +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\%%x.0\Licensing\" %nul% +) +) +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +) + +:: Clear SharedComputerLicensing for office +:: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation + +if not defined scaIsNeeded ( +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +) + +:: Clear device-based-licensing +:: https://learn.microsoft.com/deployoffice/device-based-licensing + +for /f %%# in ('reg query "%o16c2r_reg%\Configuration" /f *.DeviceBasedLicensing %nul6% ^| findstr REG_') do reg delete "%o16c2r_reg%\Configuration" /v %%# /f %nul% + +:: Remove OEM registry key +:: https://support.microsoft.com/office/office-repeatedly-prompts-you-to-activate-on-a-new-pc-a9a6b05f-f6ce-4d1f-8d49-eb5007b64ba1 + +for %%# in (15 16) do ( +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f /reg:32 %nul% +) + +reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\59a52881-a989-479d-af46-f275c6370663" /f %nul% + +echo Clearing Office License Blocks [Successfully cleared from all %counter% user accounts] + +::========================== + +:: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." +:: Resiliency registry entry can skip this check + +if defined o16c2r if defined officeact ( +reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% +reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +reg unload HKU\DEF_TEMP %nul% +reg query HKU\DEF_TEMP %nul% && set failedtounload=1 + +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% +reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +) +echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +) + +::========================== + +:: Unload the loaded useraccounts registry + +for %%# in (%loadedsids%) do ( +reg unload HKU\%%# %nul% +reg query HKU\%%# %nul% && set failedtounload=1 +) + +if defined failedtoload ( +set error=1 +call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) + +if defined failedtounload ( +set error=1 +call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) + +exit /b + +::======================================================================================================================================== + +:: Uninstall other / grace Keys + +:oh_uninstkey + +set upk_result=0 +call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 + +if "%_actprojvis%"=="1" ( +set _allactid= +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) else ( +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) + +for %%# in (%apps%) do ( +echo "%_allactid%" | find /i "%%#" %nul1% || ( + +if %_wmic% EQU 1 wmic path %spp% where ID='%%#' call UninstallProductKey %nul% +if %_wmic% EQU 0 %psc% "$null=([WMI]'%spp%=''%%#''').UninstallProductKey()" %nul% + +if !errorlevel!==0 ( +set upk_result=1 +) else ( +set error=1 +set upk_result=2 +) +) +) + +if defined officeact if not %upk_result%==0 echo: +if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] +if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" +exit /b + +::======================================================================================================================================== + +:: Refresh Windows Insider Preview Licenses +:: It required in Insider versions otherwise office may not activate + +:oh_licrefresh + +if exist "%SysPath%\spp\store_test\2.0\tokens.dat" ( +%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if !errorlevel! NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +) +exit /b + +::======================================================================================================================================== + +:: Check running office apps and notify user + +:oh_checkapps + +set checkapps= +set checknames= +for /f "tokens=1" %%i in ('tasklist ^| findstr /I ".exe" %nul6%') do (set "checkapps=!checkapps! -%%i-") + +for %%# in ( +Access_msaccess.exe +Excel_excel.exe +Groove_groove.exe +Lync_lync.exe +OneNote_onenote.exe +Outlook_outlook.exe +PowerPoint_powerpnt.exe +Project_winproj.exe +Publisher_mspub.exe +Visio_visio.exe +Word_winword.exe +Lime_lime.exe +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo !checkapps! | find /i "-%%B-" %nul1% && (if defined checknames (set "checknames=!checknames! %%A") else (set "checknames=%%A")) +) +) +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 + +:: Show OS info + +:dk_showosinfo + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) +) + +echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] +exit /b + +:: Refresh license status + +:dk_refresh + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% +exit /b + +:: Install Key + +:dk_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] +) else ( +call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." +call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +set error=1 +) + +exit /b + +:: Get all products Activation IDs + +:dk_actids + +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + +:: Check wmic.exe + +:dk_ckeckwmic set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +) +exit /b + +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] ) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" 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%%') @@ -1068,9 +1508,68 @@ exit /b ::======================================================================================================================================== +:dk_chkmal + +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. + +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico +if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS +set pupfound=%pupfound1%%pupfound2% + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +set wucount=0 +for %%# in (wuauserv) do ( +set _corrupt= +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 & set /a wucount+=1) +) +) +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) +exit /b + +::======================================================================================================================================== + :dk_errorcheck set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) + +::======================================================================================================================================== :: Check corrupt services @@ -1082,7 +1581,6 @@ 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 /i %%#==TrustedInstaller if /i %%G==DependOnService set _corrupt= ) if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) @@ -1090,6 +1588,7 @@ if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (s if defined serv_cor ( set error=1 +set showfix=1 call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) @@ -1116,12 +1615,6 @@ if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%# if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% -if /i %%#==DoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==UsoSvc sc config %%# start= delayed-auto %nul% -if /i %%#==CryptSvc sc config %%# start= auto %nul% -if /i %%#==BITS sc config %%# start= delayed-auto %nul% -if /i %%#==wuauserv sc config %%# start= demand %nul% -if /i %%#==WaaSMedicSvc sc config %%# start= demand %nul% if !errorlevel!==0 ( if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") ) else ( @@ -1148,7 +1641,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% Start-Service %%# %nul% +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1162,7 +1655,7 @@ if defined serv_e ( set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( -call :dk_color %Blue% "Restart the system to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) @@ -1198,96 +1691,94 @@ call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE set wpainfo= set wpaerror= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) echo "%wpainfo%" | find /i "Error Found" %nul% && ( set error=1 set wpaerror=1 -call :dk_color %Red% "Checking WPA Registry Error [%wpainfo%]" +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" ) || ( echo Checking WPA Registry Count [%wpainfo%] ) -DISM /English /Online /Get-CurrentEdition %nul% -set dism_error=%errorlevel% -cmd /c exit /b %dism_error% -if %dism_error% NEQ 0 set "dism_error=0x%=ExitCode%" -if %dism_error% NEQ 0 ( -call :dk_color %Red% "Checking DISM [Not Responding] [%dism_error%]" -) - - if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 -set showfix=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" -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 %mas%genuine-installation-media.html" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) ) -set osedition= +set osedition=0 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 an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if not %osedition%==0 ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( -if not defined osedition ( +if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SystemRoot%\System32\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set error=1 +set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( set error=1 -call :dk_color %Red% "Checking Package File [Not Found] [%osedition%]" +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" if %error_code% NEQ 0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" -) - - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] %error_code%" ) 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 %_wmic% EQU 0 %psc% "Get-WmiObject -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." +call :dk_color %Red% "Checking WMI [Not Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) +if not defined officeact ( +if %winbuild% GEQ 10240 ( %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%]" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) +) ) - reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 @@ -1303,17 +1794,49 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System ) +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. + +if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +echo Checking Eval WLMS Service [Found] +) +) + + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) +) + + 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% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]" -%psc% Restart-Service sppsvc %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" set error=1 ) 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 %Blue% "Possibly Caused By Gaming Spoofers. Help: %mas%troubleshoot" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1321,29 +1844,49 @@ 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%\" ( +if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 set error=1 -REM This code creates token folder only if it's missing and sets default permission for it +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +:: This code creates token folder only if it's missing and sets default permission for it + +if not defined toerr if not exist "%tokenstore%\" ( 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)';" +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 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%\]" +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) ) -call :dk_actids -if not defined applist ( -%psc% Stop-Service sppsvc %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 ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set "_notfoundids=Not found" +) set error=1 -call :dk_color %Red% "Checking Activation IDs [Not Found]" +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) @@ -1354,41 +1897,65 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke ) -if not exist %SystemRoot%\system32\sppsvc.exe ( -set error=1 -set showfix=1 -call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +) ) -:: This code checks if NT SERVICE\sppsvc has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if not exist "%tokenstore%\" set permerror=1 - +if %winbuild% GEQ 9200 ( for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) +) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) ) + if defined permerror ( set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 -call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +) ) -:: If required services are not disabled or corrupted + if there is any error + slmgr /dlv errorlevel is not Zero + no fix was shown before +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." ) +) if not defined showfix if defined wpaerror ( set showfix=1 @@ -1400,33 +1967,49 @@ exit /b :: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems :wpatest: -$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA") -$count = $wpaKey.SubKeyCount - +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} $osVersion = [System.Environment]::OSVersion.Version $minBuildNumber = 14393 - if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $keyNumber = $subkeyName -replace '.*-', '' - $subkeyHashTable[$keyNumber] = $true + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Host "Total Keys $count. Error Found- $i key does not exist" + Write-Output "Total Keys $count. Error Found - $i key does not exist." $wpaKey.Close() - exit + exit } } } $wpaKey.GetSubKeyNames() | ForEach-Object { - $subkey = $wpaKey.OpenSubKey($_) - $p = $subkey.GetValueNames() - if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { - Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" - $wpaKey.Close() - exit + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } } } $count @@ -1459,8 +2042,21 @@ exit /b echo: if %_unattended%==1 timeout /t 2 & exit /b + +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 ::======================================================================================================================================== @@ -1476,204 +2072,211 @@ exit /b set f= for %%# in ( -15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7%f%RFY-7N%f%XPK-Q43%f%42-Y9%f%X2H-3JX%f%4X_Retail________AccessRetail -15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9M%f%F9G-CN%f%32B-HV7%f%XT-9X%f%J8T-9KV%f%F4_MAK___________AccessVolume -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT%f%889-MB%f%H4X-8MD%f%4H-X8%f%R2D-WQH%f%F8_Retail________ExcelRetail -15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3%f%N36-YC%f%HDK-XYW%f%BG-KY%f%QVV-BDT%f%J2_MAK___________ExcelVolume -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_BM%f%K4W-6N%f%88B-BP9%f%QR-PH%f%FCK-MG7%f%GF_Retail________GrooveRetail -15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN%f%84D-7H%f%CWY-FTC%f%BK-JM%f%XWM-HT7%f%GJ_MAK___________GrooveVolume -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2W%f%QNF-GB%f%K4B-XVG%f%6F-BB%f%MX7-M4F%f%2Y_OEM-Perp______HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YW%f%D4R-CN%f%KVT-VG8%f%VJ-93%f%33B-RCW%f%9F_Subscription__HomeBusinessRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_6W%f%W3N-BD%f%GM9-PCC%f%HD-9Q%f%PP9-P34%f%QG_Subscription__HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_RV%f%7NQ-HY%f%3WW-7CK%f%WH-QT%f%VMW-29V%f%HC_Retail________InfoPathRetail -15_9e016989-4007-42a6-8051-64eb97110cf2_C4%f%TGN-QQ%f%W6Y-FYK%f%XC-6W%f%JW7-X73%f%VG_MAK___________InfoPathVolume -15_9103f3ce-1084-447a-827e-d6097f68c895_6M%f%DN4-WF%f%3FV-4WH%f%3Q-W6%f%99V-RGC%f%MY_PrepidBypass__LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N4%f%2BF-CB%f%Y9F-W2C%f%7R-X3%f%97X-DYF%f%QW_PrepidBypass__LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_89%f%P23-2N%f%K2R-JXM%f%2M-3Q%f%8R8-BWM%f%3Y_Retail________LyncRetail -15_e1264e10-afaf-4439-a98b-256df8bb156f_3W%f%KCD-RN%f%489-4M7%f%XJ-GJ%f%2GQ-YBF%f%Q6_MAK___________LyncVolume -15_69ec9152-153b-471a-bf35-77ec88683eae_VN%f%WHF-FK%f%FBW-Q2R%f%GD-HY%f%HWF-R3H%f%H2_Subscription__MondoRetail -15_f33485a0-310b-4b72-9a0e-b1d605510dbd_2Y%f%NYQ-FQ%f%MVG-CB8%f%KW-6X%f%KYD-M7R%f%RJ_MAK___________MondoVolume -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_4T%f%GWV-6N%f%9P6-G2H%f%8Y-2H%f%WKB-B4F%f%F4_Bypass________OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_3K%f%XXQ-PV%f%N2C-8P7%f%YY-HC%f%V88-GVG%f%Q6_Retail________OneNoteRetail -15_b067e965-7521-455b-b9f7-c740204578a2_JD%f%MWF-NJ%f%C7B-HRC%f%HY-WF%f%T8G-BPX%f%D9_MAK___________OneNoteVolume -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_9N%f%4RQ-CF%f%8R2-HBV%f%CB-J3%f%C9V-94P%f%4D_Retail________OutlookRetail -15_8d577c50-ae5e-47fd-a240-24986f73d503_HN%f%G29-GG%f%WRG-RFC%f%8C-JT%f%FP4-2J9%f%FH_MAK___________OutlookVolume -15_5aab8561-1686-43f7-9ff5-2c861da58d17_9C%f%YB3-NF%f%MRW-YFD%f%G6-XC%f%7TF-BY3%f%6J_OEM-Perp______PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_2N%f%CQJ-MF%f%RMH-TXV%f%83-J7%f%V4C-RVR%f%WC_Retail________PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_HV%f%MN2-KP%f%HQH-DVQ%f%MK-7B%f%3CM-FGB%f%FC_Retail________PowerPointRetail -15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_47%f%DKN-HP%f%JP7-RF9%f%M3-VC%f%YT2-TMQ%f%4G_MAK___________PowerPointVolume -15_064383fa-1538-491c-859b-0ecab169a0ab_N3%f%QMM-GK%f%DT3-JQG%f%X6-7X%f%3MQ-4GB%f%G3_Retail________ProPlusRetail -15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_QK%f%HNX-M9%f%GGH-T3Q%f%MW-YP%f%K4Q-QRP%f%9V_MAK___________ProPlusVolume -15_4e26cac1-e15a-4467-9069-cb47b67fe191_CF%f%9DD-6C%f%NW2-BJW%f%JQ-CV%f%CFX-Y7T%f%XD_OEM-Perp______ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_MB%f%QBN-CQ%f%PT6-PXR%f%MC-TY%f%JFR-3C8%f%MY_Retail________ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_WP%f%Y8N-PD%f%PY4-FC7%f%TF-KM%f%P7P-KWY%f%FY_Subscription__ProjectProRetail -15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_WF%f%CT2-NB%f%FQ7-JD7%f%VV-MF%f%JX6-6F2%f%CM_MAK___________ProjectProVolume -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_NT%f%HQT-VK%f%K6W-BRB%f%87-HV%f%346-Y96%f%W8_Subscription__ProjectStdRetail -15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_3C%f%NQX-T3%f%4TY-99R%f%H4-C4%f%YD2-KWY%f%GV_MAK___________ProjectStdVolume -15_c3a0814a-70a4-471f-af37-2313a6331111_TW%f%NCJ-YR%f%84W-X7P%f%PF-6D%f%PRP-D67%f%VC_Retail________PublisherRetail -15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_DJ%f%PHV-NC%f%JV6-GWP%f%T6-K2%f%6JX-C7G%f%X6_MAK___________PublisherVolume -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_3N%f%Y6J-WH%f%T3F-47B%f%DV-JH%f%F36-234%f%3W_PrepidBypass__SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_V6%f%VWN-KC%f%2HR-YYD%f%D6-9V%f%7HQ-7T7%f%VP_Retail________StandardRetail -15_a24cca51-3d54-4c41-8a76-4031f5338cb2_9T%f%N6B-PC%f%YH4-MCV%f%DQ-KT%f%83C-TMQ%f%7T_MAK___________StandardVolume -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NV%f%K2G-2M%f%Y4G-7JX%f%2P-7D%f%6F2-VFQ%f%BR_Subscription__VisioProRetail -15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_YN%f%7CF-XR%f%H6R-CGK%f%RY-GK%f%PV3-BG7%f%WF_MAK___________VisioProVolume -15_980f9e3e-f5a8-41c8-8596-61404addf677_NC%f%RB7-VP%f%48F-43F%f%YY-62%f%P3R-367%f%WK_Subscription__VisioStdRetail -15_44a1f6ff-0876-4edb-9169-dbb43101ee89_RX%f%63Y-4N%f%FK2-XTY%f%C8-C6%f%B3W-YPX%f%PJ_MAK___________VisioStdVolume -15_191509f2-6977-456f-ab30-cf0492b1e93a_NB%f%77V-RP%f%FQ6-PMM%f%KQ-T8%f%7DV-M4D%f%84_Retail________WordRetail -15_9cedef15-be37-4ff0-a08a-13a045540641_RP%f%HPB-Y7%f%NC4-3VY%f%FM-DW%f%7VD-G8Y%f%J8_MAK___________WordVolume -15_6337137e-7c07-4197-8986-bece6a76fc33_2P%f%3C9-BQ%f%NJH-VCV%f%PH-YD%f%Y6M-43J%f%PQ_Subscription__O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2%f%W28-TN%f%9C8-26P%f%WV-F7%f%J4G-72X%f%CB_Subscription1_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_2N%f%382-D6%f%PKK-QTX%f%4D-2J%f%JYK-M96%f%P2_Subscription1_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN%f%8JP-87%f%TQJ-PBF%f%3P-Y6%f%6KC-W2K%f%9V_Subscription1_O365SmallBusPremRetail -16_bfa358b0-98f1-4125-842e-585fa13032e6_WH%f%K4N-YQ%f%GHB-XWX%f%CC-G3%f%HYC-6JF%f%94_Retail________AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RN%f%B7V-P4%f%8F4-3FY%f%Y6-2P%f%3R3-63B%f%QV_PrepidBypass__AccessRuntimeRetail -16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_JJ%f%2Y4-N8%f%KM3-Y8K%f%Y3-Y2%f%2FR-R3K%f%VK_MAK___________AccessVolume -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_RK%f%JBN-VW%f%TM2-BDK%f%XX-RK%f%QFD-JTY%f%Q2_Retail________ExcelRetail -16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FV%f%GNR-X8%f%2B2-6PR%f%JM-YT%f%4W7-8HV%f%36_MAK___________ExcelVolume -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2W%f%QNF-GB%f%K4B-XVG%f%6F-BB%f%MX7-M4F%f%2Y_OEM-Perp______HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM%f%6FM-NV%f%F78-KV9%f%PM-F3%f%6B8-D9M%f%XD_Retail________HomeBusinessRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PN%f%PRV-F2%f%627-Q8J%f%VC-3D%f%GR9-WTY%f%RK_Retail________HomeStudentRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YW%f%D4R-CN%f%KVT-VG8%f%VJ-93%f%33B-RC3%f%B8_Retail________HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_VN%f%WHF-FK%f%FBW-Q2R%f%GD-HY%f%HWF-R3H%f%H2_Subscription__MondoRetail -16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_FM%f%TQQ-84%f%NR8-274%f%4R-MX%f%F4P-PGY%f%R3_MAK___________MondoVolume -16_436366de-5579-4f24-96db-3893e4400030_XY%f%NTG-R9%f%6FY-369%f%HX-YF%f%PHY-F9C%f%PM_Bypass________OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_FX%f%F6F-CN%f%C26-W64%f%3C-K6%f%KB7-6XX%f%W3_Retail________OneNoteRetail -16_23b672da-a456-4860-a8f3-e062a501d7e8_9T%f%YVN-D7%f%6HK-BVM%f%WT-Y7%f%G88-9TP%f%PV_MAK___________OneNoteVolume -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_7N%f%4KG-P2%f%QDH-86V%f%9C-DJ%f%FVF-369%f%W9_Retail________OutlookRetail -16_50059979-ac6f-4458-9e79-710bcb41721a_7Q%f%PNR-3H%f%FDG-YP6%f%T9-JQ%f%CKQ-KKX%f%XC_MAK___________OutlookVolume -16_5aab8561-1686-43f7-9ff5-2c861da58d17_9C%f%YB3-NF%f%MRW-YFD%f%G6-XC%f%7TF-BY3%f%6J_OEM-Perp______PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_FT%f%7VF-XB%f%N92-HPD%f%JV-RH%f%MBY-6VK%f%BF_Retail________PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_N7%f%GCB-WQ%f%T7K-QRH%f%WG-TT%f%PYD-7T9%f%XF_Retail________PowerPointRetail -16_9b4060c9-a7f5-4a66-b732-faf248b7240f_X3%f%RT9-ND%f%G64-VMK%f%2M-KQ%f%6XY-DPF%f%GV_MAK___________PowerPointVolume -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_GM%f%43N-F7%f%42Q-6JD%f%DK-M6%f%22J-J8G%f%DV_Retail________ProPlusRetail -16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_FN%f%VK8-8D%f%VCJ-F7X%f%3J-KG%f%VQB-RC2%f%QY_MAK___________ProPlusVolume -16_4e26cac1-e15a-4467-9069-cb47b67fe191_CF%f%9DD-6C%f%NW2-BJW%f%JQ-CV%f%CFX-Y7T%f%XD_OEM-Perp______ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_NX%f%FTK-YD%f%9Y7-X9M%f%MJ-9B%f%WM6-J2Q%f%VH_Retail________ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_WP%f%Y8N-PD%f%PY4-FC7%f%TF-KM%f%P7P-KWY%f%FY_Subscription__ProjectProRetail -16_82f502b5-b0b0-4349-bd2c-c560df85b248_PK%f%C3N-8F%f%99H-28M%f%VY-J4%f%RYY-CWG%f%DH_MAK___________ProjectProVolume -16_16728639-a9ab-4994-b6d8-f81051e69833_JB%f%NPH-YF%f%2F7-Q9Y%f%29-86%f%CTG-C9Y%f%GV_MAKC2R________ProjectProXVolume -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_NT%f%HQT-VK%f%K6W-BRB%f%87-HV%f%346-Y96%f%W8_Subscription__ProjectStdRetail -16_82e6b314-2a62-4e51-9220-61358dd230e6_4T%f%GWV-6N%f%9P6-G2H%f%8Y-2H%f%WKB-B4G%f%93_MAK___________ProjectStdVolume -16_431058f0-c059-44c5-b9e7-ed2dd46b6789_N3%f%W2Q-69%f%MBT-27R%f%D9-BH%f%8V3-JT2%f%C8_MAKC2R________ProjectStdXVolume -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_WK%f%WND-X6%f%G9G-CDM%f%TV-CP%f%GYJ-6MV%f%BF_Retail________PublisherRetail -16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_9Q%f%VN2-PX%f%XRX-8V4%f%W8-Q7%f%926-TJG%f%D8_MAK___________PublisherVolume -16_9103f3ce-1084-447a-827e-d6097f68c895_6M%f%DN4-WF%f%3FV-4WH%f%3Q-W6%f%99V-RGC%f%MY_PrepidBypass__SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_4N%f%4D8-3J%f%7Y3-YYW%f%7C-73%f%HD2-V8R%f%HY_PrepidBypass__SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_PB%f%J79-77%f%NY4-VRG%f%FG-Y8%f%WYC-CKC%f%RC_Retail________SkypeforBusinessRetail -16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_DM%f%TCJ-KN%f%RKR-JV8%f%TQ-V2%f%CR2-VFT%f%FH_MAK___________SkypeforBusinessVolume -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_2F%f%PWN-4H%f%6CM-KD8%f%QQ-8H%f%CHC-P9X%f%YW_Retail________StandardRetail -16_0ed94aac-2234-4309-ba29-74bdbb887083_WH%f%GMQ-JN%f%MGT-MDQ%f%VF-WD%f%R69-KQB%f%WC_MAK___________StandardVolume -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NV%f%K2G-2M%f%Y4G-7JX%f%2P-7D%f%6F2-VFQ%f%BR_Subscription__VisioProRetail -16_295b2c03-4b1c-4221-b292-1411f468bd02_NR%f%KT9-C8%f%GP2-XDY%f%XQ-YW%f%72K-MG9%f%2B_MAK___________VisioProVolume -16_0594dc12-8444-4912-936a-747ca742dbdb_G9%f%8Q2-B6%f%N77-CFH%f%9J-K8%f%24G-XQC%f%C4_MAKC2R________VisioProXVolume -16_980f9e3e-f5a8-41c8-8596-61404addf677_NC%f%RB7-VP%f%48F-43F%f%YY-62%f%P3R-367%f%WK_Subscription__VisioStdRetail -16_44151c2d-c398-471f-946f-7660542e3369_XN%f%CJB-YY%f%883-JRW%f%64-DP%f%XMX-JXC%f%R6_MAK___________VisioStdVolume -16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_B2%f%HTN-JP%f%H8C-J6Y%f%6V-HC%f%HKB-43M%f%GT_MAKC2R________VisioStdXVolume -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_P8%f%K82-NQ%f%7GG-JKY%f%8T-6V%f%HVY-88G%f%GD_Retail________WordRetail -16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_YH%f%MWC-YN%f%6V9-WJP%f%XD-3W%f%QKP-TMV%f%CV_MAK___________WordVolume -16_518687bd-dc55-45b9-8fa6-f918e1082e83_WR%f%YJ6-G3%f%NP7-7VH%f%94-8X%f%7KP-JB7%f%HC_Retail________Access2019Retail -16_385b91d6-9c2c-4a2e-86b5-f44d44a48c5f_6F%f%WHX-NK%f%YXK-BW3%f%4Q-7X%f%C9F-Q9P%f%X7_MAK-AE________Access2019Volume -16_22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FG%f%QNJ-JW%f%JCG-7Q8%f%MG-RM%f%RGJ-9TQ%f%VF_PrepidBypass__AccessRuntime2019Retail -16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KB%f%PNW-64%f%CMM-8KW%f%CB-23%f%F44-8B7%f%HM_Retail________Excel2019Retail -16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8N%f%T4X-GQ%f%MCK-62X%f%4P-TW%f%6QP-YKP%f%YF_MAK-AE________Excel2019Volume -16_7fe09eef-5eed-4733-9a60-d7019df11cac_QB%f%N2Y-9B%f%284-9KW%f%78-K4%f%8PB-R62%f%YT_Retail________HomeBusiness2019Retail -16_4539aa2c-5c31-4d47-9139-543a868e5741_XN%f%WPM-32%f%XQC-Y7Q%f%JC-QG%f%GBV-YY7%f%JK_Retail________HomeStudent2019Retail -16_20e359d5-927f-47c0-8a27-38adbdd27124_WR%f%43D-NM%f%WQQ-HCQ%f%R2-VK%f%XDR-37B%f%7H_Retail________Outlook2019Retail -16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN%f%3QB-GT%f%6D7-YB3%f%VH-F3%f%RPB-3GQ%f%YB_MAK-AE________Outlook2019Volume -16_2747b731-0f1f-413e-a92d-386ec1277dd8_NM%f%BY8-V3%f%CV7-BX6%f%K6-29%f%22Y-43M%f%7T_Retail________Personal2019Retail -16_7e63cc20-ba37-42a1-822d-d5f29f33a108_HN%f%27K-JH%f%J8R-7T7%f%KK-WJ%f%YC3-FM7%f%MM_Retail________PowerPoint2019Retail -16_13c2d7bf-f10d-42eb-9e93-abf846785434_29%f%GNM-VM%f%33V-WR2%f%3K-HG%f%2DT-KTQ%f%YR_MAK-AE________PowerPoint2019Volume -16_a3072b8f-adcc-4e75-8d62-fdeb9bdfae57_BN%f%4XJ-R9%f%DYY-96W%f%48-YK%f%8DM-MY7%f%PY_Retail________ProPlus2019Retail -16_6755c7a7-4dfe-46f5-bce8-427be8e9dc62_T8%f%YBN-4Y%f%V3X-KK2%f%4Q-QX%f%BD7-T3C%f%63_MAK-AE________ProPlus2019Volume -16_1717c1e0-47d3-4899-a6d3-1022db7415e0_9N%f%XDK-MR%f%Y98-2VJ%f%V8-GF%f%73J-TQ9%f%FK_Retail________Professional2019Retail -16_0d270ef7-5aaf-4370-a372-bc806b96adb7_JD%f%TNC-PP%f%77T-T9H%f%2W-G4%f%J2J-VH8%f%JK_Retail________ProjectPro2019Retail -16_d4ebadd6-401b-40d5-adf4-a5d4accd72d1_TB%f%XBD-FN%f%WKJ-WRH%f%BD-KB%f%PHH-XD9%f%F2_MAK-AE________ProjectPro2019Volume -16_bb7ffe5f-daf9-4b79-b107-453e1c8427b5_R3%f%JNT-8P%f%BDP-MTW%f%CK-VD%f%2V8-HMK%f%F9_Retail________ProjectStd2019Retail -16_fdaa3c03-dc27-4a8d-8cbf-c3d843a28ddc_RB%f%RFX-MQ%f%NDJ-4XF%f%HF-7Q%f%VDR-JHX%f%GC_MAK-AE________ProjectStd2019Volume -16_f053a7c7-f342-4ab8-9526-a1d6e5105823_4Q%f%C36-NW%f%3YH-D2Y%f%9D-RJ%f%PC7-VVB%f%9D_Retail________Publisher2019Retail -16_40055495-be00-444e-99cc-07446729b53e_K8%f%F2D-NB%f%M32-BF2%f%6V-YC%f%KFJ-29Y%f%9W_MAK-AE________Publisher2019Volume -16_b639e55c-8f3e-47fe-9761-26c6a786ad6b_JB%f%DKF-6N%f%CD6-49K%f%3G-2T%f%V79-BKP%f%73_Retail________SkypeforBusiness2019Retail -16_15a430d4-5e3f-4e6d-8a0a-14bf3caee4c7_9M%f%NQ7-YP%f%Q3B-6WJ%f%XM-G8%f%3T3-CBB%f%DK_MAK-AE________SkypeforBusiness2019Volume -16_f88cfdec-94ce-4463-a969-037be92bc0e7_N9%f%722-BV%f%9H6-WTJ%f%TT-FP%f%B93-978%f%MK_PrepidBypass__SkypeforBusinessEntry2019Retail -16_fdfa34dd-a472-4b85-bee6-cf07bf0aaa1c_ND%f%GVM-MD%f%27H-2XH%f%VC-KD%f%DX2-YKP%f%74_Retail________Standard2019Retail -16_beb5065c-1872-409e-94e2-403bcfb6a878_NT%f%3V6-XM%f%BK7-Q66%f%MF-VM%f%KR4-FC3%f%3M_MAK-AE________Standard2019Volume -16_a6f69d68-5590-4e02-80b9-e7233dff204e_2N%f%WVW-QG%f%F4T-9CP%f%MB-WY%f%DQ9-7XP%f%79_Retail________VisioPro2019Retail -16_f41abf81-f409-4b0d-889d-92b3e3d7d005_33%f%YF4-GN%f%CQ3-J6G%f%DM-J6%f%7P3-FM7%f%QP_MAK-AE________VisioPro2019Volume -16_4a582021-18c2-489f-9b3d-5186de48f1cd_26%f%3WK-3N%f%797-7R4%f%37-28%f%BKG-3V8%f%M8_Retail________VisioStd2019Retail -16_933ed0e3-747d-48b0-9c2c-7ceb4c7e473d_BG%f%NHX-QT%f%PRJ-F9C%f%9G-R8%f%QQG-8T2%f%7F_MAK-AE________VisioStd2019Volume -16_72cee1c2-3376-4377-9f25-4024b6baadf8_JX%f%R8H-NJ%f%3MK-X66%f%W8-78%f%CWD-QRV%f%R2_Retail________Word2019Retail -16_fe5fe9d5-3b06-4015-aa35-b146f85c4709_9F%f%36R-PN%f%VHH-3DX%f%GQ-7C%f%D2H-R9D%f%3V_MAK-AE________Word2019Volume -16_f634398e-af69-48c9-b256-477bea3078b5_P2%f%86B-N3%f%XYP-36Q%f%RQ-29%f%CMP-RVX%f%9M_Retail________Access2021Retail -16_ae17db74-16b0-430b-912f-4fe456e271db_JB%f%H3N-P9%f%7FP-FRT%f%JD-MG%f%K2C-VFW%f%G6_MAK-AE________Access2021Volume -16_fb099c19-d48b-4a2f-a160-4383011060aa_V6%f%QFB-7N%f%7G9-PF7%f%W9-M8%f%FQM-MY8%f%G9_Retail________Excel2021Retail -16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WN%f%YR4-KM%f%R9H-KVC%f%8W-7H%f%J8B-K79%f%DQ_MAK-AE________Excel2021Volume -16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM%f%99N-4M%f%MD8-DQC%f%GJ-VM%f%YFY-R63%f%YK_Subscription__HomeBusiness2021Retail -16_2f258377-738f-48dd-9397-287e43079958_N3%f%CWD-38%f%XVH-KRX%f%2Y-YR%f%P74-6RB%f%B2_Subscription__HomeStudent2021Retail -16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB%f%2TQ-3Y%f%79C-77C%f%6M-QM%f%Y7H-7QY%f%8P_Retail________OneNote2021Retail -16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4N%f%CWR-9V%f%92Y-34V%f%B2-RP%f%THR-YTG%f%R7_Retail________Outlook2021Retail -16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ%f%9MJ-QY%f%N6B-67P%f%X9-GY%f%FVY-QJ6%f%TB_MAK-AE________Outlook2021Volume -16_8f89391e-eedb-429d-af90-9d36fbf94de6_RR%f%RYB-DN%f%749-GCP%f%W4-9H%f%6VK-HCH%f%PT_Retail________Personal2021Retail -16_c9bf5e86-f5e3-4ac6-8d52-e114a604d7bf_3K%f%XXQ-PV%f%N2C-8P7%f%YY-HC%f%V88-GVM%f%96_Retail1_______PowerPoint2021Retail -16_716f2434-41b6-4969-ab73-e61e593a3875_39%f%G2N-3B%f%D9C-C4X%f%CM-BD%f%4QG-FVY%f%DY_MAK-AE________PowerPoint2021Volume -16_c2f04adf-a5de-45c5-99a5-f5fddbda74a8_8W%f%XTP-MN%f%628-KY4%f%4G-VJ%f%WCK-C7P%f%CF_Retail________ProPlus2021Retail -16_3f180b30-9b05-4fe2-aa8d-0c1c4790f811_RN%f%HJY-DT%f%FXW-HW9%f%F8-49%f%82D-MD2%f%CW_MAK-AE1_______ProPlus2021Volume -16_96097a68-b5c5-4b19-8600-2e8d6841a0db_JR%f%JNJ-33%f%M7C-R73%f%X3-P9%f%XF7-R9F%f%6M_MAK-AE________ProPlusSPLA2021Volume -16_711e48a6-1a79-4b00-af10-73f4ca3aaac4_DJ%f%PHV-NC%f%JV6-GWP%f%T6-K2%f%6JX-C7P%f%BG_Retail________Professional2021Retail -16_3747d1d5-55a8-4bc3-b53d-19fff1913195_QK%f%HNX-M9%f%GGH-T3Q%f%MW-YP%f%K4Q-QRW%f%MV_Retail________ProjectPro2021Retail -16_17739068-86c4-4924-8633-1e529abc7efc_HV%f%C34-CV%f%NPG-RVC%f%MT-X2%f%JRF-CR7%f%RK_MAK-AE1_______ProjectPro2021Volume -16_4ea64dca-227c-436b-813f-b6624be2d54c_2B%f%96V-X9%f%NJY-WFB%f%RC-Q8%f%MP2-7CH%f%RR_Retail________ProjectStd2021Retail -16_84313d1e-47c8-4e27-8ced-0476b7ee46c4_3C%f%NQX-T3%f%4TY-99R%f%H4-C4%f%YD2-KW6%f%WH_MAK-AE________ProjectStd2021Volume -16_b769b746-53b1-4d89-8a68-41944dafe797_CD%f%NFG-77%f%T8D-VKQ%f%JX-B7%f%KT3-KK2%f%8V_Retail1_______Publisher2021Retail -16_a0234cfe-99bd-4586-a812-4f296323c760_2K%f%XJH-3N%f%HTW-RDB%f%PX-QF%f%RXJ-MTG%f%XF_MAK-AE________Publisher2021Volume -16_c3fb48b2-1fd4-4dc8-af39-819edf194288_DV%f%BXN-HF%f%T43-CVP%f%RQ-J8%f%9TF-VMM%f%HG_Retail________SkypeforBusiness2021Retail -16_6029109c-ceb8-4ee5-b324-f8eb2981e99a_R3%f%FCY-NH%f%GC7-CBP%f%VP-8Q%f%934-YTG%f%XG_MAK-AE________SkypeforBusiness2021Volume -16_9e7e7b8e-a0e7-467b-9749-d0de82fb7297_HX%f%NXB-J4%f%JGM-TCF%f%44-2X%f%2CV-FJV%f%VH_Retail________Standard2021Retail -16_223a60d8-9002-4a55-abac-593f5b66ca45_2C%f%JN4-C9%f%XK2-HFP%f%Q6-YH%f%498-82T%f%XH_MAK-AE________Standard2021Volume -16_b99ba8c4-e257-4b70-a31a-8bd308ce7073_BQ%f%WDW-NJ%f%9YF-P7Y%f%79-H6%f%DCT-MKQ%f%9C_MAK-AE________StandardSPLA2021Volume -16_814014d3-c30b-4f63-a493-3708e0dc0ba8_T6%f%P26-NJ%f%VBR-76B%f%K8-WB%f%CDY-TX3%f%BC_Retail________VisioPro2021Retail -16_c590605a-a08a-4cc7-8dc2-f1ffb3d06949_JN%f%KBX-MH%f%9P4-K8Y%f%YV-8C%f%G2Y-VQ2%f%C8_MAK-AE________VisioPro2021Volume -16_16d43989-a5ef-47e2-9ff1-272784caee24_89%f%NYY-KB%f%93R-7X2%f%2F-93%f%QDF-DJ6%f%YM_Retail________VisioStd2021Retail -16_d55f90ee-4ba2-4d02-b216-1300ee50e2af_BW%f%43B-4P%f%NFP-V63%f%7F-23%f%TR2-J47%f%TX_MAK-AE________VisioStd2021Volume -16_fb33d997-4aa3-494e-8b58-03e9ab0f181d_VN%f%CC4-CJ%f%QVK-BKX%f%34-77%f%Y8H-CYX%f%MR_Retail________Word2021Retail -16_0c728382-95fb-4a55-8f12-62e605f91727_BJ%f%G97-NW%f%3GM-8QQ%f%Q7-FH%f%76G-686%f%XM_MAK-AE________Word2021Volume -16_8fdb1f1e-663f-4f2e-8fdb-7c35aee7d5ea_GN%f%XWX-DF%f%797-B2J%f%T3-82%f%W27-KHP%f%XT_MAK-AE________ProPlus2024Volume-Preview -16_33b11b14-91fd-4f7b-b704-e64a055cf601_X8%f%6XX-N3%f%QMW-B4W%f%GQ-QC%f%B69-V26%f%KW_MAK-AE________ProjectPro2024Volume-Preview -16_eb074198-7384-4bdd-8e6c-c3342dac8435_DW%f%99Y-H7%f%NT6-6B2%f%9D-8J%f%Q8F-R3Q%f%T7_MAK-AE________VisioPro2024Volume-Preview -16_e563d108-7b0e-418a-8390-20e1d133d6bb_P6%f%NMW-JM%f%TRC-R6M%f%Q6-HH%f%3F2-BTH%f%KB_Retail________Access2024Retail -16_f748e2f7-5951-4bc2-8a06-5a1fbe42f5f4_CX%f%NJT-98%f%HPP-92H%f%X7-MX%f%6GY-2PV%f%FR_MAK-AE________Access2024Volume -16_f3a5e86a-e4f8-4d88-8220-1440c3bbcefa_82%f%CNJ-W8%f%2TW-BY2%f%3W-BV%f%J6W-W48%f%GP_Retail________Excel2024Retail -16_523fbbab-c290-460d-a6c9-48e49709cb8e_7Y%f%287-9N%f%2KC-8MR%f%R3-BK%f%Y82-2DQ%f%RV_MAK-AE________Excel2024Volume -16_885f83e0-5e18-4199-b8be-56697d0debfb_N6%f%9X7-73%f%KPT-899%f%FD-P8%f%HQ4-QGT%f%P4_Retail________Home2024Retail -16_acd4eccb-ff89-4e6a-9350-d2d56276ec69_PR%f%KQM-YN%f%PQR-77Q%f%T6-32%f%8D7-BD2%f%23_Retail________HomeBusiness2024Retail -16_6f5fd645-7119-44a4-91b4-eccfeeb738bf_2C%f%FK4-N4%f%4KG-7XG%f%89-CW%f%DG6-P7P%f%27_Retail________Outlook2024Retail -16_9a1e1bac-2d8b-4890-832f-0a68b27c16e0_NQ%f%PXP-WV%f%B87-H3M%f%MB-FY%f%BW2-9QF%f%PB_MAK-AE________Outlook2024Volume -16_da9a57ae-81a8-4cb3-b764-5840e6b5d0bf_CT%f%2KT-GT%f%NWH-9HF%f%GW-J2%f%PWJ-XW7%f%KJ_Retail________PowerPoint2024Retail -16_eca0d8a6-e21b-4622-9a87-a7103ff14012_RR%f%XFN-JJ%f%26R-RVW%f%D2-V7%f%WMP-27P%f%WQ_MAK-AE________PowerPoint2024Volume -16_295dcc21-151a-4b4d-8f50-2b627ea197f6_GN%f%J6P-Y4%f%RBM-C32%f%WW-2V%f%JKJ-MTH%f%KK_Retail________ProjectPro2024Retail -16_2141d341-41aa-4e45-9ca1-201e117d6495_WN%f%FMR-HK%f%4R7-7FJ%f%VM-VQ%f%3JC-76H%f%F6_MAK-AE1_______ProjectPro2024Volume -16_ead42f74-817d-45b4-af6b-3beeb36ba650_C2%f%PNM-2G%f%QFC-CY3%f%XR-WX%f%CP4-GX3%f%XM_Retail________ProjectStd2024Retail -16_4b6d9b9b-c16e-429d-babe-8bb84c3c27d6_F2%f%VNW-MW%f%8TT-K62%f%2Q-4D%f%96H-PWJ%f%8X_MAK-AE________ProjectStd2024Volume -16_db249714-bb54-4422-8c78-2cc8d4c4a19f_VW%f%CNX-7F%f%KBD-FHJ%f%YG-XB%f%R4B-88K%f%C6_Retail________ProPlus2024Retail -16_d77244dc-2b82-4f0a-b8ae-1fca00b7f3e2_4Y%f%V2J-VN%f%G7W-YGT%f%P3-44%f%3TK-TF8%f%CP_MAK-AE1_______ProPlus2024Volume -16_3046a03e-2277-4a51-8ccd-a6609eae8c19_XK%f%RBW-KN%f%2FF-G8C%f%KY-HX%f%VG6-FVY%f%2V_MAK-AE________SkypeforBusiness2024Volume -16_44a07f51-8263-4b2f-b2a5-70340055c646_GV%f%G6N-6W%f%CHH-K2M%f%VP-RQ%f%78V-3J7%f%GJ_MAK-AE1_______Standard2024Volume -16_282d8f34-1111-4a6f-80fe-c17f70dec567_HG%f%RBX-N6%f%8QF-6DY%f%8J-CG%f%X4W-XW7%f%KP_Retail________VisioPro2024Retail -16_4c2f32bf-9d0b-4d8c-8ab1-b4c6a0b9992d_GB%f%NHB-B2%f%G3Q-G42%f%YB-3M%f%FC2-7CJ%f%CX_MAK-AE________VisioPro2024Volume -16_8504167d-887a-41ae-bd1d-f849d834352d_VB%f%XPJ-38%f%NR3-C4D%f%KF-C8%f%RT7-RGH%f%KQ_Retail________VisioStd2024Retail -16_0978336b-5611-497c-9414-96effaff4938_YN%f%FTY-63%f%K7P-FKH%f%XK-28%f%YYT-D32%f%XB_MAK-AE________VisioStd2024Volume -16_f6b24e61-6aa7-4fd2-ab9b-4046cee4230a_XN%f%33R-RP%f%676-GMY%f%2F-T3%f%MH7-GCV%f%KR_Retail________Word2024Retail -16_06142aa2-e935-49ca-af5d-08069a3d84f3_WD%f%8CQ-6K%f%NQM-8W2%f%CX-2R%f%T63-KK3%f%TP_MAK-AE________Word2024Volume -16_6337137e-7c07-4197-8986-bece6a76fc33_2P%f%3C9-BQ%f%NJH-VCV%f%PH-YD%f%Y6M-43J%f%PQ_Subscription__O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W6%f%2NQ-26%f%7QR-RTF%f%74-PF%f%2MH-JQM%f%TH_Subscription__O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2%f%W28-TN%f%9C8-26P%f%WV-F7%f%J4G-72X%f%CB_Subscription1_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_2N%f%382-D6%f%PKK-QTX%f%4D-2J%f%JYK-M96%f%P2_Subscription1_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN%f%8JP-87%f%TQJ-PBF%f%3P-Y6%f%6KC-W2K%f%9V_Subscription1_O365SmallBusPremRetail +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9MF9G-CN32B-HV7XT-9XJ8T-9K%f%VF4_MAK___________AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT889-MBH4X-8MD4H-X8R2D-WQ%f%HF8_Retail________ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3N36-YCHDK-XYWBG-KYQVV-BD%f%TJ2_MAK___________ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_BMK4W-6N88B-BP9QR-PHFCK-MG%f%7GF_Retail________GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN84D-7HCWY-FTCBK-JMXWM-HT%f%7GJ_MAK___________GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail +15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YWD4R-CNKVT-VG8VJ-9333B-RC%f%W9F_Subscription__HomeBusinessRetail +15_f2de350d-3028-410a-bfae-283e00b44d0e_6WW3N-BDGM9-PCCHD-9QPP9-P3%f%4QG_Subscription__HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_RV7NQ-HY3WW-7CKWH-QTVMW-29%f%VHC_Retail________InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_C4TGN-QQW6Y-FYKXC-6WJW7-X7%f%3VG_MAK___________InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY_PrepidBypass__LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N42BF-CBY9F-W2C7R-X397X-DY%f%FQW_PrepidBypass__LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_89P23-2NK2R-JXM2M-3Q8R8-BW%f%M3Y_Retail________LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_3WKCD-RN489-4M7XJ-GJ2GQ-YB%f%FQ6_MAK___________LyncVolume +15_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_2YNYQ-FQMVG-CB8KW-6XKYD-M7%f%RRJ_MAK___________MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%FF4_Bypass________OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_3KXXQ-PVN2C-8P7YY-HCV88-GV%f%GQ6_Retail________OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_JDMWF-NJC7B-HRCHY-WFT8G-BP%f%XD9_MAK___________OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_9N4RQ-CF8R2-HBVCB-J3C9V-94%f%P4D_Retail________OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_HNG29-GGWRG-RFC8C-JTFP4-2J%f%9FH_MAK___________OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_9CYB3-NFMRW-YFDG6-XC7TF-BY%f%36J_OEM-Perp______PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_2NCQJ-MFRMH-TXV83-J7V4C-RV%f%RWC_Retail________PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_HVMN2-KPHQH-DVQMK-7B3CM-FG%f%BFC_Retail________PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_47DKN-HPJP7-RF9M3-VCYT2-TM%f%Q4G_MAK___________PowerPointVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_N3QMM-GKDT3-JQGX6-7X3MQ-4G%f%BG3_Retail________ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_QKHNX-M9GGH-T3QMW-YPK4Q-QR%f%P9V_MAK___________ProPlusVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%TXD_OEM-Perp______ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_MBQBN-CQPT6-PXRMC-TYJFR-3C%f%8MY_Retail________ProfessionalRetail +15_2f72340c-b555-418d-8b46-355944fe66b8_WPY8N-PDPY4-FC7TF-KMP7P-KW%f%YFY_Subscription__ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_WFCT2-NBFQ7-JD7VV-MFJX6-6F%f%2CM_MAK___________ProjectProVolume +15_58d95b09-6af6-453d-a976-8ef0ae0316b1_NTHQT-VKK6W-BRB87-HV346-Y9%f%6W8_Subscription__ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_3CNQX-T34TY-99RH4-C4YD2-KW%f%YGV_MAK___________ProjectStdVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_TWNCJ-YR84W-X7PPF-6DPRP-D6%f%7VC_Retail________PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_DJPHV-NCJV6-GWPT6-K26JX-C7%f%GX6_MAK___________PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W_PrepidBypass__SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_V6VWN-KC2HR-YYDD6-9V7HQ-7T%f%7VP_Retail________StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_9TN6B-PCYH4-MCVDQ-KT83C-TM%f%Q7T_MAK___________StandardVolume +15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NVK2G-2MY4G-7JX2P-7D6F2-VF%f%QBR_Subscription__VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_YN7CF-XRH6R-CGKRY-GKPV3-BG%f%7WF_MAK___________VisioProVolume +15_980f9e3e-f5a8-41c8-8596-61404addf677_NCRB7-VP48F-43FYY-62P3R-36%f%7WK_Subscription__VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_RX63Y-4NFK2-XTYC8-C6B3W-YP%f%XPJ_MAK___________VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_NB77V-RPFQ6-PMMKQ-T87DV-M4%f%D84_Retail________WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume +:: Office 365 - 15.0 version +15_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV_PrepidBypass__AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_JJ2Y4-N8KM3-Y8KY3-Y22FR-R3%f%KVK_MAK___________AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_RKJBN-VWTM2-BDKXX-RKQFD-JT%f%YQ2_Retail________ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FVGNR-X82B2-6PRJM-YT4W7-8H%f%V36_MAK___________ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM6FM-NVF78-KV9PM-F36B8-D9%f%MXD_Retail________HomeBusinessRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PNPRV-F2627-Q8JVC-3DGR9-WT%f%YRK_Retail________HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YWD4R-CNKVT-VG8VJ-9333B-RC%f%3B8_Retail________HomeStudentVNextRetail +16_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_FMTQQ-84NR8-2744R-MXF4P-PG%f%YR3_MAK___________MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM_Bypass________OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_FXF6F-CNC26-W643C-K6KB7-6X%f%XW3_Retail________OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_9TYVN-D76HK-BVMWT-Y7G88-9T%f%PPV_MAK___________OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_7N4KG-P2QDH-86V9C-DJFVF-36%f%9W9_Retail________OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_7QPNR-3HFDG-YP6T9-JQCKQ-KK%f%XXC_MAK___________OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_9CYB3-NFMRW-YFDG6-XC7TF-BY%f%36J_OEM-Perp______PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_FT7VF-XBN92-HPDJV-RHMBY-6V%f%KBF_Retail________PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_N7GCB-WQT7K-QRHWG-TTPYD-7T%f%9XF_Retail________PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_X3RT9-NDG64-VMK2M-KQ6XY-DP%f%FGV_MAK___________PowerPointVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_GM43N-F742Q-6JDDK-M622J-J8%f%GDV_Retail________ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_FNVK8-8DVCJ-F7X3J-KGVQB-RC%f%2QY_MAK___________ProPlusVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%TXD_OEM-Perp______ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_NXFTK-YD9Y7-X9MMJ-9BWM6-J2%f%QVH_Retail________ProfessionalRetail +16_2f72340c-b555-418d-8b46-355944fe66b8_WPY8N-PDPY4-FC7TF-KMP7P-KW%f%YFY_Subscription__ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_PKC3N-8F99H-28MVY-J4RYY-CW%f%GDH_MAK___________ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_JBNPH-YF2F7-Q9Y29-86CTG-C9%f%YGV_MAKC2R________ProjectProXVolume +16_58d95b09-6af6-453d-a976-8ef0ae0316b1_NTHQT-VKK6W-BRB87-HV346-Y9%f%6W8_Subscription__ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%G93_MAK___________ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_N3W2Q-69MBT-27RD9-BH8V3-JT%f%2C8_MAKC2R________ProjectStdXVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_WKWND-X6G9G-CDMTV-CPGYJ-6M%f%VBF_Retail________PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_9QVN2-PXXRX-8V4W8-Q7926-TJ%f%GD8_MAK___________PublisherVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY_PrepidBypass__SkypeServiceBypassRetail +16_971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY_PrepidBypass__SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_PBJ79-77NY4-VRGFG-Y8WYC-CK%f%CRC_Retail________SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_DMTCJ-KNRKR-JV8TQ-V2CR2-VF%f%TFH_MAK___________SkypeforBusinessVolume +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_2FPWN-4H6CM-KD8QQ-8HCHC-P9%f%XYW_Retail________StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_WHGMQ-JNMGT-MDQVF-WDR69-KQ%f%BWC_MAK___________StandardVolume +16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_NVK2G-2MY4G-7JX2P-7D6F2-VF%f%QBR_Subscription__VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_NRKT9-C8GP2-XDYXQ-YW72K-MG%f%92B_MAK___________VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_G98Q2-B6N77-CFH9J-K824G-XQ%f%CC4_MAKC2R________VisioProXVolume +16_980f9e3e-f5a8-41c8-8596-61404addf677_NCRB7-VP48F-43FYY-62P3R-36%f%7WK_Subscription__VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_XNCJB-YY883-JRW64-DPXMX-JX%f%CR6_MAK___________VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_B2HTN-JPH8C-J6Y6V-HCHKB-43%f%MGT_MAKC2R________VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_P8K82-NQ7GG-JKY8T-6VHVY-88%f%GGD_Retail________WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_YHMWC-YN6V9-WJPXD-3WQKP-TM%f%VCV_MAK___________WordVolume +:: Office 2019 +16_518687bd-dc55-45b9-8fa6-f918e1082e83_WRYJ6-G3NP7-7VH94-8X7KP-JB%f%7HC_Retail________Access2019Retail +16_385b91d6-9c2c-4a2e-86b5-f44d44a48c5f_6FWHX-NKYXK-BW34Q-7XC9F-Q9%f%PX7_MAK-AE________Access2019Volume +16_22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FGQNJ-JWJCG-7Q8MG-RMRGJ-9T%f%QVF_PrepidBypass__AccessRuntime2019Retail +16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KBPNW-64CMM-8KWCB-23F44-8B%f%7HM_Retail________Excel2019Retail +16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8NT4X-GQMCK-62X4P-TW6QP-YK%f%PYF_MAK-AE________Excel2019Volume +16_7fe09eef-5eed-4733-9a60-d7019df11cac_QBN2Y-9B284-9KW78-K48PB-R6%f%2YT_Retail________HomeBusiness2019Retail +16_4539aa2c-5c31-4d47-9139-543a868e5741_XNWPM-32XQC-Y7QJC-QGGBV-YY%f%7JK_Retail________HomeStudent2019Retail +16_20e359d5-927f-47c0-8a27-38adbdd27124_WR43D-NMWQQ-HCQR2-VKXDR-37%f%B7H_Retail________Outlook2019Retail +16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%QYB_MAK-AE________Outlook2019Volume +16_2747b731-0f1f-413e-a92d-386ec1277dd8_NMBY8-V3CV7-BX6K6-2922Y-43%f%M7T_Retail________Personal2019Retail +16_7e63cc20-ba37-42a1-822d-d5f29f33a108_HN27K-JHJ8R-7T7KK-WJYC3-FM%f%7MM_Retail________PowerPoint2019Retail +16_13c2d7bf-f10d-42eb-9e93-abf846785434_29GNM-VM33V-WR23K-HG2DT-KT%f%QYR_MAK-AE________PowerPoint2019Volume +16_a3072b8f-adcc-4e75-8d62-fdeb9bdfae57_BN4XJ-R9DYY-96W48-YK8DM-MY%f%7PY_Retail________ProPlus2019Retail +16_6755c7a7-4dfe-46f5-bce8-427be8e9dc62_T8YBN-4YV3X-KK24Q-QXBD7-T3%f%C63_MAK-AE________ProPlus2019Volume +16_1717c1e0-47d3-4899-a6d3-1022db7415e0_9NXDK-MRY98-2VJV8-GF73J-TQ%f%9FK_Retail________Professional2019Retail +16_0d270ef7-5aaf-4370-a372-bc806b96adb7_JDTNC-PP77T-T9H2W-G4J2J-VH%f%8JK_Retail________ProjectPro2019Retail +16_d4ebadd6-401b-40d5-adf4-a5d4accd72d1_TBXBD-FNWKJ-WRHBD-KBPHH-XD%f%9F2_MAK-AE________ProjectPro2019Volume +16_bb7ffe5f-daf9-4b79-b107-453e1c8427b5_R3JNT-8PBDP-MTWCK-VD2V8-HM%f%KF9_Retail________ProjectStd2019Retail +16_fdaa3c03-dc27-4a8d-8cbf-c3d843a28ddc_RBRFX-MQNDJ-4XFHF-7QVDR-JH%f%XGC_MAK-AE________ProjectStd2019Volume +16_f053a7c7-f342-4ab8-9526-a1d6e5105823_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%B9D_Retail________Publisher2019Retail +16_40055495-be00-444e-99cc-07446729b53e_K8F2D-NBM32-BF26V-YCKFJ-29%f%Y9W_MAK-AE________Publisher2019Volume +16_b639e55c-8f3e-47fe-9761-26c6a786ad6b_JBDKF-6NCD6-49K3G-2TV79-BK%f%P73_Retail________SkypeforBusiness2019Retail +16_15a430d4-5e3f-4e6d-8a0a-14bf3caee4c7_9MNQ7-YPQ3B-6WJXM-G83T3-CB%f%BDK_MAK-AE________SkypeforBusiness2019Volume +16_f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK_PrepidBypass__SkypeforBusinessEntry2019Retail +16_fdfa34dd-a472-4b85-bee6-cf07bf0aaa1c_NDGVM-MD27H-2XHVC-KDDX2-YK%f%P74_Retail________Standard2019Retail +16_beb5065c-1872-409e-94e2-403bcfb6a878_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%33M_MAK-AE________Standard2019Volume +16_a6f69d68-5590-4e02-80b9-e7233dff204e_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%P79_Retail________VisioPro2019Retail +16_f41abf81-f409-4b0d-889d-92b3e3d7d005_33YF4-GNCQ3-J6GDM-J67P3-FM%f%7QP_MAK-AE________VisioPro2019Volume +16_4a582021-18c2-489f-9b3d-5186de48f1cd_263WK-3N797-7R437-28BKG-3V%f%8M8_Retail________VisioStd2019Retail +16_933ed0e3-747d-48b0-9c2c-7ceb4c7e473d_BGNHX-QTPRJ-F9C9G-R8QQG-8T%f%27F_MAK-AE________VisioStd2019Volume +16_72cee1c2-3376-4377-9f25-4024b6baadf8_JXR8H-NJ3MK-X66W8-78CWD-QR%f%VR2_Retail________Word2019Retail +16_fe5fe9d5-3b06-4015-aa35-b146f85c4709_9F36R-PNVHH-3DXGQ-7CD2H-R9%f%D3V_MAK-AE________Word2019Volume +:: Office 2021 +16_f634398e-af69-48c9-b256-477bea3078b5_P286B-N3XYP-36QRQ-29CMP-RV%f%X9M_Retail________Access2021Retail +16_ae17db74-16b0-430b-912f-4fe456e271db_JBH3N-P97FP-FRTJD-MGK2C-VF%f%WG6_MAK-AE________Access2021Volume +16_fb099c19-d48b-4a2f-a160-4383011060aa_V6QFB-7N7G9-PF7W9-M8FQM-MY%f%8G9_Retail________Excel2021Retail +16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WNYR4-KMR9H-KVC8W-7HJ8B-K7%f%9DQ_MAK-AE________Excel2021Volume +16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM99N-4MMD8-DQCGJ-VMYFY-R6%f%3YK_Subscription__HomeBusiness2021Retail +16_2f258377-738f-48dd-9397-287e43079958_N3CWD-38XVH-KRX2Y-YRP74-6R%f%BB2_Subscription__HomeStudent2021Retail +16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB2TQ-3Y79C-77C6M-QMY7H-7Q%f%Y8P_Retail________OneNote2021Retail +16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4NCWR-9V92Y-34VB2-RPTHR-YT%f%GR7_Retail________Outlook2021Retail +16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ9MJ-QYN6B-67PX9-GYFVY-QJ%f%6TB_MAK-AE________Outlook2021Volume +16_8f89391e-eedb-429d-af90-9d36fbf94de6_RRRYB-DN749-GCPW4-9H6VK-HC%f%HPT_Retail________Personal2021Retail +16_c9bf5e86-f5e3-4ac6-8d52-e114a604d7bf_3KXXQ-PVN2C-8P7YY-HCV88-GV%f%M96_Retail1_______PowerPoint2021Retail +16_716f2434-41b6-4969-ab73-e61e593a3875_39G2N-3BD9C-C4XCM-BD4QG-FV%f%YDY_MAK-AE________PowerPoint2021Volume +16_c2f04adf-a5de-45c5-99a5-f5fddbda74a8_8WXTP-MN628-KY44G-VJWCK-C7%f%PCF_Retail________ProPlus2021Retail +16_3f180b30-9b05-4fe2-aa8d-0c1c4790f811_RNHJY-DTFXW-HW9F8-4982D-MD%f%2CW_MAK-AE1_______ProPlus2021Volume +16_96097a68-b5c5-4b19-8600-2e8d6841a0db_JRJNJ-33M7C-R73X3-P9XF7-R9%f%F6M_MAK-AE________ProPlusSPLA2021Volume +16_711e48a6-1a79-4b00-af10-73f4ca3aaac4_DJPHV-NCJV6-GWPT6-K26JX-C7%f%PBG_Retail________Professional2021Retail +16_3747d1d5-55a8-4bc3-b53d-19fff1913195_QKHNX-M9GGH-T3QMW-YPK4Q-QR%f%WMV_Retail________ProjectPro2021Retail +16_17739068-86c4-4924-8633-1e529abc7efc_HVC34-CVNPG-RVCMT-X2JRF-CR%f%7RK_MAK-AE1_______ProjectPro2021Volume +16_4ea64dca-227c-436b-813f-b6624be2d54c_2B96V-X9NJY-WFBRC-Q8MP2-7C%f%HRR_Retail________ProjectStd2021Retail +16_84313d1e-47c8-4e27-8ced-0476b7ee46c4_3CNQX-T34TY-99RH4-C4YD2-KW%f%6WH_MAK-AE________ProjectStd2021Volume +16_b769b746-53b1-4d89-8a68-41944dafe797_CDNFG-77T8D-VKQJX-B7KT3-KK%f%28V_Retail1_______Publisher2021Retail +16_a0234cfe-99bd-4586-a812-4f296323c760_2KXJH-3NHTW-RDBPX-QFRXJ-MT%f%GXF_MAK-AE________Publisher2021Volume +16_c3fb48b2-1fd4-4dc8-af39-819edf194288_DVBXN-HFT43-CVPRQ-J89TF-VM%f%MHG_Retail________SkypeforBusiness2021Retail +16_6029109c-ceb8-4ee5-b324-f8eb2981e99a_R3FCY-NHGC7-CBPVP-8Q934-YT%f%GXG_MAK-AE________SkypeforBusiness2021Volume +16_9e7e7b8e-a0e7-467b-9749-d0de82fb7297_HXNXB-J4JGM-TCF44-2X2CV-FJ%f%VVH_Retail________Standard2021Retail +16_223a60d8-9002-4a55-abac-593f5b66ca45_2CJN4-C9XK2-HFPQ6-YH498-82%f%TXH_MAK-AE________Standard2021Volume +16_b99ba8c4-e257-4b70-a31a-8bd308ce7073_BQWDW-NJ9YF-P7Y79-H6DCT-MK%f%Q9C_MAK-AE________StandardSPLA2021Volume +16_814014d3-c30b-4f63-a493-3708e0dc0ba8_T6P26-NJVBR-76BK8-WBCDY-TX%f%3BC_Retail________VisioPro2021Retail +16_c590605a-a08a-4cc7-8dc2-f1ffb3d06949_JNKBX-MH9P4-K8YYV-8CG2Y-VQ%f%2C8_MAK-AE________VisioPro2021Volume +16_16d43989-a5ef-47e2-9ff1-272784caee24_89NYY-KB93R-7X22F-93QDF-DJ%f%6YM_Retail________VisioStd2021Retail +16_d55f90ee-4ba2-4d02-b216-1300ee50e2af_BW43B-4PNFP-V637F-23TR2-J4%f%7TX_MAK-AE________VisioStd2021Volume +16_fb33d997-4aa3-494e-8b58-03e9ab0f181d_VNCC4-CJQVK-BKX34-77Y8H-CY%f%XMR_Retail________Word2021Retail +16_0c728382-95fb-4a55-8f12-62e605f91727_BJG97-NW3GM-8QQQ7-FH76G-68%f%6XM_MAK-AE________Word2021Volume +:: Office 2024 +16_8fdb1f1e-663f-4f2e-8fdb-7c35aee7d5ea_GNXWX-DF797-B2JT3-82W27-KH%f%PXT_MAK-AE________ProPlus2024Volume-Preview +16_33b11b14-91fd-4f7b-b704-e64a055cf601_X86XX-N3QMW-B4WGQ-QCB69-V2%f%6KW_MAK-AE________ProjectPro2024Volume-Preview +16_eb074198-7384-4bdd-8e6c-c3342dac8435_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%QT7_MAK-AE________VisioPro2024Volume-Preview +16_e563d108-7b0e-418a-8390-20e1d133d6bb_P6NMW-JMTRC-R6MQ6-HH3F2-BT%f%HKB_Retail________Access2024Retail +16_f748e2f7-5951-4bc2-8a06-5a1fbe42f5f4_CXNJT-98HPP-92HX7-MX6GY-2P%f%VFR_MAK-AE________Access2024Volume +16_f3a5e86a-e4f8-4d88-8220-1440c3bbcefa_82CNJ-W82TW-BY23W-BVJ6W-W4%f%8GP_Retail________Excel2024Retail +16_523fbbab-c290-460d-a6c9-48e49709cb8e_7Y287-9N2KC-8MRR3-BKY82-2D%f%QRV_MAK-AE________Excel2024Volume +16_885f83e0-5e18-4199-b8be-56697d0debfb_N69X7-73KPT-899FD-P8HQ4-QG%f%TP4_Retail________Home2024Retail +16_acd4eccb-ff89-4e6a-9350-d2d56276ec69_PRKQM-YNPQR-77QT6-328D7-BD%f%223_Retail________HomeBusiness2024Retail +16_6f5fd645-7119-44a4-91b4-eccfeeb738bf_2CFK4-N44KG-7XG89-CWDG6-P7%f%P27_Retail________Outlook2024Retail +16_9a1e1bac-2d8b-4890-832f-0a68b27c16e0_NQPXP-WVB87-H3MMB-FYBW2-9Q%f%FPB_MAK-AE________Outlook2024Volume +16_da9a57ae-81a8-4cb3-b764-5840e6b5d0bf_CT2KT-GTNWH-9HFGW-J2PWJ-XW%f%7KJ_Retail________PowerPoint2024Retail +16_eca0d8a6-e21b-4622-9a87-a7103ff14012_RRXFN-JJ26R-RVWD2-V7WMP-27%f%PWQ_MAK-AE________PowerPoint2024Volume +16_295dcc21-151a-4b4d-8f50-2b627ea197f6_GNJ6P-Y4RBM-C32WW-2VJKJ-MT%f%HKK_Retail________ProjectPro2024Retail +16_2141d341-41aa-4e45-9ca1-201e117d6495_WNFMR-HK4R7-7FJVM-VQ3JC-76%f%HF6_MAK-AE1_______ProjectPro2024Volume +16_ead42f74-817d-45b4-af6b-3beeb36ba650_C2PNM-2GQFC-CY3XR-WXCP4-GX%f%3XM_Retail________ProjectStd2024Retail +16_4b6d9b9b-c16e-429d-babe-8bb84c3c27d6_F2VNW-MW8TT-K622Q-4D96H-PW%f%J8X_MAK-AE________ProjectStd2024Volume +16_db249714-bb54-4422-8c78-2cc8d4c4a19f_VWCNX-7FKBD-FHJYG-XBR4B-88%f%KC6_Retail________ProPlus2024Retail +16_d77244dc-2b82-4f0a-b8ae-1fca00b7f3e2_4YV2J-VNG7W-YGTP3-443TK-TF%f%8CP_MAK-AE1_______ProPlus2024Volume +16_3046a03e-2277-4a51-8ccd-a6609eae8c19_XKRBW-KN2FF-G8CKY-HXVG6-FV%f%Y2V_MAK-AE________SkypeforBusiness2024Volume +16_44a07f51-8263-4b2f-b2a5-70340055c646_GVG6N-6WCHH-K2MVP-RQ78V-3J%f%7GJ_MAK-AE1_______Standard2024Volume +16_282d8f34-1111-4a6f-80fe-c17f70dec567_HGRBX-N68QF-6DY8J-CGX4W-XW%f%7KP_Retail________VisioPro2024Retail +16_4c2f32bf-9d0b-4d8c-8ab1-b4c6a0b9992d_GBNHB-B2G3Q-G42YB-3MFC2-7C%f%JCX_MAK-AE________VisioPro2024Volume +16_8504167d-887a-41ae-bd1d-f849d834352d_VBXPJ-38NR3-C4DKF-C8RT7-RG%f%HKQ_Retail________VisioStd2024Retail +16_0978336b-5611-497c-9414-96effaff4938_YNFTY-63K7P-FKHXK-28YYT-D3%f%2XB_MAK-AE________VisioStd2024Volume +16_f6b24e61-6aa7-4fd2-ab9b-4046cee4230a_XN33R-RP676-GMY2F-T3MH7-GC%f%VKR_Retail________Word2024Retail +16_06142aa2-e935-49ca-af5d-08069a3d84f3_WD8CQ-6KNQM-8W2CX-2RT63-KK%f%3TP_MAK-AE________Word2024Volume ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -if %1==getinfo if not defined _key ( +if %1==getinfo if not defined key ( if %oVer%==%%A if /i "%2"=="%%E" ( -set _key=%%C +set key=%%C set _actid=%%B set _allactid=!_allactid! %%B set _lic=%%D @@ -1682,10 +2285,21 @@ if %oVer%==16 (echo "%%D" | find /i "Subscription" %nul% && set _sublic=1) ) if %1==getmsiprod if %oVer%==%%A ( -find /i "%%E" %msitemp% %nul% && ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) ) ) +) + +if %1==findactivated if %oVer%==%%A ( +echo "!_FsortIds!" | find /i "-%%E-" %nul% && ( +set actiProds%oVer%=!actiProds%oVer%! -%%E- +) +) ) ) @@ -1775,12 +2389,12 @@ $MemoryStream.Close() ::======================================================================================================================================== :: :: This below blocks of text is encoded in base64 format -:: The blocks in labels "sppc64.dll" and "sppc32.dll" contains below files +:: The blocks in labels "sppc32.dll" and "sppc64.dll" contains below files :: -:: e6ac83560c19ec7eb868c50ea97ea0ed5632a397a9f43c17e24e6de4a694d118 *sppc32.dll -:: c6df24deef2e83813dee9c81ddd9793a3d60c117a4e8e231b82e32b3192927e7 *sppc64.dll +:: 09865ea5993215965e8f27a74b8a41d15fd0f60f5f404cb7a8b3c7757acdab02 *sppc32.dll +:: 393a1fa26deb3663854e41f2b687c188a9eacd87b23f17ea09422c4715cb5a9f *sppc64.dll :: -:: The files are encoded in base64 to make MAS AIO version. +:: The files are encoded in base64 to make AIO version. :: :: mass grave[.]dev/ohook :: Here you can find the files source code and info on how to rebuild the identical sppc.dll files @@ -1791,28 +2405,35 @@ $MemoryStream.Close() :: For any further question, feel free to contact us on mass grave[.]dev/contactus :: ::======================================================================================================================================== - -:: Replace - with A and _ with a before base64 conversion +:: +:: If you want to use a different sppc.dll or without base64 format, then create a folder named "BIN" where this script is located and +:: place these two files in that "BIN" folder. sppc32.dll, sppc64.dll +:: Script will auto pick that instead of using the below from base64 section. You can also delete the below code in that case. +:: +::======================================================================================================================================== +:: +:: Replace "-" with "A" and "_" with "a" before base64 conversion +:: It was changed to prevent antiviruses from detecting and flagging base64 encoding :sppc32.dll: TVqQ--M----E----//8--Lg---------Q-----------------------------------------------g-----4fug4-t-nNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g_W4gRE9TIG1vZGUuDQ0KJ---------BQRQ--T-EH-MDc0GQ----------O-- -DiML-QIo--I----e---------B-----Q----------C-_g-Q-----g--B-----E----G----------CQ----B---i9M---I-Q-E--C---B------E---E--------B------Q---jR----Bg---Y-Q---H---HgD-------------------------I---BQ--------- +DiML-QIo--I----e--------RxE----Q----------C-_g-Q-----g--B-----E----G----------CQ----B---+dY---I-Q-E--C---B------E---E--------B------Q---jR----Bg---Y-Q---H---HgD-------------------------I---BQ--------- ----------------------------------------------------------BsY---H------------------------------------C50ZXh0----c-E----Q-----g----Q------------------C---G-ucmRhdGE--Bg-----I-----I----G---------------- --B---B-LmVoX2ZyYW2------D-----C----C-------------------Q---QC5lZGF0YQ--jR----B-----Eg----o------------------E---E-u_WRhdGE--BgB----Y-----I----c------------------B---D-LnJzcmM---B4-w---H-----E----Hg-- ----------------Q---wC5yZWxvYw--F-----C------g---CI------------------E---EI----------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------LgB----wgw-VYnlVlONRfCD7DDHRf------ -iUQkFI1F9IlEJBCLRQzHRCQM-----IlEJ-SLRQjHRCQI-CC-_okEJMdF9-----Do-gE--Is1eGC-_oPsGIX-icOLRfB0CokEJDHb/9ZR6zKLVfTHRCQECiC-_okEJIlUJ-j/FYBggGqD7-yFwItF8IkEJHQK/9_7-Q---FLr-//WUI1l+InYW15dw1WJ5VdWU4PsPItF -GIt1HIlEJBCLRRSJdCQUiUQkDItFEIlEJ-iLRQyJRCQEi0UIiQQk6Hw----xyYPsGInHhcB1XItFGDkIdlVr2SiLBgHYg3gQ-HRFiUQkBItFCIlN5IkEJOj7/v//i03khcB1L-Mex0MQ-Q---MdDF-----DHQxg-----x0Mc-----MdDI-----DHQyQ-----QeukjWX0 -ifhbXl9dwhg-kP8lcGC-_pCQ/yVsYIBqkJD/////-----P////8----------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------FWJ5VZTjUXwg+wwx0Xw-----IlEJBSNRfSJ +RCQQi0UMx0QkD-----CJRCQEi0UIx0QkC--ggGqJBCTHRfQ-----6-oB--CLNXhggGqD7BiFwInDi0Xwd-qJBCQx2//WUesyi1X0x0QkB-oggGqJBCSJVCQI/xW-YIBqg+wMhcCLRfCJBCR0Cv/WuwE---BS6wP/1lCNZfiJ2FteXcNVieVXVlOD7DyLRRiLdRyJRCQQ +i0UUiXQkFIlEJ-yLRRCJRCQIi0UMiUQkBItFCIkEJOiE----McmD7BiJx4X-dVyLRRg5CHZV_9koiwYB2IN4E-B0RYlEJ-SLRQiJTeSJBCTo+/7//4tN5IX-dSwDHsdDE-E---DHQxQ-----x0MY-----MdDH-----DHQy------x0Mk-----EHrpI1l9In4W15fXcIY +-LgB----wgw-kP8lcGC-_pCQ/yVsYIBqkJD/////-----P////8----------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------TgBh-G0-ZQ---Ec-cgBh-GM-ZQ------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------U----------F6Ug-Bf-gBGwwEBIgB---Q----H----ODf//8I---------CQ----w---- -1N///50-----QQ4IhQJCDQVIhgODB-KPw0HGQcUMB-Qo----W----Eng//+q-----EEOCIUCQg0FRocDhgSDBQKbw0HGQcdBxQwEB--------------------------------------------------------------------------------------------------- +-----------------------------------------------------------------------------------------------------------------------------------U----------F6Ug-Bf-gBGwwEBIgB---k----H----ODf//+d-----EEOCIUCQg0FSIYD +gwQCj8NBxkHFD-QEK----EQ---BV4P//qg----BBDgiF-kINBU_H-4YEgwUCm8NBxkHHQcUMB-QQ----c----NPg//8I------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------D-3NBk-----MZC---B----Qw---EM----oQ---NEE--EBC--DPQg--70I---VD---pQw--XUM--KFD--DpQw--F0Q--DVE--BnR---nUQ--ONE---tRQ--YUU--J9F--DTRQ--DUY--DtG--BxRg--r0Y--M9G--D7Rg--pR---FFH--BvRw-- +------------------D-3NBk-----MZC---B----Qw---EM----oQ---NEE--EBC--DPQg--70I---VD---pQw--XUM--KFD--DpQw--F0Q--DVE--BnR---nUQ--ONE---tRQ--YUU--J9F--DTRQ--DUY--DtG--BxRg--r0Y--M9G--D7Rg--nR---FFH--BvRw-- n0c--NNH---RS---TUg--G9I--ClS---zUg---VJ--BBSQ--bUk--KdJ--C7SQ--+0k--DlK--BPSg--dUo--J1K--DTSg--B0s--D1L--BpSw--pUs--ONL---NT---OUw--IlM--DRT---EU0--FlN--CjTQ--8U0--BtO--BHTg--h04--LtO--DnTg--K08--FtP --C1Tw--608--CdQ--BdU---4kI--P1C---_Qw--RkM--IJD--DIQw---0Q--ClE--BRR---hUQ--MNE---LRQ--SkU--INF--C8RQ--80U--CdG--BZRg--k0Y--MJG--DoRg--GUc--DFH--BjRw--ikc--LxH--D1Rw--Mkg--GFI--CNS---vEg--OxI---mSQ-- Wkk--I1J--C0SQ--3kk--B1K--BHSg--ZUo--IxK--C7Sg--8Eo--CVL--BWSw--iks--MdL--D7Sw--Jkw--GRM--CwT---9Ew--DhN--CBTQ--zU0---lO---0Tg--_k4--KRO--DUTg--DE8--EZP--CLTw--008---xQ--BFU---eF-------Q-C--M-B--F--Y- @@ -1847,13 +2468,13 @@ UFBDUy5TTHBWTEFjdGl2YXRlUHJvZHVjd-BTTHBWTEFjdGl2YXRlUHJvZHVjd------------------- Y3RT_3VJbmZvcm1hdGlvbg--3QNMb2NhbEZyZWU-RwFTdHJTdHJOSVc--G----Bg--BzcHBjcy5kbGw----UY---S0VSTkVMMzIuZGxs-----Chg--BTSExXQVBJLmRsb----------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------B-B-----Y--C--------------------B--E----w--C--------------------B--kE--BI----WH---BwD-------------BwDN----FY-UwBf-FY-RQBS-FM-SQBP-E4-XwBJ-E4- -RgBP------C9BO/+---B--M----------w--------------------Q-B--C--------------------f-I---E-UwB0-HI-_QBu-Gc-RgBp-Gw-ZQBJ-G4-ZgBv----W-I---E-M--0-D--OQ-w-DQ-RQ-0----eg-t--E-QwBv-G0-c-Bh-G4-eQBO-GE-bQBl---- +RgBP------C9BO/+---B--U---------BQ--------------------Q-B--C--------------------f-I---E-UwB0-HI-_QBu-Gc-RgBp-Gw-ZQBJ-G4-ZgBv----W-I---E-M--0-D--OQ-w-DQ-RQ-0----eg-t--E-QwBv-G0-c-Bh-G4-eQBO-GE-bQBl---- --BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4------D4-Cw-B-EY-_QBs-GU-R-Bl-HM-YwBy-Gk-c-B0-Gk-bwBu------Bv-Gg-bwBv-Gs-I-BT-F-- -U-BD-------w--g--QBG-Gk-b-Bl-FY-ZQBy-HM-_QBv-G4------D--Lg-z-C4-M--u-D-----q--U--QBJ-G4-d-Bl-HI-bgBh-Gw-TgBh-G0-ZQ---HM-c-Bw-GM------Iw-N--B-Ew-ZQBn-GE-b-BD-G8-c-B5-HI-_QBn-Gg-d----Kk-I--y-D--Mg-z-C-- +U-BD-------w--g--QBG-Gk-b-Bl-FY-ZQBy-HM-_QBv-G4------D--Lg-1-C4-M--u-D-----q--U--QBJ-G4-d-Bl-HI-bgBh-Gw-TgBh-G0-ZQ---HM-c-Bw-GM------Iw-N--B-Ew-ZQBn-GE-b-BD-G8-c-B5-HI-_QBn-Gg-d----Kk-I--y-D--Mg-0-C-- QQBu-G8-bQBh-Gw-bwB1-HM-I-BT-G8-ZgB0-Hc-YQBy-GU-I-BE-GU-d-Bl-HI-_QBv-HI-YQB0-Gk-bwBu-C--QwBv-HI-c-Bv-HI-YQB0-Gk-bwBu----Og-J--E-TwBy-Gk-ZwBp-G4-YQBs-EY-_QBs-GU-bgBh-G0-ZQ---HM-c-Bw-GM-LgBk-Gw-b------- -L--G--E-U-By-G8-Z-B1-GM-d-BO-GE-bQBl------Bv-Gg-bwBv-Gs----0--g--QBQ-HI-bwBk-HU-YwB0-FY-ZQBy-HM-_QBv-G4----w-C4-Mw-u-D--Lg-w----R-----E-VgBh-HI-RgBp-Gw-ZQBJ-G4-ZgBv-------k--Q---BU-HI-YQBu-HM-b-Bh-HQ- +L--G--E-U-By-G8-Z-B1-GM-d-BO-GE-bQBl------Bv-Gg-bwBv-Gs----0--g--QBQ-HI-bwBk-HU-YwB0-FY-ZQBy-HM-_QBv-G4----w-C4-NQ-u-D--Lg-w----R-----E-VgBh-HI-RgBp-Gw-ZQBJ-G4-ZgBv-------k--Q---BU-HI-YQBu-HM-b-Bh-HQ- _QBv-G4-------kE5-Q------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------Q---U----OzBQMHEwfjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +-------Q---U----MzBIMGkwdjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- @@ -1861,31 +2482,32 @@ _QBv-G4-------kE5-Q------------------------------------------------------------- :======================================================================================================================================== -:: Replace - with A and _ with a before base64 conversion +:: Replace "-" with "A" and "_" with "a" before base64 conversion +:: It was changed to prevent antiviruses from detecting and flagging base64 encoding :sppc64.dll: TVqQ--M----E----//8--Lg---------Q-----------------------------------------------g-----4fug4-t-nNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g_W4gRE9TIG1vZGUuDQ0KJ---------BQRQ--ZIYH-MDc0GQ----------P-- -LiIL-gIo--I----e---------B-----Q-----JIx-g-----Q-----g--B----------G----------CQ----B---39----I-Y-E--C---------Q-----------Q--------E--------------Q-----F---I0Q----c---U-E---C---B4-w---D---CQ--------- +LiIL-gIo--I----e--------ExE----Q-----JIx-g-----Q-----g--B----------G----------CQ----B---LeY---I-Y-E--C---------Q-----------Q--------E--------------Q-----F---I0Q----c---U-E---C---B4-w---D---CQ--------- --------------------------------------------------------------------------------iH---Dg------------------------------------udGV4d----H-B----E-----I----E-------------------g--BgLnJkYXRh---g-----C-----C ----Bg------------------Q---QC5wZGF0YQ--J------w-----g----g------------------E---E-ueGRhdGE--CQ-----Q-----I----K------------------B---B-LmVkYXRh--CNE----F-----S----D-------------------Q---QC5pZGF0YQ-- U-E---Bw-----g---B4------------------E---M-ucnNyYw---HgD----g-----Q----g------------------B---D--------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------LgB----w0FUU0iD7EhFMclMjQXpDw--SI1E -JDjHRCQ0-----EiJRCQoSI1EJDRIiUQkIEjHRCQ4-----Oj/----SItMJDhIix1TY---hcBBicR0B//TRTHk6yhEi0QkNEiNF_MP--D/FUNg--BIi0wkOEiFwHQK/9NBv-E---Dr-v/TRIngSIPESFtBXMNBVUFUVVdWU0iD7Dgx9kyLrCSQ----SIusJJg---BMiWwk -IEiJz0iJbCQo6Io---BBicSFwHVEQTl1-HY+SGveKEiLVQBI-dqDeh--dChIifnoIv///4X-dRxI-10-SMdDE-E---BIx0MY-----EjHQy------SP/G67xEieBIg8Q4W15fXUFcQV3DkJCQkJCQkP8lel8--JCQDx+E------D/JXpf--CQk-8fh-------/yVKXw-- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------EFUU0iD7EhFMclMjQXvDw--SI1EJDjHRCQ0 +-----EiJRCQoSI1EJDRIiUQkIEjHRCQ4-----OgF-Q--SItMJDhIix1ZY---hcBBicR0B//TRTHk6yhEi0QkNEiNF_kP--D/FUlg--BIi0wkOEiFwHQK/9NBv-E---Dr-v/TRIngSIPESFtBXMNBVUFUVVdWU0iD7Dgx9kyLrCSQ----SIusJJg---BMiWwkIEiJz0iJ +bCQo6J----BBicSFwHVEQTl1-HY+SGveKEiLVQBI-dqDeh--dChIifnoIv///4X-dRxI-10-SMdDE-E---BIx0MY-----EjHQy------SP/G67xEieBIg8Q4W15fXUFcQV3Du-E---DDkJCQkJCQkP8lel8--JCQDx+E------D/JXpf--CQk-8fh-------/yVKXw-- kJD/JTpf--CQkP//////////----------D//////////w---------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------TgBh-G0-ZQ---Ec-cgBh-GM-ZQ------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------E---Bh----B----GE---jh----R---COE---GRE--BB------------------------- +------------------------------------------------------------------------------------------------------------------------------------E---iB----B---CIE---ExE---x----TEQ--GRE--CB------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------E----BBwM-B4IDM-L----BD-c-DGIIM-dgBn-FU-T--t---------------------------------------------------------------------------------------------------------------------------------------------- +--------------EH-w-HggMw-s----EMBw-MYggwB2-Gc-VQBM-C0----Q---------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------MDc0GQ-----xlI---E---BD----Qw---ChQ---0UQ--QFI--M9S--DvUg--BVM--ClT--BdUw--oVM--OlT---XV---NVQ--GdU ---CdV---41Q--C1V--BhVQ--n1U--NNV---NVg--O1Y--HFW--CvVg--z1Y--PtW--COE---UVc--G9X--CfVw--01c--BFY--BNW---b1g--KVY--DNW---BVk--EFZ--BtWQ--p1k--LtZ--D7WQ--OVo--E9_--B1Wg--nVo--NN_---HWw--PVs--Glb--ClWw-- +--CdV---41Q--C1V--BhVQ--n1U--NNV---NVg--O1Y--HFW--CvVg--z1Y--PtW--CIE---UVc--G9X--CfVw--01c--BFY--BNW---b1g--KVY--DNW---BVk--EFZ--BtWQ--p1k--LtZ--D7WQ--OVo--E9_--B1Wg--nVo--NN_---HWw--PVs--Glb--ClWw-- 41s---1c---5X---iVw--NFc---RXQ--WV0--KNd--DxXQ--G14--Ede--CHXg--u14--Ode---rXw--W18--LVf--DrXw--J2---F1g--DiUg--/VI--BpT--BGUw--glM--MhT---DV---KVQ--FFU--CFV---w1Q---tV--BKVQ--g1U--LxV--DzVQ--J1Y--FlW --CTVg--wlY--OhW---ZVw--MVc--GNX--CKVw--vFc--PVX---yW---YVg--I1Y--C8W---7Fg--CZZ--B_WQ--jVk--LRZ--DeWQ--HVo--Ed_--BlWg--jFo--Lt_--DwWg--JVs--FZb--CKWw--x1s--Ptb---mX---ZFw--LBc--D0X---OF0--IFd--DNXQ-- CV4--DRe--BqXg--pF4--NRe---MXw--Rl8--Itf--DTXw--DG---EVg--B4Y------B--I--w-E--U-Bg-H--g-CQ-K--s-D--N--4-Dw-Q-BE-Eg-T-BQ-FQ-W-Bc-G--Z-Bo-Gw-c-B0-Hg-f-C--IQ-i-CM-J--l-CY-Jw-o-Ck-Kg-r-Cw-LQ-u-C8-M--x-DI- @@ -1919,11 +2541,11 @@ b2dyZXNz-FNQUENTLlNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy DHE------------------MBw--------4n--------------------Bx-------------------McQ-------------------gBTTEdldExpY2Vuc2luZ1N0YXR1c0luZm9ybWF0_W9u--E-U0xHZXRQcm9kdWN0U2t1SW5mb3JtYXRpb24--OgDTG9jYWxGcmVl-FEB U3RyU3RyTklX--Bw----c---c3BwY3MuZGxs----FH---EtFUk5FTDMyLmRsb------oc---U0hMV0FQSS5kbGw----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------E-E----Bg--I--------------------E--Q---D---I-------------- -------E-CQQ--Eg---BYg---H-M-------------H-M0----VgBT-F8-VgBF-FI-UwBJ-E8-TgBf-Ek-TgBG-E8------L0E7/4---E--w---------D--------------------B--E--I-------------------B8-g---QBT-HQ-cgBp-G4-ZwBG-Gk-b-Bl-Ek- +------E-CQQ--Eg---BYg---H-M-------------H-M0----VgBT-F8-VgBF-FI-UwBJ-E8-TgBf-Ek-TgBG-E8------L0E7/4---E-BQ---------F--------------------B--E--I-------------------B8-g---QBT-HQ-cgBp-G4-ZwBG-Gk-b-Bl-Ek- bgBm-G8---BY-g---Q-w-DQ-M--5-D--N-BF-DQ---B6-C0--QBD-G8-bQBw-GE-bgB5-E4-YQBt-GU------EE-bgBv-G0-YQBs-G8-dQBz-C--UwBv-GY-d-B3-GE-cgBl-C--R-Bl-HQ-ZQBy-Gk-bwBy-GE-d-Bp-G8-bg-g-EM-bwBy-H--bwBy-GE-d-Bp-G8- -bg------Pg-L--E-RgBp-Gw-ZQBE-GU-cwBj-HI-_QBw-HQ-_QBv-G4------G8-_-Bv-G8-_w-g-FM-U-BQ-EM------D--C--B-EY-_QBs-GU-VgBl-HI-cwBp-G8-bg------M--u-DM-Lg-w-C4-M----Co-BQ-B-Ek-bgB0-GU-cgBu-GE-b-BO-GE-bQBl---- -cwBw-H--Yw------j--0--E-T-Bl-Gc-YQBs-EM-bwBw-Hk-cgBp-Gc-_-B0----qQ-g-DI-M--y-DM-I-BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4- ----6--k--QBP-HI-_QBn-Gk-bgBh-Gw-RgBp-Gw-ZQBu-GE-bQBl----cwBw-H--Yw-u-GQ-b-Bs-------s--Y--QBQ-HI-bwBk-HU-YwB0-E4-YQBt-GU------G8-_-Bv-G8-_w---DQ-C--B-F--cgBv-GQ-dQBj-HQ-VgBl-HI-cwBp-G8-bg---D--Lg-z-C4- +bg------Pg-L--E-RgBp-Gw-ZQBE-GU-cwBj-HI-_QBw-HQ-_QBv-G4------G8-_-Bv-G8-_w-g-FM-U-BQ-EM------D--C--B-EY-_QBs-GU-VgBl-HI-cwBp-G8-bg------M--u-DU-Lg-w-C4-M----Co-BQ-B-Ek-bgB0-GU-cgBu-GE-b-BO-GE-bQBl---- +cwBw-H--Yw------j--0--E-T-Bl-Gc-YQBs-EM-bwBw-Hk-cgBp-Gc-_-B0----qQ-g-DI-M--y-DQ-I-BB-G4-bwBt-GE-b-Bv-HU-cw-g-FM-bwBm-HQ-dwBh-HI-ZQ-g-EQ-ZQB0-GU-cgBp-G8-cgBh-HQ-_QBv-G4-I-BD-G8-cgBw-G8-cgBh-HQ-_QBv-G4- +---6--k--QBP-HI-_QBn-Gk-bgBh-Gw-RgBp-Gw-ZQBu-GE-bQBl----cwBw-H--Yw-u-GQ-b-Bs-------s--Y--QBQ-HI-bwBk-HU-YwB0-E4-YQBt-GU------G8-_-Bv-G8-_w---DQ-C--B-F--cgBv-GQ-dQBj-HQ-VgBl-HI-cwBp-G8-bg---D--Lg-1-C4- M--u-D----BE-----QBW-GE-cgBG-Gk-b-Bl-Ek-bgBm-G8------CQ-B----FQ-cgBh-G4-cwBs-GE-d-Bp-G8-bg------CQTkB--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- :sppc64.dll: diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 91882ad..306bb47 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,43 +1,83 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @echo off + +::============================================================================ :: -::================================================================================================= -:: -:: This is a fork of @abbodi1406's KVA forums.mydigitallife.net/posts/838808 -::_____________________________________ +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com :: -:: Homepage: mass grave [.] dev -:: Email: windowsaddict@protonmail.com -:: -::================================================================================================= +::============================================================================ + + + +:: To activate Windows with K-M-S activation, run the script with "/K-Windows" parameter or change 0 to 1 in below line +set _actwin=0 + +:: To activate all Office apps (including Project/Visio) with K-M-S activation, run the script with "/K-Office" parameter or change 0 to 1 in below line +set _actoff=0 + +:: To activate only Project/Visio with K-M-S activation, run the script with "/K-ProjectVisio" parameter or change 0 to 1 in below line +set _actprojvis=0 + +:: To activate all Windows/Office with K-M-S activation, run the script with "/K-WindowsOffice" parameter or change 0 to 1 in below line +set _actwinoff=0 + +:: To disable changing Windows/Office edition if current edition doesn't support K-M-S activation, run the script with "/K-NoEditionChange" parameter or change 0 to 1 in below line +set _NoEditionChange=0 + +:: To NOT auto-install renewal task with activation, run the script with "/K-NoRenewalTask" parameter or change 0 to 1 in below line +set _norentsk=0 + +:: To uninstall K-M-S, run the script with "/K-Uninstall" parameter or change 0 to 1 in below line. It'll take preference over any other parameter. +set _uni=0 + +:: Advanced options: +:: Don't use renewal task option if you are going to use a specific server name instead of public servers used in the script + +:: To specify a server address for activation, run the script with "/K-Server-YOURKMSSERVERNAME" parameter or add it in below line after = sign +set _server= + +:: To specify a port for activation, run the script with "/K-Port-YOURPORTNAME" parameter or add it in below line after = sign +set _port= + +:: Debug Mode: +:: To run the script in debug mode, change 0 to any parameter above that you want to run, in below line +set "_debug=0" + +:: Script will run in unattended mode if parameters are used OR value is changed in above lines FOR activation or uninstall. ::======================================================================================================================================== -:: 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 "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" + +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 1>nul -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" @@ -54,6 +94,33 @@ exit /b ::======================================================================================================================================== +:: Debug code + +if "%_debug%" EQU "0" ( +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" +goto :_debug +) + +set "nul1=" +set "nul2=" +set "nul6=" +set "nul=" + +@echo on +@prompt $G +@call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" +@echo off +@exit /b + +:_debug + +::======================================================================================================================================== + set "blank=" set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" @@ -65,10 +132,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -77,9 +144,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: -ping 127.0.0.1 -n 6 >nul +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -89,88 +160,44 @@ popd cls color 07 -title Online KMS Activation %masver% - -:: You are not supposed to edit anything below this. - -set WMI_VBS=0 -set _Debug=0 -set Silent=0 -set Logger=0 -set AutoR2V=1 -set SkipKMS38=1 -set vNextOverride=1 -set ActWindows=1 -set ActOffice=1 +set KS=K%blank%MS +title Online %KS% Activation %masver% -set _uni= set _args= set _elev= -set _renetask= -set _renacttask= -set _unattended= -set _unattendedact= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% -if defined _args ( -echo "%_args%" | find /i "/KMS" >nul && set _unattended=1 - -for %%A in (%_args%) do ( -if /i "%%A"=="-el" (set _elev=1 -) else if /i "%%A"=="/KMS-RenewalTask" (set _renetask=1 -) else if /i "%%A"=="/KMS-ActAndRenewalTask" (set _renacttask=1 -) else if /i "%%A"=="/KMS-Uninstall" (set _uni=1 -) else if /i "%%A"=="/KMS-Windows" (set ActWindows=1&set ActOffice=0&set _unattendedact=1 -) else if /i "%%A"=="/KMS-Office" (set ActWindows=0&set ActOffice=1&set _unattendedact=1 -) else if /i "%%A"=="/KMS-WindowsOffice" (set ActWindows=1&set ActOffice=1&set _unattendedact=1 -) else if /i "%%A"=="/KMS-KeepvNext" (set vNextOverride=0 -) else if /i "%%A"=="/KMS-Debug" (set _Debug=1 -) else if /i "%%A"=="/KMS-Logger" (set Logger=1&set Silent=1 -) +if defined _args for %%A in (%_args%) do ( +if /i "%%A"=="-el" (set _elev=1) +if /i "%%A"=="/K-Windows" (set _actwin=1) +if /i "%%A"=="/K-Office" (set _actoff=1) +if /i "%%A"=="/K-ProjectVisio" (set _actprojvis=1) +if /i "%%A"=="/K-WindowsOffice" (set _actwinoff=1) +if /i "%%A"=="/K-NoEditionChange" (set _NoEditionChange=1) +if /i "%%A"=="/K-NoRenewalTask" (set _norentsk=1) +if /i "%%A"=="/K-Uninstall" (set _uni=1) +echo "%%A" | find /i "/K-Port-" >nul && (set "_port=%%A" & call set "_port=%%_port:~8%%") +echo "%%A" | find /i "/K-Server-" >nul && (set "_server=%%A" & call set "_server=%%_server:~10%%") ) -) - -::======================================================================================================================================== - -set "nul1=1>nul" -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) -call :_colorprep -set "_buf={$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" - -set "nceline=echo. &echo ==== ERROR ==== &echo." -set "eline=echo. &call :_color %Red% "==== ERROR ====" &echo." -if %_Debug% EQU 1 set _unattended=1 +for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== +call :dk_setvar + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported for Windows 7/8/8.1/10/11 and their Server equivalent. -goto Done -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. -goto Done +echo MAS only supports Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -179,9 +206,9 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" -set "_Local=%LocalAppData%" setlocal EnableDelayedExpansion @@ -189,13 +216,39 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( -%nceline% -echo Script is launched from the temp folder, -echo Most likely you are running the script directly from the archive file. -echo. +%eline% +echo The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. +echo: echo Extract the archive file and launch the script from the extracted folder. -goto Done +goto dk_done +) +) + +::======================================================================================================================================== + +:: 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 dk_done ) ::======================================================================================================================================== @@ -203,28 +256,54 @@ goto Done :: 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 -%nceline% +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'. -goto Done +echo Right click on this script and select 'Run as administrator'. +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 +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app -if defined _unattended set quedit=1 -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 @@ -233,3017 +312,1617 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: -if not defined _unattended ( +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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 ::======================================================================================================================================== -if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +if %_uni%==1 goto :ks_uninstall -:: Check not x86 Windows +:ks_menu -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 +if defined _server set _norentsk=1 +if not defined _server set _port= -::======================================================================================================================================== +if %_unattended%==0 ( +cls +if not defined terminal mode 76, 30 +title Online %KS% Activation %masver% -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find wmic.exe in the system. -if %winbuild% GEQ 22621 echo Make sure WMIC is enabled in optional features. -goto Done +echo: +echo: +echo: +echo: +if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" ( +find /i "Ver:2.7" "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" %nul% || ( +call :dk_color %_Yellow% " Old renewal task found, run activation to update it." +) +) +echo ______________________________________________________________ +echo: +echo [1] Activate - Windows +echo [2] Activate - Office [All] +echo [3] Activate - Office [Project/Visio] +echo [4] Activate - All +echo _______________________________________________ +echo: +if %_norentsk%==0 ( +echo [5] Renewal Task With Activation [Yes] +) else ( +call :dk_color2 %_White% " [5] Renewal Task With Activation " %_Yellow% "[No]" ) - -wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul || ( -%nceline% -echo WMI is not responding in the system. +if %_NoEditionChange%==0 ( +echo [6] Change Edition If Needed [Yes] +) else ( +call :dk_color2 %_White% " [6] Change Edition If Needed " %_Yellow% "[No]" +) +echo [7] Uninstall Online %KS% +echo _______________________________________________ echo: -echo In MAS, Goto Troubleshoot and run Fix WMI option. -goto Done +if defined _server ( +echo [8] Set %KS% Server/Port [%_server%] [%_port%] +) else ( +echo [8] Set %KS% Server/Port ) - -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 "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=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 "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% -if defined notx86 reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% +echo [9] Download Office +echo [0] %_exitmsg% +echo ______________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,6,7,8,9,0]" +choice /C:1234567890 /N +set _el=!errorlevel! + +if !_el!==10 exit /b +if !_el!==9 start %mas%genuine-installation-media & goto :ks_menu +if !_el!==8 goto :ks_ip +if !_el!==7 cls & call :ks_uninstall & cls & goto :ks_menu +if !_el!==6 (if %_NoEditionChange%==0 (set _NoEditionChange=1) else (set _NoEditionChange=0)) & goto :ks_menu +if !_el!==5 (if %_norentsk%==0 (set _norentsk=1) else (set _norentsk=0)) & goto :ks_menu +if !_el!==4 cls & setlocal & set "_actwin=1" & set "_actoff=1" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==3 cls & setlocal & set "_actwin=0" & set "_actoff=0" & set "_actprojvis=1" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==2 cls & setlocal & set "_actwin=0" & set "_actoff=1" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +if !_el!==1 cls & setlocal & set "_actwin=1" & set "_actoff=0" & set "_actprojvis=0" & call :ks_start & endlocal & cls & goto :ks_menu +goto :ks_menu ) ::======================================================================================================================================== -if defined _uni goto _Complete_Uninstall +:ks_start -if defined _renetask set ActTask=&call:RenTask&timeout /t 2 -cls -if defined _renacttask set ActTask=1&call:RenTask&timeout /t 2 cls -if defined _unattended if not defined _unattendedact goto Done +if not defined terminal ( +mode 115, 32 +if exist "%SysPath%\spp\store_test\" mode 135, 32 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +) +title Online %KS% Activation %masver% + +echo: +echo Initializing... +call :dk_chkmal + +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) ::======================================================================================================================================== -set "_title=Online KMS Activation %masver%" -set _gui= +if %_actprojvis%==1 (set "_actoff=1") +if %_actwinoff%==1 (set "_actwin=1" & set "_actoff=1") + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue -:_KMS_Menu +::======================================================================================================================================== -set sub_next=0 -set sub_o365=0 -set sub_proj=0 -set sub_vsio=0 -set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext -reg query %kNext% /v MigrationToV5Done 2>nul | find /i "0x1" %nul% && call :officeSub %nul% +set error= -set _tskinstalled= -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && ( -find /i "Ver:1.9" "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" %nul% && set _tskinstalled=1 -) +cls +echo: +call :dk_showosinfo -set _oldtsk= -if not defined _tskinstalled ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | findstr /i "\Activation-Renewal \Online_KMS_Activation_Script-Renewal" >nul && ( -set _oldtsk=1 -) -) +:: Check Internet connection -if defined _unattended ( -call :Activation_Start -timeout /t 2 -goto Done +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) -cls -set _gui=1 -title %_title% -mode con: cols=76 lines=30 - -echo. -echo. -echo. -echo. -echo. ______________________________________________________________ -echo. -echo. [1] Activate - Windows -echo. [2] Activate - Office -echo. [3] Activate - All -echo. -if defined _tskinstalled call :_color2 %_White% " [4] Install Auto-Renewal " %_Green% "[Installed]" -if defined _oldtsk call :_color2 %_White% " [4] Install Auto-Renewal " %_Red% "[Old Installed]" -if not defined _tskinstalled if not defined _oldtsk echo. [4] Install Auto-Renewal -echo. [5] Uninstall -echo. _______________________________________________ -echo. -if %_Debug%==0 ( -echo. [6] Enable Debug Mode [No] -) else ( -call :_color2 %_White% " [6] Enable Debug Mode " %_Red% "[Yes]" +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1&set ping_f= But Ping Failed) ) -if %vNextOverride% EQU 1 ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Red% "[Yes]" + +if defined _int ( +echo Checking Internet Connection [Connected%ping_f%] ) else ( -echo [7] Override Office vNext [Yes] +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Online %KS% Activation." ) -) else ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Yellow% "[No]" -) else ( -echo [7] Override Office vNext [No] -) -) -echo. _______________________________________________ -echo. -echo. [0] %_exitmsg% -echo. ______________________________________________________________ -echo. -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,0]" -choice /C:12345670 /N -set _el=%errorlevel% - -if %_el%==8 exit /b -if %_el%==7 (if %vNextOverride% EQU 0 (set vNextOverride=1) else (set vNextOverride=0))&goto _KMS_Menu -if %_el%==6 (if %_Debug%==0 (set _Debug=1) else (set _Debug=0)) &goto _KMS_Menu -if %_el%==5 call:_Complete_Uninstall&cls&goto _KMS_Menu -if %_el%==4 set ActTask=&call:RenTask&goto _KMS_Menu -if %_el%==3 cls&setlocal&set "ActWindows=1"&set "ActOffice=1"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -if %_el%==2 cls&setlocal&set "ActWindows=0"&set "ActOffice=1"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -if %_el%==1 cls&setlocal&set "ActWindows=1"&set "ActOffice=0"&call :Activation_Start&endlocal&cls&goto _KMS_Menu -goto _KMS_Menu ::======================================================================================================================================== -:Done - -if defined _unattended exit /b +echo Initiating Diagnostic Tests... -echo. -echo Press any key to exit... -pause >nul -exit /b +set "_serv=sppsvc Winmgmt" -:========================================================================================================================================= +:: Software Protection +:: Windows Management Instrumentation -:Activation_Start +call :dk_errorcheck -@setlocal DisableDelayedExpansion +::======================================================================================================================================== -set nil= -for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe,osppsvc.exe) do ( -reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" /f %nul%) -) +call :_taskclear-cache +call :_tasksetserv -call :Clear-KMS-Cache %nul% +if not %_actwin%==1 goto :ks_office -set "_Null=1>nul 2>nul" -set KMS_Port=1688 -if %_Debug% EQU 1 set _unattended=1 -set "_run=nul" -if %Logger% EQU 1 set _run="%~dpn0_Silent.log" +:: Process Windows +:: Check if system is permanently activated or not -set "SysPath=%SystemRoot%\System32" -set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "SysPath=%SystemRoot%\Sysnative" -set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" -) -set "_bit=64" -set "_wow=1" -if /i "%PROCESSOR_ARCHITECTURE%"=="amd64" set "xBit=x64"&set "xOS=x64" -if /i "%PROCESSOR_ARCHITECTURE%"=="arm64" set "xBit=x86"&set "xOS=A64" -if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "xBit=x86"&set "xOS=x86"&set "_wow=0"&set "_bit=32" -if /i "%PROCESSOR_ARCHITEW6432%"=="amd64" set "xBit=x64"&set "xOS=x64" -if /i "%PROCESSOR_ARCHITEW6432%"=="arm64" set "xBit=x86"&set "xOS=A64" -if not defined xBit set "xBit=x64"&set "xOS=x64" - -set _cwmi=0 -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 +echo: +echo Processing Windows... +call :dk_checkperm +if defined _perm ( +call :dk_color %Gray% "Checking OS Activation [Windows is already permanently activated]" +goto :ks_office ) -set "_Local=%LocalAppData%" -set "_temp=%SystemRoot%\Temp" -set "_log=%~dpn0" -set "_work=%~dp0" -if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" -set _UNC=0 -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" -if exist "%PUBLIC%\Desktop\desktop.ini" set "_dsk=%PUBLIC%\Desktop" -set "_mO21a=Detected Office 2021 C2R Retail is activated" -set "_mO19a=Detected Office 2019 C2R Retail is activated" -set "_mO16a=Detected Office 2016 C2R Retail is activated" -set "_mO15a=Detected Office 2013 C2R Retail is activated" -set "_mO21c=Detected Office 2021 C2R Retail could not be converted to Volume" -set "_mO19c=Detected Office 2019 C2R Retail could not be converted to Volume" -set "_mO16c=Detected Office 2016 C2R Retail could not be converted to Volume" -set "_mO15c=Detected Office 2013 C2R Retail could not be converted to Volume" -set "_mO14c=Detected Office 2010 C2R Retail is not supported by this script" -set "_mO14m=Detected Office 2010 MSI Retail is not supported by this script" -set "_mO15m=Detected Office 2013 MSI Retail is not supported by this script" -set "_mO16m=Detected Office 2016 MSI Retail is not supported by this script" -set "_mOuwp=Detected Office 365/2016 UWP is not supported by this script" -set DO15Ids=ProPlus,Standard,Access,Lync,Excel,Groove,InfoPath,OneNote,Outlook,PowerPoint,Publisher,Word -set DO16Ids=ProPlus,Standard,Access,SkypeforBusiness,Excel,Outlook,PowerPoint,Publisher,Word -set LV16Ids=Mondo,ProPlus,ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness,OneNote,Excel,Outlook,PowerPoint,Publisher,Word -set LR16Ids=%LV16Ids%,Professional,HomeBusiness,HomeStudent,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud -set "ESUEditions=Enterprise,EnterpriseE,EnterpriseN,Professional,ProfessionalE,ProfessionalN,Ultimate,UltimateE,UltimateN" -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -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 -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 "_csm=cscript.exe //NoLogo //Job:WmiMethod "%~nx0?.wsf"" -set "_csp=cscript.exe //NoLogo //Job:WmiPKey "%~nx0?.wsf"" -set "_csd=cscript.exe //NoLogo //Job:MPS "%~nx0?.wsf"" -if %_cwmi% EQU 0 set WMI_VBS=1 -if %WMI_VBS% EQU 0 ( -set "_zz1=wmic path" -set "_zz2=where" -set "_zz3=get" -set "_zz4=/value" -set "_zz5=(" -set "_zz6=)" -set "_zz7="wmic path" -set "_zz8=/value"" -) else ( -set "_zz1=%_csq%" -set "_zz2=" -set "_zz3=" -set "_zz4=" -set "_zz5="" -set "_zz6="" -set "_zz7=%_csq%" -set "_zz8=" -) +:: Check Evaluation version -setlocal EnableDelayedExpansion -pushd "!_work!" +set _eval= +set _evalserv= -if not defined _unattended ( -mode con cols=98 lines=31 -%psc% "&%_buf%" -title %_title% -) else ( -title Online KMS Activation %masver% -) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1 +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set _evalserv=1 +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1 -if defined _gui if %_Debug%==1 mode con cols=98 lines=30 +if defined _eval ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +call :dk_color %Red% "Checking Evaluation Edition [Evaluation editions cannot be activated outside of evaluation period.]" -if %_Debug% EQU 0 ( - set "_Nul1=1>nul" - set "_Nul2=2>nul" - set "_Nul6=2^>nul" - set "_Nul3=1>nul 2>nul" - set "_Pause=pause >nul" - if %Silent% EQU 0 (call :Begin) else (call :Begin >!_run! 2>&1) +if defined _evalserv ( +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( - set "_Nul1=" - set "_Nul2=" - set "_Nul6=" - set "_Nul3=" - set "_log=!_dsk!\%~n0" - if %Silent% EQU 0 ( - echo. - echo Running in Debug Mode... - if not defined _args (echo The window will be closed when finished) else (echo please wait...) - echo. - echo Writing debug log to: - echo "!_log!_Debug.log" - ) - @echo on - @prompt $G - @call :Begin >"!_log!_tmp.log" 2>&1 &cmd /u /c type "!_log!_tmp.log">"!_log!_Debug.log"&del "!_log!_tmp.log" -) -@echo off -if defined _gui if %_Debug%==1 ( -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) -@exit /b -:Begin +goto :ks_office +) +) ::======================================================================================================================================== -set act_failed=0 -set /a act_attempt=0 +:: Check if GVLK is already installed or not -echo. -echo Initializing... +call :k_channel -:: Check Internet connection. Works even if ICMP echo is disabled. +:: Detect Key -call :setserv -for %%a in (%srvlist%) do ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto IntConnected +set key= +set pkey= +set altkey= +set changekey= +set altedition= + +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if defined allapps call :ksdata winkey +if not defined key call :k_gvlk %nul% +if defined allapps if not defined key call :kms38fallback + +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 %nul6%') do if not errorlevel 1 set /a UBR=%%b +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( +call :dk_color %Blue% "Windows must be updated to build 19044.2788 or higher for IotEnterpriseS %KS% activation." ) ) -nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto IntConnected - -cls -if %_Debug%==1 ( -echo Error: Internet is not connected. -exit /b +if not defined key if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Activation ID Not Found]" ) -if defined _unattended ( -echo. -call :_color %_Red% "Internet is not connected, continuing the process anyway." +if not defined key if not defined _gvlk ( +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +if not defined skunotfound ( +echo This product does not support %KS% activation. +set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" ) else ( -%eline% -echo Internet is not connected. +echo Required license files not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b +goto :ks_office ) -:IntConnected +::======================================================================================================================================== -call :getserv +:: Install key -::======================================================================================================================================== +if defined changekey ( +call :dk_color %Blue% "[%altedition%] edition product key will be used to enable %KS% activation." +echo: +) -set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" -set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" -set "_oA14=59a52881-a989-479d-af46-f275c6370663" -set "IFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" -set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -set SSppHook=0 -for /f %%A in ('dir /b /ad %SysPath%\spp\tokens\skus') do ( - if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*GVLK*.xrm-ms" set SSppHook=1 - if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*VLKMS*.xrm-ms" set SSppHook=1 - if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\%%A\*VL-BYPASS*.xrm-ms" set SSppHook=1 +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: ) -set OsppHook=1 -sc query osppsvc %_Nul3% -if %errorlevel% EQU 1060 set OsppHook=0 -set ESU_KMS=0 -if %winbuild% LSS 9200 for /f %%A in ('dir /b /ad %SysPath%\spp\tokens\channels') do ( - if exist "%SysPath%\spp\tokens\channels\%%A\*VL-BYPASS*.xrm-ms" set ESU_KMS=1 +set _partial= +if not defined key ( +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null AND LicenseDependsOn is NULL" Get PartialProductKey /value %nul6%') do set "_partial=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#" +call echo Checking Installed Product Key [Partial Key - %%_partial%%] [Volume:GVLK] ) -if %ESU_KMS% EQU 1 (set "adoff=and LicenseDependsOn is NULL"&set "addon=and LicenseDependsOn is not NULL") else (set "adoff="&set "addon=") -set ESU_EDT=0 -if %ESU_KMS% EQU 1 for %%A in (%ESUEditions%) do ( - if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%%A\*.xrm-ms" set ESU_EDT=1 + +if defined key ( +call :dk_inskey "[%key%]" ) -:: if %ESU_EDT% EQU 1 set SSppHook=1 -set ESU_ADD=0 -if %winbuild% GEQ 9200 ( - set OSType=Win8 - set SppVer=SppExtComObj.exe -) else if %winbuild% GEQ 7600 ( - set OSType=Win7 - set SppVer=sppsvc.exe -) else ( - goto :UnsupportedVersion +::======================================================================================================================================== + +:ks_office + +if not %_actoff%==1 goto :ks_activate + +call :ks_setspp + +:: Check ohook install + +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 ) -if %OSType% EQU Win8 reg query "%IFEO%\sppsvc.exe" %_Nul3% && ( -reg delete "%IFEO%\sppsvc.exe" /f %_Nul3% -call :StopService sppsvc ) -if %ActWindows% EQU 0 if %ActOffice% EQU 0 set ActWindows=1 -set _AUR=1 -if %winbuild% GEQ 9600 ( - reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoGenTicket /t REG_DWORD /d 1 /f %_Nul3% - if %winbuild% EQU 14393 reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoAcquireGT /t REG_DWORD /d 1 /f %_Nul3% -) -call :StopService sppsvc -if %OsppHook% NEQ 0 call :StopService osppsvc - -:ReturnHook -call :UpdateOSPPEntry osppsvc.exe - -SET Win10Gov=0 -SET "EditionWMI=" -SET "EditionID=" -IF %winbuild% LSS 14393 if %SSppHook% NEQ 0 GOTO :Main -SET "RegKey=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages" -SET "Pattern=Microsoft-Windows-*Edition~31bf3856ad364e35" -SET "EditionPKG=FFFFFFFF" -FOR /F "TOKENS=8 DELIMS=\" %%A IN ('REG QUERY "%RegKey%" /f "%Pattern%" /k %_Nul6% ^| FIND /I "CurrentVersion"') DO ( - REG QUERY "%RegKey%\%%A" /v "CurrentState" %_Nul2% | FIND /I "0x70" %_Nul1% && ( - FOR /F "TOKENS=3 DELIMS=-~" %%B IN ('ECHO %%A') DO SET "EditionPKG=%%B" - ) -) -IF /I "%EditionPKG:~-7%"=="Edition" ( -SET "EditionID=%EditionPKG:~0,-7%" -) ELSE ( -FOR /F "TOKENS=3 DELIMS=: " %%A IN ('DISM /English /Online /Get-CurrentEdition %_Nul6% ^| FIND /I "Current Edition :"') DO SET "EditionID=%%A" -) -net start sppsvc /y %_Nul3% -set "_qr=%_zz7% SoftwareLicensingProduct %_zz2% %_zz5%ApplicationID='%_wApp%' %adoff% AND PartialProductKey is not NULL%_zz6% %_zz3% LicenseFamily %_zz8%" -FOR /F "TOKENS=2 DELIMS==" %%A IN ('%_qr% %_Nul6%') DO SET "EditionWMI=%%A" -IF "%EditionWMI%"=="" ( -IF %winbuild% GEQ 17063 FOR /F "SKIP=2 TOKENS=2*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionId') DO SET "EditionID=%%B" -IF %winbuild% LSS 14393 ( - FOR /F "SKIP=2 TOKENS=2*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionId') DO SET "EditionID=%%B" - GOTO :Main - ) -) -IF NOT "%EditionWMI%"=="" SET "EditionID=%EditionWMI%" -IF /I "%EditionID%"=="IoTEnterprise" SET "EditionID=Enterprise" -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%"=="ProfessionalCountrySpecific" SET "EditionID=Professional" -IF /I "%EditionID%"=="EnterpriseG" SET Win10Gov=1 -IF /I "%EditionID%"=="EnterpriseGN" SET Win10Gov=1 - -:Main -if defined EditionID (set "_winos=Windows %EditionID% edition") else (set "_winos=Detected Windows") -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %_Nul6%') do if not errorlevel 1 set "_winos=%%b" -set "nKMS=does not support KMS activation..." -set "nEval=Evaluation Editions cannot be activated. Please install full Windows OS." -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1 -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set "nEval=Server Evaluation cannot be activated. Please convert to full Server OS." -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1&set "nEval=Server Evaluation cannot be activated. Please convert to full Server OS." -set "_C16R=" -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && set "_C16R=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" +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 ) -if not defined _C16R reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && set "_C16R=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration" ) -set "_C15R=" -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath %_Nul3% && for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds %_Nul3% && call set "_C15R=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration" -if not defined _C15R reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && call set "_C15R=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag" ) -set "_C14R=" -if %_wow%==0 (reg query HKLM\SOFTWARE\Microsoft\Office\14.0\CVH /f Click2run /k %_Nul3% && set "_C14R=1") else (reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\CVH /f Click2run /k %_Nul3% && set "_C14R=1") -for %%A in (14,15,16,19,21) do call :officeLoc %%A -if %_O14MSI% EQU 1 set "_C14R=" -set S_OK=1 -call :RunSPP -if %ActOffice% NEQ 0 call :RunOSPP -if %ActOffice% EQU 0 (echo.&echo Office activation is OFF...) +if defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) -if exist "!_temp!\crv*.txt" del /f /q "!_temp!\crv*.txt" -if exist "!_temp!\*chk.txt" del /f /q "!_temp!\*chk.txt" -if exist "!_temp!\slmgr.vbs" del /f /q "!_temp!\slmgr.vbs" -call :StopService sppsvc -if %OsppHook% NEQ 0 call :StopService osppsvc +:: Check unsupported office versions -sc start sppsvc trigger=timer;sessionid=0 %_Nul3% +set o14c2r= +set o16uwp= -goto TheEnd +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office +%nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R +%nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -:RunSPP -set spp=SoftwareLicensingProduct -set sps=SoftwareLicensingService -set W1nd0ws=1 -set WinPerm=0 -set WinVL=0 -set Off1ce=0 -set RanR2V=0 -set aC2R21=0 -set aC2R19=0 -set aC2R16=0 -set aC2R15=0 -if %winbuild% GEQ 9200 if %ActOffice% NEQ 0 call :sppoff -set "_qr=%_zz1% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set WinVL=1) -if %WinVL% EQU 0 ( -if %ActWindows% EQU 0 ( - echo.&echo Windows activation is OFF... - ) else ( - if %SSppHook% EQU 0 ( - echo.&echo %_winos% %nKMS% - if defined _eval echo %nEval% - ) else ( - echo.&echo Failed checking KMS Activation ID^(s^) for Windows. &call :CheckWS - exit /b - ) - ) -) -if %WinVL% EQU 0 if %Off1ce% EQU 0 exit /b -set _gvlk=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -if %winbuild% GEQ 10240 %_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set _gvlk=1) -set gpr=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% GracePeriodRemaining %_zz8%" -if %winbuild% GEQ 10240 if %SkipKMS38% NEQ 0 if %_gvlk% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set "gpr=%%A" -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL" %_zz3% LicenseFamily %_zz4%" -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set W1nd0ws=0 -%_qr% %_Nul2% | findstr /i EnterpriseG %_Nul1% && (call set W1nd0ws=1) +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP + +if not "%o14c2r%%o16uwp%"=="" ( +echo: +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" ) -set "_qr=%_zz7% %sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr%') do set slsv=%%A -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -if %winbuild% GEQ 9200 ( -if not %xOS%==x86 ( -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 %_Nul3% -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" /reg:32 %_Nul3% -reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 %_Null% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 %_Nul3% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" /reg:32 %_Nul3% -) -reg delete "HKLM\%SPPk%\%_oApp%" /f %_Null% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -if %W1nd0ws% EQU 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkwin) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %adoff% %_zz6% %_zz3% ID %_zz8%" -if %W1nd0ws% EQU 1 if %ActWindows% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkwin) -:: set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' %addon% %_zz6% %_zz3% ID %_zz8%" -:: if %ESU_EDT% EQU 1 if %ActWindows% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :esuchk) -if %W1nd0ws% EQU 1 if %ActWindows% EQU 0 (echo.&echo Windows activation is OFF...) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' and Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -if %Off1ce% EQU 1 if %ActOffice% NEQ 0 for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkoff 1) -reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing %_Null% -reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching %_Null% -exit /b -:sppoff -set OffUWP=0 -if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %_Nul3% && ( -dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %_Nul3% && set OffUWP=1 -if not %xOS%==x86 dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %_Nul3% && set OffUWP=1 +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 ) -rem nothing installed -if %loc_off21% EQU 0 if %loc_off19% EQU 0 if %loc_off16% EQU 0 if %loc_off15% EQU 0 ( -if %winbuild% GEQ 9200 ( - if %OffUWP% EQU 0 (echo.&echo No Installed Office 2013-2021 Product Detected...) else (echo.&echo %_mOuwp%) - exit /b - ) -if %winbuild% LSS 9200 (if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b)) -) -if %vNextOverride% EQU 1 if %AutoR2V% EQU 1 ( -set sub_o365=0 -set sub_proj=0 -set sub_vsio=0 -if %sub_next% EQU 1 reg delete HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing /f %_Nul3% -) -set Off1ce=1 -set _sC2R=sppoff -set _fC2R=ReturnSPP - -set vol_off14=0&set vol_off15=0&set vol_off16=0&set vol_off19=0&set vol_off21=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' AND NOT Name like '%%MondoR_KMS_Automation%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" 2>&1 -find /i "Office 21" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off21=1) -find /i "Office 19" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off19=1) -find /i "Office 16" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off16=1) -find /i "Office 15" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off15=1) -if %winbuild% LSS 9200 find /i "Office 14" "!_temp!\sppchk.txt" %_Nul1% && (set vol_off14=1) -for %%A in (14,15,16,19,21) do if !loc_off%%A! EQU 0 set vol_off%%A=0 -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%'" %_zz3% LicenseFamily %_zz4%" -if %vol_off16% EQU 1 find /i "Office16MondoVL_KMS_Client" "!_temp!\sppchk.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% || (set vol_off16=0) -) -set "_qr=%_zz1% %spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%'" %_zz3% LicenseFamily %_zz4%" -if %vol_off15% EQU 1 find /i "OfficeMondoVL_KMS_Client" "!_temp!\sppchk.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% || (set vol_off15=0) -) - -set ret_off14=0&set ret_off15=0&set ret_off16=0&set ret_off19=0&set ret_off21=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND NOT Name like '%%O365%%' %_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" 2>&1 -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 21" %_Nul1% && (set ret_off21=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 19" %_Nul1% && (set ret_off19=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 16" %_Nul1% && (set ret_off16=1) -find /i "R_Retail" "!_temp!\sppchk.txt" %_Nul2% | find /i "Office 15" %_Nul1% && (set ret_off15=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oA14%'%_zz6% %_zz3% Description %_zz4%" -if %winbuild% LSS 9200 if %vol_off14% EQU 0 %_qr% %_Nul2% | findstr /i channel %_Nul1% && (set ret_off14=1) - -set run_off21=0&set prr_off21=0&set prv_off21=0 -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 0 set run_off21=1 -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 1 ( -for %%a in (%DO16Ids%) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -for %%a in (Professional) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21ProPlus2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21Standard2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off21+=1 - find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 - ) -) -if %loc_off21% EQU 1 if %ret_off21% EQU 1 if %_O16MSI% EQU 0 if %vol_off21% EQU 1 if %prv_off21% LSS %prr_off21% (set vol_off21=0&set run_off21=1) - -set run_off19=0&set prr_off19=0&set prv_off19=0 -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 0 set run_off19=1 -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 1 ( -for %%a in (%DO16Ids%) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -for %%a in (Professional) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19ProPlus2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19Standard2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off19+=1 - find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 - ) -) -if %loc_off19% EQU 1 if %ret_off19% EQU 1 if %_O16MSI% EQU 0 if %vol_off19% EQU 1 if %prv_off19% LSS %prr_off19% (set vol_off19=0&set run_off19=1) - -set run_off16=0&set prr_off16=0&set prv_off16=0 -if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R ( -for %%a in (%DO16Ids%) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -for %%a in (Professional) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16ProPlusVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21ProPlus2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19ProPlus2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16StandardVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21Standard2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19Standard2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off16+=1 - if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 - ) -) -if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R if %prv_off16% LSS %prr_off16% (set vol_off16=0&set run_off16=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%' %_zz6% %_zz3% LicenseFamily %_zz4%" -if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_o365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( -find /i "Office16MondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off16=1 -) - -set run_off15=0&set prr_off15=0&set prv_off15=0 -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 0 if defined _C15R set run_off15=1 -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 1 if defined _C15R ( -for %%a in (%DO15Ids%) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -for %%a in (Professional) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "OfficeProPlusVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -for %%a in (HomeBusiness,HomeStudent) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "OfficeStandardVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( - call set /a prr_off15+=1 - find /i "Office%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off15+=1 - ) -) -if %loc_off15% EQU 1 if %ret_off15% EQU 1 if %_O15MSI% EQU 0 if %vol_off15% EQU 1 if defined _C15R if %prv_off15% LSS %prr_off15% (set vol_off15=0&set run_off15=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%' %_zz6% %_zz3% LicenseFamily %_zz4%" -if %loc_off15% EQU 1 if %run_off15% EQU 0 if defined _C15R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( -find /i "OfficeMondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off15=1 -) - -set vol_offgl=1 -if %vol_off21% EQU 0 if %vol_off19% EQU 0 if %vol_off16% EQU 0 if %vol_off15% EQU 0 ( -if %winbuild% GEQ 9200 set vol_offgl=0 -if %winbuild% LSS 9200 if %vol_off14% EQU 0 set vol_offgl=0 -) -rem mixed Volume + Retail -if %run_off21% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off19% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off16% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -if %run_off15% EQU 1 if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -rem all supported Volume + message for unsupported -if %loc_off16% EQU 0 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if %OffUWP% EQU 1 (echo.&echo %_mOuwp%) -if %vol_offgl% EQU 1 ( -if %ret_off16% EQU 1 if %_O16MSI% EQU 1 (echo.&echo %_mO16m%) -if %ret_off15% EQU 1 if %_O15MSI% EQU 1 (echo.&echo %_mO15m%) -if %winbuild% LSS 9200 if %loc_off14% EQU 1 if %vol_off14% EQU 0 (if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%)) -exit /b + +::======================================================================================================================================== + +:: Check supported office versions + +call :ks_getpath + +sc query ClickToRunSvc %nul% +set error1=%errorlevel% + +if defined o16c2r if %error1% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" +set o16c2r= +set error=1 ) -set Off1ce=0 -rem Retail C2R -if %AutoR2V% EQU 1 if %RanR2V% EQU 0 goto :C2RR2V -:ReturnSPP -rem Retail MSI/C2R or failed C2R-R2V -if %loc_off21% EQU 1 if %vol_off21% EQU 0 ( -if %aC2R21% EQU 1 (echo.&echo %_mO21a%) else (echo.&echo %_mO21c%) + +sc query OfficeSvc %nul% +set error2=%errorlevel% + +if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" +set o15c2r= +set error=1 ) -if %loc_off19% EQU 1 if %vol_off19% EQU 0 ( -if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%) + +if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( +set error=1 +echo: +if not "%o14c2r%%o16uwp%"=="" ( +call :dk_color %Red% "Checking Supported Office Install [Not Found]" +) else ( +call :dk_color %Red% "Checking Installed Office [Not Found]" ) -if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( -if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) + +if defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. ) -if %loc_off15% EQU 1 if %vol_off15% EQU 0 ( -if defined _C15R (if %aC2R15% EQU 1 (echo.&echo %_mO15a%) else (echo.&echo %_mO15c%)) else if %_O15MSI% EQU 1 (if %ret_off15% EQU 1 echo.&echo %_mO15m%) +call :dk_color %Blue% "Download and install Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :ks_activate ) -if %winbuild% LSS 9200 if %loc_off14% EQU 1 if %vol_off14% EQU 0 ( -if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%) + +set multioffice= +if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%%o16uwp%"=="" set multioffice=1 + +if defined multioffice ( +echo: +call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommended to install one version only]" ) -exit /b -:sppchkoff -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz4%" -%_qr% > "!_temp!\sppchk.txt" -if %winbuild% LSS 9200 find /i "Office 14" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off14% EQU 0 exit /b) -find /i "Office 15" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off15% EQU 0 exit /b) -find /i "Office 16" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off16% EQU 0 exit /b) -find /i "Office 19" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off19% EQU 0 exit /b) -find /i "Office 21" "!_temp!\sppchk.txt" %_Nul1% && (if %loc_off21% EQU 0 exit /b) -if %1 EQU 1 (set _officespp=1) else (set _officespp=0) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -for /f "tokens=3 delims==, " %%G in ('%_qr%') do set OffVer=%%G -call :offchk%OffVer% -exit /b +::======================================================================================================================================== -:sppchkwin -set _officespp=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -if %winbuild% GEQ 14393 if %WinPerm% EQU 0 if %_gvlk% EQU 0 %_qr% %_Nul2% | findstr /i Windows %_Nul1% && (set _gvlk=1) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% LicenseStatus %_zz4%" -%_qr% %_Nul2% | findstr "1" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -if %winbuild% GEQ 14393 if %_gvlk% EQU 1 exit /b -if %WinPerm% EQU 1 exit /b -if %winbuild% LSS 10240 (call :winchk&exit /b) -for %%A in ( -b71515d9-89a2-4c60-88c8-656fbcca7f3a,af43f7f0-3b1e-4266-a123-1fdb53f4323b,075aca1f-05d7-42e5-a3ce-e349e7be7078 -11a37f09-fb7f-4002-bd84-f3ae71d11e90,43f2ab05-7c87-4d56-b27c-44d0f9a3dabd,2cf5af84-abab-4ff0-83f8-f040fb2576eb -6ae51eeb-c268-4a21-9aae-df74c38b586d,ff808201-fec6-4fd4-ae16-abbddade5706,34260150-69ac-49a3-8a0d-4a403ab55763 -4dfd543d-caa6-4f69-a95f-5ddfe2b89567,5fe40dd6-cf1f-4cf2-8729-92121ac2e997,903663f7-d2ab-49c9-8942-14aa9e0a9c72 -2cc171ef-db48-4adc-af09-7c574b37f139,5b2add49-b8f4-42e0-a77c-adad4efeeeb1 -) do ( -if /i '%app%' EQU '%%A' exit /b -) -if not defined EditionID (call :winchk&exit /b) -if %winbuild% LSS 14393 (call :winchk&exit /b) -if /i '%app%' EQU '32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee' if /i %EditionID% NEQ EnterpriseS exit /b -if /i '%app%' EQU 'ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69' if /i %EditionID% NEQ CloudEdition exit /b -if /i '%app%' EQU 'd30136fc-cb4b-416e-a23d-87207abc44a9' if /i %EditionID% NEQ CloudEditionN exit /b -if /i '%app%' EQU '0df4f814-3f57-4b8b-9a9d-fddadcd69fac' if /i %EditionID% NEQ CloudE exit /b -if /i '%app%' EQU 'e0c42288-980c-4788-a014-c080d2e1926e' if /i %EditionID% NEQ Education exit /b -if /i '%app%' EQU '73111121-5638-40f6-bc11-f1d7b0d64300' if /i %EditionID% NEQ Enterprise exit /b -if /i '%app%' EQU '2de67392-b7a7-462a-b1ca-108dd189f588' if /i %EditionID% NEQ Professional exit /b -if /i '%app%' EQU '3f1afc82-f8ac-4f6c-8005-1d233e606eee' if /i %EditionID% NEQ ProfessionalEducation exit /b -if /i '%app%' EQU '82bbc092-bc50-4e16-8e18-b74fc486aec3' if /i %EditionID% NEQ ProfessionalWorkstation exit /b -if /i '%app%' EQU '3c102355-d027-42c6-ad23-2e7ef8a02585' if /i %EditionID% NEQ EducationN exit /b -if /i '%app%' EQU 'e272e3e2-732f-4c65-a8f0-484747d0d947' if /i %EditionID% NEQ EnterpriseN exit /b -if /i '%app%' EQU 'a80b5abf-76ad-428b-b05d-a47d2dffeebf' if /i %EditionID% NEQ ProfessionalN exit /b -if /i '%app%' EQU '5300b18c-2e33-4dc2-8291-47ffcec746dd' if /i %EditionID% NEQ ProfessionalEducationN exit /b -if /i '%app%' EQU '4b1571d3-bafb-4b40-8087-a961be2caf65' if /i %EditionID% NEQ ProfessionalWorkstationN exit /b -if /i '%app%' EQU '58e97c99-f377-4ef1-81d5-4ad5522b5fd8' if /i %EditionID% NEQ Core exit /b -if /i '%app%' EQU 'cd918a57-a41b-4c82-8dce-1a538e221a83' if /i %EditionID% NEQ CoreSingleLanguage exit /b -if /i '%app%' EQU 'ec868e65-fadf-4759-b23e-93fe37f2cc29' if /i %EditionID% NEQ ServerRdsh exit /b -if /i '%app%' EQU 'e4db50ea-bda1-4566-b047-0ca50abc6f07' if /i %EditionID% NEQ ServerRdsh exit /b -set "_qr=%_zz1% %spp% %_zz2% "Description like '%%KMSCLIENT%%'" %_zz3% ID %_zz4%" -if /i "%app%" EQU "e4db50ea-bda1-4566-b047-0ca50abc6f07" ( -%_qr% | findstr /i "ec868e65-fadf-4759-b23e-93fe37f2cc29" %_Nul3% && (exit /b) -) -call :winchk -exit /b +:: Process Office 15.0 C2R -:winchk -if not defined tok (if %winbuild% GEQ 9200 (set "tok=4") else (set "tok=7")) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%LicenseStatus='1' and Description like '%%KMSCLIENT%%' %adoff% %_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && (exit /b) -echo. -set "_qr=%_zz1% %spp% %_zz2% %_zz5%LicenseStatus='1' and GracePeriodRemaining='0' %adoff% and PartialProductKey is not NULL%_zz6% %_zz3% Name %_zz4%" -%_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && ( -set WinPerm=1 -) -set WinOEM=0 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Name %_zz4%" -if %WinPerm% EQU 0 %_qr% %_Nul2% | findstr /i "Windows" %_Nul3% && set WinOEM=1 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Description %_zz8%" -if %WinOEM% EQU 1 ( -for /f "tokens=%tok% delims=, " %%G in ('%_qr%') do set "channel=%%G" -for %%A in (VOLUME_MAK, RETAIL, OEM_DM, OEM_SLP, OEM_COA, OEM_COA_SLP, OEM_COA_NSLP, OEM_NONSLP, OEM) do if /i "%%A"=="!channel!" set WinPerm=1 -) -if %WinPerm% EQU 0 ( -copy /y %SysPath%\slmgr.vbs "!_temp!\slmgr.vbs" %_Nul3% -cscript //nologo "!_temp!\slmgr.vbs" /xpr %_Nul2% | findstr /i "permanently" %_Nul3% && set WinPerm=1 -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ApplicationID='%_wApp%' and LicenseStatus='1' %adoff% %_zz6% %_zz3% Name %_zz8%" -if %WinPerm% EQU 1 ( -for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Checking: %%x -echo Product is Permanently Activated. -exit /b -) -call :insKey -exit /b +if not defined o15c2r goto :ks_starto16c2r -:esuchk -set _officespp=0 -set ESU_ADD=1 -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% LicenseStatus %_zz4%" -%_qr% %_Nul2% | findstr "1" %_Nul1% && (echo.&call :activate&exit /b) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='77db037b-95c3-48d7-a3ab-a9c6d41093e0'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "3fcc2df2-f625-428d-909a-1f76efc849b6" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='0e00c25d-8795-4fb7-9572-3803d91b6880'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "dadfcd24-6e37-47be-8f7f-4ceda614cece" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='4220f546-f522-46df-8202-4d07afd26454'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "0c29c85e-12d7-4af8-8e4d-ca1e424c480c" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='553673ed-6ddf-419c-a153-b760283472fd'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "f2b21bfc-a6b0-4413-b4bb-9f06b55f2812" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='04fa0286-fa74-401e-bbe9-fbfbb158010d'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "bfc078d0-8c7f-475c-8519-accc46773113" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='16c08c85-0c8b-4009-9b2b-f1f7319e45f9'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "23c6188f-c9d8-457e-81b6-adb6dacb8779" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%ID='8e7bfb1e-acc1-4f56-abae-b80fce56cd4b'%_zz6% %_zz3% LicenseStatus %_zz4%" -if /i "%app%" EQU "e7cce015-33d6-41c1-9831-022ba63fe1da" ( -%_qr% %_Nul2% | findstr "1" %_Nul1% && (exit /b) -) -set "_qr=%_zz1% %spp% %_zz2% %_zz5%PartialProductKey is not NULL%_zz6% %_zz3% ID %_zz4%" -%_qr% %_Nul2% | findstr /i "%app%" %_Nul1% && (echo.&call :activate&exit /b) -call :insKey -exit /b +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 -:RunOSPP -set spp=OfficeSoftwareProtectionProduct -set sps=OfficeSoftwareProtectionService -set Off1ce=0 -set RanR2V=0 -set aC2R21=0 -set aC2R19=0 -set aC2R16=0 -set aC2R15=0 -if %winbuild% LSS 9200 (set "aword=2010-2021") else (set "aword=2010") -if %OsppHook% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b) -if %winbuild% GEQ 9200 if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b) -set err_offsvc=0 -net start osppsvc /y %_Nul3% || ( -sc start osppsvc %_Nul3% -if !errorlevel! EQU 1053 set err_offsvc=1 -) -if %err_offsvc% EQU 1 (echo.&echo Error: osppsvc service is not running...&exit /b) -if %winbuild% GEQ 9200 call :oppoff -if %winbuild% LSS 9200 call :sppoff -if %Off1ce% EQU 0 exit /b -set "vPrem="&set "vProf=" -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='OfficeVisioPrem-MAK'%_zz6% %_zz3% LicenseStatus %_zz8%" -if %loc_off14% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set vPrem=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='OfficeVisioPro-MAK'%_zz6% %_zz3% LicenseStatus %_zz8%" -if %loc_off14% EQU 1 for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set vProf=%%A -set "_qr=%_zz7% %sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set slsv=%%A -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" %_Nul3% -reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -set "_qr=%_zz7% %spp% %_zz2% %_zz5%Description like '%%KMSCLIENT%%' %_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%G in ('%_qr%') do (set app=%%G&call :sppchkoff 2) -reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing %_Null% -reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching %_Null% -exit /b +set oVer=15 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") -:oppoff -set "_qr=%_zz1% %spp% %_zz3% Description %_zz4%" -%_qr% %_Nul2% | findstr /i KMSCLIENT %_Nul1% && ( -set Off1ce=1 -exit /b +echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") ) -set ret_off14=0 -%_qr% %_Nul2% | findstr /i channel %_Nul1% && (set ret_off14=1) -if defined _C14R (echo.&echo %_mO14c%) else if %_O14MSI% EQU 1 (if %ret_off14% EQU 1 echo.&echo %_mO14m%) -exit /b -:offchk -set ls=0 -set ls2=0 -set ls3=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~1'%_zz6% %_zz3% LicenseStatus %_zz8%" -for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~3'%_zz6% %_zz3% LicenseStatus %_zz8%" -if /i not "%~3"=="" for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls2=%%A -set "_qr=%_zz7% %spp% %_zz2% %_zz5%LicenseFamily='Office%~5'%_zz6% %_zz3% LicenseStatus %_zz8%" -if /i not "%~5"=="" for /f "tokens=2 delims==" %%A in ('%_qr% %_Nul6%') do set /a ls3=%%A -if "%ls3%"=="1" ( -echo Checking: %~6 -echo Product is Permanently Activated. -exit /b -) -if "%ls2%"=="1" ( -echo Checking: %~4 -echo Product is Permanently Activated. -exit /b -) -if "%ls%"=="1" ( -echo Checking: %~2 -echo Product is Permanently Activated. -exit /b -) -call :insKey -exit /b +set "_oLPath=%_oRoot%\Licenses" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" -:offchk21 -if /i '%app%' EQU 'f3fb2d68-83dd-4c8b-8f09-08e0d950ac3b' exit /b -if /i '%app%' EQU '76093b1b-7057-49d7-b970-638ebcbfd873' exit /b -if /i '%app%' EQU 'a3b44174-2451-4cd6-b25f-66638bfb9046' exit /b -if /i '%app%' EQU 'fbdb3e18-a8ef-4fb3-9183-dffd60bd0984' ( -call :offchk "21ProPlus2021VL_MAK_AE1" "Office ProPlus 2021" "21ProPlus2021VL_MAK_AE2" -exit /b -) -if /i '%app%' EQU '080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3' ( -call :offchk "21Standard2021VL_MAK_AE" "Office Standard 2021" -exit /b -) -if /i '%app%' EQU '76881159-155c-43e0-9db7-2d70a9a3a4ca' ( -call :offchk "21ProjectPro2021VL_MAK_AE1" "Project Pro 2021" "21ProjectPro2021VL_MAK_AE2" -exit /b -) -if /i '%app%' EQU '6dd72704-f752-4b71-94c7-11cec6bfc355' ( -call :offchk "21ProjectStd2021VL_MAK_AE" "Project Standard 2021" -exit /b -) -if /i '%app%' EQU 'fb61ac9a-1688-45d2-8f6b-0674dbffa33c' ( -call :offchk "21VisioPro2021VL_MAK_AE" "Visio Pro 2021" -exit /b -) -if /i '%app%' EQU '72fce797-1884-48dd-a860-b2f6a5efd3ca' ( -call :offchk "21VisioStd2021VL_MAK_AE" "Visio Standard 2021" -exit /b -) -call :insKey -exit /b +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] -:offchk19 -if /i '%app%' EQU '0bc88885-718c-491d-921f-6f214349e79c' exit /b -if /i '%app%' EQU 'fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9' exit /b -if /i '%app%' EQU '500f6619-ef93-4b75-bcb4-82819998a3ca' exit /b -if /i '%app%' EQU '85dd8b5f-eaa4-4af3-a628-cce9e77c9a03' ( -call :offchk "19ProPlus2019VL_MAK_AE" "Office ProPlus 2019" -exit /b -) -if /i '%app%' EQU '6912a74b-a5fb-401a-bfdb-2e3ab46f4b02' ( -call :offchk "19Standard2019VL_MAK_AE" "Office Standard 2019" -exit /b -) -if /i '%app%' EQU '2ca2bf3f-949e-446a-82c7-e25a15ec78c4' ( -call :offchk "19ProjectPro2019VL_MAK_AE" "Project Pro 2019" -exit /b +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto16c2r ) -if /i '%app%' EQU '1777f0e3-7392-4198-97ea-8ae4de6f6381' ( -call :offchk "19ProjectStd2019VL_MAK_AE" "Project Standard 2019" -exit /b -) -if /i '%app%' EQU '5b5cf08f-b81a-431d-b080-3450d8620565' ( -call :offchk "19VisioPro2019VL_MAK_AE" "Visio Pro 2019" -exit /b -) -if /i '%app%' EQU 'e06d7df3-aad0-419d-8dfb-0ac37e2bdf39' ( -call :offchk "19VisioStd2019VL_MAK_AE" "Visio Standard 2019" -exit /b -) -call :insKey -exit /b -:offchk16 -if /i '%app%' EQU 'd450596f-894d-49e0-966a-fd39ed4c4c64' ( -call :offchk "16ProPlusVL_MAK" "Office ProPlus 2016" -exit /b -) -if /i '%app%' EQU 'dedfa23d-6ed1-45a6-85dc-63cae0546de6' ( -call :offchk "16StandardVL_MAK" "Office Standard 2016" -exit /b -) -if /i '%app%' EQU '4f414197-0fc2-4c01-b68a-86cbb9ac254c' ( -call :offchk "16ProjectProVL_MAK" "Project Pro 2016" -exit /b -) -if /i '%app%' EQU 'da7ddabc-3fbe-4447-9e01-6ab7440b4cd4' ( -call :offchk "16ProjectStdVL_MAK" "Project Standard 2016" -exit /b -) -if /i '%app%' EQU '6bf301c1-b94a-43e9-ba31-d494598c47fb' ( -call :offchk "16VisioProVL_MAK" "Visio Pro 2016" -exit /b -) -if /i '%app%' EQU 'aa2a7821-1827-4c2c-8f1d-4513a34dda97' ( -call :offchk "16VisioStdVL_MAK" "Visio Standard 2016" -exit /b -) -if /i '%app%' EQU '829b8110-0e6f-4349-bca4-42803577788d' ( -call :offchk "16ProjectProXC2RVL_MAKC2R" "Project Pro 2016 C2R" -exit /b -) -if /i '%app%' EQU 'cbbaca45-556a-4416-ad03-bda598eaa7c8' ( -call :offchk "16ProjectStdXC2RVL_MAKC2R" "Project Standard 2016 C2R" -exit /b -) -if /i '%app%' EQU 'b234abe3-0857-4f9c-b05a-4dc314f85557' ( -call :offchk "16VisioProXC2RVL_MAKC2R" "Visio Pro 2016 C2R" -exit /b -) -if /i '%app%' EQU '361fe620-64f4-41b5-ba77-84f8e079b1f7' ( -call :offchk "16VisioStdXC2RVL_MAKC2R" "Visio Standard 2016 C2R" -exit /b -) -call :insKey -exit /b +if "%_actprojvis%"=="0" call :oh_fixprids +call :ks_process -:offchk15 -if /i '%app%' EQU 'b322da9c-a2e2-4058-9e4e-f59a6970bd69' ( -call :offchk "ProPlusVL_MAK" "Office ProPlus 2013" -exit /b -) -if /i '%app%' EQU 'b13afb38-cd79-4ae5-9f7f-eed058d750ca' ( -call :offchk "StandardVL_MAK" "Office Standard 2013" -exit /b -) -if /i '%app%' EQU '4a5d124a-e620-44ba-b6ff-658961b33b9a' ( -call :offchk "ProjectProVL_MAK" "Project Pro 2013" -exit /b -) -if /i '%app%' EQU '427a28d1-d17c-4abf-b717-32c780ba6f07' ( -call :offchk "ProjectStdVL_MAK" "Project Standard 2013" -exit /b +::======================================================================================================================================== + +:ks_starto16c2r + +:: Process Office 16.0 C2R + +if not defined o16c2r goto :ks_startmsi + +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") + +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") ) -if /i '%app%' EQU 'e13ac10e-75d0-4aff-a0cd-764982cf541c' ( -call :offchk "VisioProVL_MAK" "Visio Pro 2013" -exit /b +set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% + +set "_oLPath=%_oRoot%\Licenses16" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_startmsi ) -if /i '%app%' EQU 'ac4efaf0-f81f-4f61-bdf7-ea32b02ab117' ( -call :offchk "VisioStdVL_MAK" "Visio Standard 2013" -exit /b + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ks_process + +::======================================================================================================================================== + +:ks_startmsi + +if defined o14msi call :ks_setspp 14 +if defined o14msi call :ks_processmsi 14 %o14msi_reg% +call :ks_setspp +if defined o15msi call :ks_processmsi 15 %o15msi_reg% +if defined o16msi call :ks_processmsi 16 %o16msi_reg% + +::======================================================================================================================================== + +echo: +call :oh_clearblock +if "%o16msi%%o15msi%"=="" if not "%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey +call :oh_licrefresh + +::======================================================================================================================================== + +:ks_activate + +:: Opt out of sending KMSclient activation data to Microsoft +:: https://learn.microsoft.com/windows/privacy/manage-connections-from-windows-operating-system-components-to-microsoft-services#19-software-protection-platform + +if %winbuild% GEQ 9600 ( +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoGenTicket /t REG_DWORD /d 1 /f %nul% +if %winbuild% EQU 14393 reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Software Protection Platform" /v NoAcquireGT /t REG_DWORD /d 1 /f %nul% +echo Turn off %KS% AVS Validation [Successful] ) -call :insKey -exit /b -:offchk14 -if /i '%app%' EQU '6f327760-8c5c-417c-9b61-836a98287e0c' ( -call :offchk "ProPlus-MAK" "Office ProPlus 2010" "ProPlusAcad-MAK" "Office Professional Academic 2010" -exit /b +set "slp=SoftwareLicensingProduct" +set "ospp=OfficeSoftwareProtectionProduct" + +echo: +echo Activating Volume Products... +if %_actwin%==1 call :_taskgetids sppwid %slp% windows +if %_actoff%==1 call :_taskgetids sppoid %slp% office +if %_actoff%==1 call :_taskgetids osppid %ospp% office + +if not defined sppwid if not defined sppoid if not defined osppid ( +if not defined keyerror ( +echo No installed Volume Windows / Office products found. +) else ( +call :dk_color %Red% "Failed to get installed Volume Windows / Office products." ) -if /i '%app%' EQU '9da2a678-fb6b-4e67-ab84-60dd6a9c819a' ( -call :offchk "Standard-MAK" "Office Standard 2010" "StandardAcad-MAK" "Office Standard Academic 2010" -exit /b +call :_taskgetserv +call :_taskregserv ) -if /i '%app%' EQU 'ea509e87-07a1-4a45-9edc-eba5a39f36af' ( -call :offchk "SmallBusBasics-MAK" "Office Small Business Basics 2010" -exit /b + +call :_taskact +if not defined showfix if defined _tserror (call :dk_color %Blue% "%_fixmsg%" & set showfix=1) + +:: Don't create renewal task if Windows/Office volume IDs are not found, even if script is set to create it by default +:: Don't create renewal task if only Windows volume ID is found and OEM BIOS error is present on Windows 7, even if script is set to create it by default + +set _deltask= +if not %_norentsk%==0 set _deltask=1 +if not defined _deltask ( +if %_actwin%==0 call :_taskgetids sppwid %slp% windows +if %_actoff%==0 call :_taskgetids sppoid %slp% office +if %_actoff%==0 call :_taskgetids osppid %ospp% office ) -if /i '%app%' EQU 'df133ff7-bf14-4f95-afe3-7b48e7e331ef' ( -call :offchk "ProjectPro-MAK" "Project Pro 2010" -exit /b + +if not defined sppwid if not defined sppoid if not defined osppid (set _deltask=1) +if defined oemerr if not defined sppoid if not defined osppid (set _deltask=1) + +if not defined _deltask ( +call :ks_renewal +) else ( +if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" call :dk_color %Gray% "Deleting activation renewal task..." +call :dk_color %Gray% "Skipping creation of activation renewal task..." +call :ks_clearstuff %nul% +if not defined _server ( +if %winbuild% GEQ 9200 ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +if defined _C16R ( +REM mass grave[.]dev/office-license-is-not-genuine +set _server=10.0.0.10 +call :_taskregserv +echo Keeping the non-existent IP address 10.0.0.10 as %KS% Server. ) -if /i '%app%' EQU '5dc7bf61-5ec9-4996-9ccb-df806a2d0efe' ( -call :offchk "ProjectStd-MAK" "Project Standard 2010" "ProjectStd-MAK2" "Project Standard 2010" -exit /b ) -if /i '%app%' EQU '92236105-bb67-494f-94c7-7f7a607929bd' ( -call :offchk "VisioPrem-MAK" "Visio Premium 2010" "VisioPro-MAK" "Visio Pro 2010" -exit /b +if not defined _C16R ( +call :_taskclear-cache +echo Cleared %KS% Server from the registry. ) -if defined vPrem exit /b -if /i '%app%' EQU 'e558389c-83c3-4b29-adfe-5e4d7f46c358' ( -call :offchk "VisioPro-MAK" "Visio Pro 2010" "VisioStd-MAK" "Visio Standard 2010" -exit /b ) -if defined vProf exit /b -if /i '%app%' EQU '9ed833ff-4f92-4f36-b370-8683a4f13275' ( -call :offchk "VisioStd-MAK" "Visio Standard 2010" -exit /b ) -call :insKey -exit /b -:officeLoc -set loc_off%1=0 -set _O%1MSI=0 -if %1 EQU 19 ( -if defined _C16R reg query %_C16R% /v ProductReleaseIds %_Nul2% | findstr 2019 %_Nul1% && set loc_off%1=1 -exit /b -) -if %1 EQU 21 ( -if defined _C16R reg query %_C16R% /v ProductReleaseIds %_Nul2% | findstr 2021 %_Nul1% && set loc_off%1=1 -exit /b -) +:: https://learn.microsoft.com/azure/virtual-desktop/windows-10-multisession-faq -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\%1.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" ( -set loc_off%1=1 -set _O%1MSI=1 -) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\%1.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" ( -set loc_off%1=1 -set _O%1MSI=1 +if %_actwin%==1 for %%# in (407) do if %osSKU%==%%# ( +call :dk_color %Red% "%winos% does not support activation on non-azure platforms." ) -if %1 EQU 16 if defined _C16R ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_C16R% /v ProductReleaseIds') do echo %%b> "!_temp!\c2rchk.txt" -for %%a in (%LV16Ids%,ProjectProX,ProjectStdX,VisioProX,VisioStdX) do ( - findstr /I /C:"%%aVolume" "!_temp!\c2rchk.txt" %_Nul1% && set loc_off%1=1 - ) -for %%a in (%LR16Ids%) do ( - findstr /I /C:"%%aRetail" "!_temp!\c2rchk.txt" %_Nul1% && set loc_off%1=1 - ) -exit /b +if %_actoff%==1 if defined sppoid if not defined _tserror if %_NoEditionChange%==0 if defined ohub ( +echo: +call :dk_color %Gray% "Office apps such as Word, Excel are activated, use them directly. Ignore 'Buy' button in Office dashboard app." ) -if %1 EQU 15 if defined _C15R ( -set loc_off%1=1 -exit /b -) +:: Trigger reevaluation of SPP's Scheduled Tasks + +call :dk_reeval %nul% +goto :dk_done + +::======================================================================================================================================== + +:ks_ip + +cls +set _server= +echo: +echo Enter / Paste the %KS% Server address, or just press Enter to return: +echo: +set /p _server= +if not defined _server goto :ks_menu +set "_server=%_server: =%" + +echo: +echo Enter / Paste the %KS% Port address, or just press Enter to use default: +echo: +set /p _port= +if not defined _port goto :ks_menu +set "_port=%_port: =%" + +goto :ks_menu + +::======================================================================================================================================== + +:ks_reset -if exist "%ProgramFiles%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 -if not %xOS%==x86 if exist "%ProgramW6432%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 -if not %xOS%==x86 if exist "%ProgramFiles(x86)%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 +set key= +set _oRoot= +set _oArch= +set _oIds= +set _oLPath= +set _actid= +set _prod= +set _lic= +set _arr= +set _prids= +set _config= +set _version= +set _License= +set _oBranding= exit /b -:officeSub -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vsio=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vsio=1 -if %sub_o365% EQU 1 set sub_next=1 -if %sub_proj% EQU 1 set sub_next=1 -if %sub_vsio% EQU 1 set sub_next=1 +::======================================================================================================================================== + +:ks_getpath + +set o16c2r= +set o15c2r= +set o16msi= +set o15msi= +set o14msi= + +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office + +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) + +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) + exit /b -:insKey -set S_OK=1 -echo. -set "_key=" -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %ESU_ADD% EQU 0 for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Installing Key: %%x -if %ESU_ADD% EQU 1 for /f "tokens=2 delims==f" %%x in ('%_qr%') do echo Installing Key: %%x -set ESU_ADD=0 -call :keys %app% -if "%_key%"=="" (echo No associated KMS Client key found&exit /b) -set "_qr=wmic path %sps% where Version='%slsv%' call InstallProductKey ProductKey="%_key%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %sps% "%_key%"" -%_qr% %_Nul3% -set ERRORCODE=%ERRORLEVEL% -if %ERRORCODE% NEQ 0 ( -cmd /c exit /b %ERRORCODE% -echo Failed: 0x!=ExitCode! -set S_OK=0 +::======================================================================================================================================== + +:: Some Office Retail to Volume converter tools may edit the ProductReleaseIds to add VL products. This code restores it because it may affect features. + +:oh_fixprids + +if not defined _prids ( +call :dk_color %Gray% "Checking ProductReleaseIds In Registry [Not Found]" exit /b ) -set "_qr=wmic path %sps% where Version='%slsv%' call RefreshLicenseStatus" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%sps%.Version='%slsv%'" RefreshLicenseStatus" -if %sps% EQU SoftwareLicensingService %_qr% %_Nul3% -:activate -set S_OK=1 -if %sps% EQU SoftwareLicensingService ( -if %_officespp% EQU 0 (reg delete "HKLM\%SPPk%\%_wApp%\%app%" /f %_Null%) else (reg delete "HKLM\%SPPk%\%_oApp%\%app%" /f %_Null%) +set _pridsR= +set _pridsE= +for /f "skip=2 tokens=2*" %%a in ('"reg query %_prids%" %nul6%') do (set "_pridsR=%%b") + +set _pridsR=%_pridsR:,= % +for %%# in (%_pridsR%) do (echo %%# | findstr /I "%_oIds%" %nul1% || set _pridsE=1) +for %%# in (%_oIds%) do (echo %%# | findstr /I "%_pridsR%" %nul1% || set _pridsE=1) + +if not defined _pridsE exit /b +reg add %_prids% /t REG_SZ /d "" /f %nul1% + +for %%# in (%_oIds%) do ( +for /f "skip=2 tokens=2*" %%a in ('reg query %_prids%') do if not "%%b"=="" ( +reg add %_prids% /t REG_SZ /d "%%b,%%#" /f %nul1% ) else ( -reg delete "HKLM\%OPPk%\%_oA14%\%app%" /f %_Null% -reg delete "HKLM\%OPPk%\%_oApp%\%app%" /f %_Null% -) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %W1nd0ws% EQU 0 if %_officespp% EQU 0 if %sps% EQU SoftwareLicensingService ( -reg add "HKLM\%SPPk%\%_wApp%\%app%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" %_Nul3% -reg add "HKLM\%SPPk%\%_wApp%\%app%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% -for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Checking: %%x -echo Product is KMS 2038 Activated. -set _keepkms38=1 -exit /b +reg add %_prids% /t REG_SZ /d "%%#" /f %nul1% ) -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% Name %_zz8%" -if %act_attempt% LSS 1 ( -if %ESU_ADD% EQU 0 for /f "tokens=2 delims==" %%x in ('%_qr%') do echo Activating: %%x -if %ESU_ADD% EQU 1 for /f "tokens=2 delims==f" %%x in ('%_qr%') do echo Activating: %%x -) - -set ESU_ADD=0 -set "_qr=wmic path %spp% where ID='%app%' call Activate" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%spp%.ID='%app%'" Activate" -%_qr% %_Nul3% -call set ERRORCODE=%ERRORLEVEL% -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073418187 ( -echo Product Activation Failed: 0xC004F035 -if %OSType% EQU Win7 echo Windows 7 cannot be KMS-activated on this computer due to unqualified OEM BIOS. -echo See Read Me for details. -exit /b ) -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -echo See KB2736303 for details. + exit /b + +::======================================================================================================================================== + +:: After retail to volume conversion, new product ID needs .OSPPReady key in registry, otherwise product info may not fully reflect + +:ks_osppready + +echo: %_config% | find /i "propertyBag" %nul1% && ( +set "_osppt=REG_DWORD" +set "_osppready=%o15c2r_reg%" +) || ( +set "_osppt=REG_SZ" +set "_osppready=%_config%" ) -if %act_attempt% LSS 1 if %ERRORCODE% EQU -1073422315 ( -echo Product Activation Failed: 0xC004E015 -echo Running slmgr.vbs /rilc to mitigate. -cscript //Nologo //B %SysPath%\slmgr.vbs /rilc + +reg add %_osppready% /f /v %_altoffid%.OSPPReady /t %_osppt% /d 1 %nul1% + +:: Office builds before 16.0.10730.20102 need the Installed license product ID in ProductReleaseIds, otherwise product info may not fully reflect + +if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" exit /b + +reg query %_prids% | findstr /I "%_altoffid%" %nul1% +if %errorlevel% NEQ 0 ( +for /f "skip=2 tokens=2*" %%a in ('reg query %_prids%') do reg add %_prids% /t REG_SZ /d "%%b,%_altoffid%" /f %nul1% ) -set gpr=0 -set gpr2=0 -set "_qr=%_zz7% %spp% %_zz2% %_zz5%ID='%app%'%_zz6% %_zz3% GracePeriodRemaining %_zz8%" -for /f "tokens=2 delims==" %%x in ('%_qr%') do (set gpr=%%x&set /a "gpr2=(%%x+1440-1)/1440") -if %act_attempt% LSS 1 if %ERRORCODE% EQU 0 if %gpr% EQU 0 ( -echo Product Activation succeeded, but Remaining Period failed to increase. -if %OSType% EQU Win7 echo This could be related to the error described in KB4487266 exit /b -) -set Act_OK=0 -if %gpr% EQU 43200 if %_officespp% EQU 0 if %winbuild% GEQ 9200 set Act_OK=1 -if %gpr% EQU 64800 set Act_OK=1 -if %gpr% GTR 259200 if %Win10Gov% EQU 1 set Act_OK=1 -if %gpr% EQU 259200 set Act_OK=1 -if %ERRORCODE% EQU 0 if %Act_OK% EQU 1 ( -call :_color %_Green% "Product Activation Successful" -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set /a act_attempt=0 -exit /b -) +::======================================================================================================================================== + +:ks_setspp -if not !server_num! gtr %max_servers% ( -if %act_attempt% LSS 3 ( -set /a act_attempt+=1 -call :getserv -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" if %winbuild% GEQ 9200 ( -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" /reg:32 +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService +) else ( +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService ) +if "%1"=="14" ( +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService ) -goto :activate +exit /b + +::======================================================================================================================================== + +:ks_process + +for %%# in (%_oIds%) do ( + +set skipprocess= +if %_NoEditionChange%==1 if not defined _oBranding ( +set foundprod= +call :ksdata chkprod %%# +if not defined foundprod ( +set skipprocess=1 +call :dk_color %Gray% "Skipping Because NoEditionChange Mode [%%#]" ) ) -cmd /c exit /b %ERRORCODE% -if %ERRORCODE% NEQ 0 ( -call :_color %_Red% "Product Activation Failed: 0x!=ExitCode!" -) else ( -call :_color %_Red% "Product Activation Failed" -) -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set S_OK=0 -set act_failed=1 -set /a act_attempt=0 -exit /b -:StopService -sc query %1 | find /i "STOPPED" %_Nul1% || net stop %1 /y %_Nul3% -sc query %1 | find /i "STOPPED" %_Nul1% || sc stop %1 %_Nul3% -goto :eof +if "%_actprojvis%"=="1" if not defined skipprocess ( +echo %%# | findstr /i "Project Visio" %nul% || ( +set skipprocess=1 +call :dk_color %Gray% "Skipping Because Project/Visio Mode [%%#]" +) +) -:UpdateOSPPEntry -if /i %1 EQU osppsvc.exe ( -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "!KMS_IP!" %_Nul3% -reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%KMS_Port%" %_Nul3% +if "%_actprojvis%"=="0" if not defined skipprocess echo %_oIds% | findstr /i "O365" %nul% && ( +echo %%# | findstr /i "Project Visio" %nul% && ( +set skipprocess=1 +echo Skipping Because Mondo Is Available [%%#] +) ) -goto :eof -:CheckFR +if not defined skipprocess ( +set key= +set _actid= +set _preview= +set _License=%%# +set _altoffid= -set WMIe=0 -call :CheckWS -if %WMIe% EQU 1 ( -echo. -echo %_err% -echo Failed running WMI query check. +echo %%# | find /i "2024" %nul% && ( +if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview ) -goto :eof +set _prod=%%#!_preview! -:CheckWS -set "_qrw=%_zz1% Win32_ComputerSystem %_zz3% CreationClassName %_zz4%" -set "_qrs=%_zz1% SoftwareLicensingService %_zz3% Version %_zz4%" +call :ksdata getinfo !_prod! -%_qrs% %_Nul2% | findstr /r "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" %_Nul1% || ( - set WMIe=1 - %_qrw% %_Nul2% | find /i "ComputerSystem" %_Nul1% && ( - echo Error: SPP is not responding - ) || ( - echo Error: WMI ^& SPP are not responding - ) +if defined _altoffid ( +set _License=!_altoffid! +echo Converting Retail To Volume [!_prod! To !_altoffid!] +set _prod=!_altoffid! +call :ks_osppready ) -goto :eof -:C2RR2V -set RanR2V=1 -set "_SLMGR=%SysPath%\slmgr.vbs" -if %_Debug% EQU 0 ( -set "_cscript=cscript //Nologo //B" -) else ( -set "_cscript=cscript //Nologo" -) -set _LTSC=0 -set "_tag="&set "_ons= 2016" -sc query ClickToRunSvc %_Nul3% -set error1=%errorlevel% -sc query OfficeSvc %_Nul3% -set error2=%errorlevel% -if %error1% EQU 1060 if %error2% EQU 1060 ( -echo Error: Office C2R service is not detected -goto :%_fC2R% -) -set _Office16=0 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( - set _Office16=1 -) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" ( - set _Office16=1 -) -set _Office15=0 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( - set _Office15=1 -) -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" ( - set _Office15=1 -) -if %_Office16% EQU 0 if %_Office15% EQU 0 ( -echo Error: Office C2R InstallPath is not detected -goto :%_fC2R% -) - -:Reg16istry -if %_Office16% EQU 0 goto :Reg15istry -set "_InstallRoot=" -set "_ProductIds=" -set "_GUID=" -set "_Config=" -set "_PRIDs=" -set "_LicensesPath=" -set "_Integrator=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_InstallRoot=%%b\root") -if not "%_InstallRoot%"=="" ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_OSPPVBS=%%b\Office16\OSPP.VBS") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul6%') do (set "_GUID=%%b") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_ProductIds=%%b") - set "_Config=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" - set "_PRIDs=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\ProductReleaseIDs" +if not "!key!"=="" ( +echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +call :dk_inskey "[!key!] [!_prod!]" ) else ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_InstallRoot=%%b\root") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul6%') do (set "_OSPPVBS=%%b\Office16\OSPP.VBS") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul6%') do (set "_GUID=%%b") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_ProductIds=%%b") - set "_Config=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration" - set "_PRIDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\ProductReleaseIDs" -) -set "_LicensesPath=%_InstallRoot%\Licenses16" -set "_Integrator=%_InstallRoot%\integration\integrator.exe" -for /f "skip=2 tokens=2*" %%a in ('"reg query %_PRIDs% /v ActiveConfiguration" %_Nul6%') do set "_PRIDs=%_PRIDs%\%%b" -if "%_ProductIds%"=="" ( -if %_Office15% EQU 0 (echo Error: Office C2R ProductIDs are not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if not exist "%_LicensesPath%\ProPlus*.xrm-ms" ( -if %_Office15% EQU 0 (echo Error: Office C2R Licenses files are not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if not exist "%_Integrator%" ( -if %_Office15% EQU 0 (echo Error: Office C2R Licenses Integrator is not detected&goto :%_fC2R%) else (goto :Reg15istry) -) -if exist "%_LicensesPath%\Word2019VL_KMS_Client_AE*.xrm-ms" (set "_tag=2019"&set "_ons= 2019") -if exist "%_LicensesPath%\Word2021VL_KMS_Client_AE*.xrm-ms" (set _LTSC=1) -if %winbuild% LSS 10240 if !_LTSC! EQU 1 (set "_tag=2021"&set "_ons= 2021") -if %_Office15% EQU 0 goto :CheckC2R - -:Reg15istry -set "_Install15Root=" -set "_Product15Ids=" -set "_Con15fig=" -set "_PR15IDs=" -set "_OSPP15Ready=" -set "_Licenses15Path=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do (set "_Install15Root=%%b\root") -if not "%_Install15Root%"=="" ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" - set "_PR15IDs=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\ProductReleaseIDs" - set "_OSPP15Ready=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration" +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" +call :dk_color %Blue% "Make sure you are using Latest MAS script." ) else ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath" %_Nul6%') do (set "_Install15Root=%%b\root") - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration /v ProductReleaseIds" - set "_PR15IDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\ProductReleaseIDs" - set "_OSPP15Ready=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\Configuration" -) -set "_OSPP15ReadT=REG_SZ" -if "%_Product15Ids%"=="" ( -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" - set "_OSPP15Ready=HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun" - set "_OSPP15ReadT=REG_DWORD" - ) -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid %_Nul3% && ( - for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" %_Nul6%') do (set "_Product15Ids=%%b") - set "_Con15fig=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun\propertyBag /v productreleaseid" - set "_OSPP15Ready=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun" - set "_OSPP15ReadT=REG_DWORD" - ) -) -set "_Licenses15Path=%_Install15Root%\Licenses" -if exist "%ProgramFiles%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramFiles%\Microsoft Office\Office15\OSPP.VBS" -) else if exist "%ProgramW6432%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramW6432%\Microsoft Office\Office15\OSPP.VBS" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office15\OSPP.VBS" ( - set "_OSPP15VBS=%ProgramFiles(x86)%\Microsoft Office\Office15\OSPP.VBS" -) -if "%_Product15Ids%"=="" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R ProductIDs are not detected&goto :%_fC2R%) else (goto :CheckC2R) -) -if not exist "%_Licenses15Path%\ProPlus*.xrm-ms" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R Licenses files are not detected&goto :%_fC2R%) else (goto :CheckC2R) -) -if %winbuild% LSS 9200 if not exist "%_OSPP15VBS%" ( -if %_Office16% EQU 0 (echo Error: Office 2013 C2R Licensing tool OSPP.vbs is not detected&goto :%_fC2R%) else (goto :CheckC2R) -) - -:CheckC2R -set _OMSI=0 -if %_Office16% EQU 0 ( -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -) -if %_Office15% EQU 0 ( -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Common\InstallRoot /v Path" %_Nul6%') do if exist "%%b\OSPP.VBS" set _OMSI=1 +call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" +call :dk_color %Blue% "Uninstall this and Install C2R or MSI VL version of Office." +) +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" ) -if %winbuild% GEQ 9200 ( -set _spp=SoftwareLicensingProduct -set _sps=SoftwareLicensingService -set "_vbsi=%_SLMGR% /ilc " -set "_vbsf=%_SLMGR% /ilc " -) else ( -set _spp=OfficeSoftwareProtectionProduct -set _sps=OfficeSoftwareProtectionService -set _vbsi="!_OSPP15VBS!" /inslic: -set _vbsf="!_OSPPVBS!" /inslic: -) -set "_wmi=" -set "_qr=%_zz7% %_sps% %_zz3% Version %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do set _wmi=%%# -if "%_wmi%"=="" ( -echo Error: %_sps% WMI version is not detected -call :CheckWS -goto :%_fC2R% -) -set _Retail=0 -set "_ocq=ApplicationID='%_oApp%' AND LicenseStatus='1' AND PartialProductKey is not NULL" -if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get Description %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt" -set "_qr=%_csq% %_spp% "%_ocq%" Description" -if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvRetail.txt" -find /i "RETAIL channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -find /i "RETAIL(MAK) channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -find /i "TIMEBASED_SUB channel" "!_temp!\crvRetail.txt" %_Nul1% && set _Retail=1 -set rancopp=0 -if %_Retail% EQU 0 if %_OMSI% EQU 0 ( -set rancopp=1 -%_Nul3% powershell "$f=[io.file]::ReadAllText('!_batp!') -split ':cleanlicense\:.*';iex ($f[1]);" -) -set _O16O365=0 -set _C16Msg=0 -set _C15Msg=0 -set "_qr=%_csq% %_spp% "%_ocq%" LicenseFamily" -if %_Retail% EQU 1 if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get LicenseFamily %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt" -if %_Retail% EQU 1 if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvRetail.txt" -set "_qr=%_csq% %_spp% "ApplicationID='%_oApp%'" LicenseFamily" -if %WMI_VBS% EQU 0 wmic path %_spp% where "ApplicationID='%_oApp%'" get LicenseFamily %_Nul2% |findstr /V /R "^$" >"!_temp!\crvVolume.txt" 2>&1 -if %WMI_VBS% NEQ 0 %_qr% %_Nul2% >"!_temp!\crvVolume.txt" 2>&1 - -if %_Office16% EQU 0 goto :R15V - -set _O21Ids=ProPlus2021,ProjectPro2021,VisioPro2021,Standard2021,ProjectStd2021,VisioStd2021,Access2021,SkypeforBusiness2021 -set _O19Ids=ProPlus2019,ProjectPro2019,VisioPro2019,Standard2019,ProjectStd2019,VisioStd2019,Access2019,SkypeforBusiness2019 -set _O16Ids=ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness -set _A21Ids=Excel2021,Outlook2021,PowerPoint2021,Publisher2021,Word2021 -set _A19Ids=Excel2019,Outlook2019,PowerPoint2019,Publisher2019,Word2019 -set _A16Ids=Excel,Outlook,PowerPoint,Publisher,Word -set _V21Ids=%_O21Ids%,%_A21Ids% -set _V19Ids=%_O19Ids%,%_A19Ids% -set _V16Ids=Mondo,%_O16Ids%,%_A16Ids%,OneNote -set _R16Ids=%_V16Ids%,Professional,HomeBusiness,HomeStudent,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud -set _RetIds=%_V21Ids%,Professional2021,HomeBusiness2021,HomeStudent2021,%_V19Ids%,Professional2019,HomeBusiness2019,HomeStudent2019,%_R16Ids% -set _Suites=Mondo,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud,ProPlus,Standard,Professional,HomeBusiness,HomeStudent,ProPlus2019,Standard2019,Professional2019,HomeBusiness2019,HomeStudent2019,ProPlus2021,Standard2021,Professional2021,HomeBusiness2021,HomeStudent2021 -set _PrjSKU=ProjectPro,ProjectStd,ProjectPro2019,ProjectStd2019,ProjectPro2021,ProjectStd2021 -set _VisSKU=VisioPro,VisioStd,VisioPro2019,VisioStd2019,VisioPro2021,VisioStd2021 - -echo %_ProductIds%>"!_temp!\crvProductIds.txt" -for %%a in (%_RetIds%,ProPlus) do ( -set _%%a=0 -) -for %%a in (%_RetIds%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProductIds.txt" %_Nul1% && set _%%a=1 -) -if !_LTSC! EQU 0 for %%a in (%_V21Ids%) do ( -set _%%a=0 -) -if !_LTSC! EQU 1 for %%a in (%_V21Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office21%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -for %%a in (%_V19Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office19%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -for %%a in (%_V16Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office16%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -reg query %_PRIDs%\ProPlusRetail.16 %_Nul3% && ( - find /i "Office16ProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -reg query %_PRIDs%\ProPlusVolume.16 %_Nul3% && ( - find /i "Office16ProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -if %_Retail% EQU 1 for %%a in (%_RetIds%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProductIds.txt" %_Nul1% && ( - find /i "Office16%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_Sub" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aR_PIN" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aE5R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aEDUR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aCO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office16%%aXC2RVL_MAKC2R" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R16=1) - find /i "Office19%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office19%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R19=1) - find /i "Office21%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - find /i "Office21%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R21=1) - ) -) -if %_Retail% EQU 1 reg query %_PRIDs%\ProPlusRetail.16 %_Nul3% && ( - find /i "Office16ProPlusR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) - find /i "Office16ProPlusVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R16=1) -) -set "_qr=%_zz1% %_spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%'" %_zz3% LicenseFamily %_zz4%" -find /i "Office16MondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% && ( - for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud) do set _%%a=0 - ) -) -if %sub_o365% EQU 1 ( - for %%a in (%_Suites%) do set _%%a=0 -echo. -echo Microsoft Office is activated with a vNext license. -) -if %sub_proj% EQU 1 ( - for %%a in (%_PrjSKU%) do set _%%a=0 -echo. -echo Microsoft Project is activated with a vNext license. -) -if %sub_vsio% EQU 1 ( - for %%a in (%_VisSKU%) do set _%%a=0 -echo. -echo Microsoft Visio is activated with a vNext license. -) - -for %%a in (%_RetIds%,ProPlus) do if !_%%a! EQU 1 ( -set _C16Msg=1 -) -if %_C16Msg% EQU 1 ( -echo. -echo Converting Office C2R Retail-to-Volume: -) -if %_C16Msg% EQU 0 (if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R)) - -for %%# in ("!_LicensesPath!\client-issuance-*.xrm-ms") do ( -%_cscript% %_vbsf%"!_LicensesPath!\%%~nx#" -) -%_cscript% %_vbsf%"!_LicensesPath!\pkeyconfig-office.xrm-ms" - -if !_Mondo! EQU 1 ( -call :InsLic Mondo -) -if !_O365ProPlus! EQU 1 ( -echo O365ProPlus 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365Business! EQU 1 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365Business 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365Business NCHRJ-3VPGW-X73DM-6B36K-3RQ6B -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365SmallBusPrem! EQU 1 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365SmallBusPrem 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365SmallBusPrem 3FBRX-NFP7C-6JWVK-F2YGK-H499R -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365HomePrem! EQU 1 if !_O365SmallBusPrem! EQU 0 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365HomePrem 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365HomePrem 9FNY8-PWWTY-8RY4F-GJMTV-KHGM9 -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365EduCloud! EQU 1 if !_O365HomePrem! EQU 0 if !_O365SmallBusPrem! EQU 0 if !_O365Business! EQU 0 if !_O365ProPlus! EQU 0 ( -set _O365ProPlus=1 -echo O365EduCloud 2016 Suite ^<-^> Mondo 2016 Licenses -call :InsLic O365EduCloud 8843N-BCXXD-Q84H8-R4Q37-T3CPT -if !_Mondo! EQU 0 call :InsLic Mondo -) -if !_O365ProPlus! EQU 1 set _O16O365=1 -if !_Mondo! EQU 1 if !_O365ProPlus! EQU 0 ( -echo Mondo 2016 Suite -call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R) -) -if !_ProPlus2021! EQU 1 if !_O365ProPlus! EQU 0 ( -echo ProPlus 2021 Suite -call :InsLic ProPlus2021 -) -if !_ProPlus2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 ( -echo ProPlus 2019 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_ProPlus! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 ( -echo ProPlus 2016 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Professional2021! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 ( -echo Professional 2021 Suite -^> ProPlus 2021 Licenses -call :InsLic ProPlus2021 -) -if !_Professional2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 ( -echo Professional 2019 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Professional! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 ( -echo Professional 2016 Suite -^> ProPlus%_ons% Licenses -call :InsLic ProPlus%_tag% -) -if !_Standard2021! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 ( -echo Standard 2021 Suite -call :InsLic Standard2021 -) -if !_Standard2019! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 ( -echo Standard 2019 Suite -^> Standard%_ons% Licenses -call :InsLic Standard%_tag% -) -if !_Standard! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 ( -echo Standard 2016 Suite -^> Standard%_ons% Licenses -call :InsLic Standard%_tag% -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a2021! EQU 1 ( - echo %%a 2021 SKU - call :InsLic %%a2021 -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a2019! EQU 1 ( -if !_%%a2021! EQU 0 ( - echo %%a 2019 SKU -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a! EQU 1 ( -if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 SKU -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 ( - set _Standard2021=1 - echo %%a 2021 Suite -^> Standard 2021 Licenses - call :InsLic Standard2021 - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 ( - set _Standard2019=1 - echo %%a 2019 Suite -^> Standard%_ons% Licenses - call :InsLic Standard%_tag% - ) -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - set _Standard=1 - echo %%a 2016 Suite -^> Standard%_ons% Licenses - call :InsLic Standard%_tag% - ) -) -for %%a in (%_A21Ids%,OneNote) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 ( - echo %%a App - call :InsLic %%a - ) -) -for %%a in (%_A16Ids%) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (%_A16Ids%) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_Standard2021! EQU 0 if !_Standard2019! EQU 0 if !_Standard! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (Access) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 ( - echo %%a 2021 App - call :InsLic %%a2021 - ) -) -for %%a in (Access) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (Access) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_Professional2021! EQU 0 if !_Professional2019! EQU 0 if !_Professional! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (SkypeforBusiness) do if !_%%a2021! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 ( - echo %%a 2021 App - call :InsLic %%a2021 - ) -) -for %%a in (SkypeforBusiness) do if !_%%a2019! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_%%a2021! EQU 0 ( - echo %%a 2019 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -for %%a in (SkypeforBusiness) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus2021! EQU 0 if !_ProPlus2019! EQU 0 if !_ProPlus! EQU 0 if !_%%a2021! EQU 0 if !_%%a2019! EQU 0 ( - echo %%a 2016 App -^> %%a%_ons% Licenses - call :InsLic %%a%_tag% - ) -) -if %_Office15% EQU 1 (goto :R15V) else (goto :GVLKC2R) - -:R15V -set _O15Ids=Standard,ProjectPro,VisioPro,ProjectStd,VisioStd,Access,Lync -set _A15Ids=Excel,Groove,InfoPath,OneNote,Outlook,PowerPoint,Publisher,Word -set _R15Ids=SPD,Mondo,%_O15Ids%,%_A15Ids%,Professional,HomeBusiness,HomeStudent,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem -set _V15Ids=Mondo,%_O15Ids%,%_A15Ids% - -echo %_Product15Ids%>"!_temp!\crvProduct15s.txt" -for %%a in (%_R15Ids%,ProPlus) do ( -set _%%a=0 -) -for %%a in (%_R15Ids%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProduct15s.txt" %_Nul1% && set _%%a=1 -) -for %%a in (%_V15Ids%) do ( -findstr /I /C:"%%aVolume" "!_temp!\crvProduct15s.txt" %_Nul1% && ( - find /i "Office%%aVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _%%a=0) || (set _%%a=1) - ) -) -reg query %_PR15IDs%\Active\ProPlusRetail\x-none %_Nul3% && ( - find /i "OfficeProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -reg query %_PR15IDs%\Active\ProPlusVolume\x-none %_Nul3% && ( - find /i "OfficeProPlusVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && (set _ProPlus=0) || (set _ProPlus=1) -) -if %_Retail% EQU 1 for %%a in (%_R15Ids%) do ( -findstr /I /C:"%%aRetail" "!_temp!\crvProduct15s.txt" %_Nul1% && ( - find /i "Office%%aR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_Sub" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aR_PIN" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aCO365R_" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - find /i "Office%%aVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _%%a=0 & set aC2R15=1) - ) -) -if %_Retail% EQU 1 reg query %_PR15IDs%\Active\ProPlusRetail\x-none %_Nul3% && ( - find /i "OfficeProPlusR_Retail" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusR_OEM" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusMSDNR_" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) - find /i "OfficeProPlusVL_MAK" "!_temp!\crvRetail.txt" %_Nul1% && (set _ProPlus=0 & set aC2R15=1) -) -set "_qr=%_zz1% %_spp% %_zz2% "ApplicationID='%_oApp%' AND LicenseFamily like 'OfficeO365%%'" %_zz3% LicenseFamily %_zz4%" -find /i "OfficeMondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && ( -%_qr% %_Nul2% | find /i "O365" %_Nul1% && ( - for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem) do set _%%a=0 - ) -) - -for %%a in (%_R15Ids%,ProPlus) do if !_%%a! EQU 1 ( -set _C15Msg=1 -) -if %_C15Msg% EQU 1 if %_C16Msg% EQU 0 ( -echo. -echo Converting Office C2R Retail-to-Volume: -) -if %_C15Msg% EQU 0 goto :GVLKC2R - -for %%# in ("!_Licenses15Path!\client-issuance-*.xrm-ms") do ( -%_cscript% %_vbsi%"!_Licenses15Path!\%%~nx#" -) -%_cscript% %_vbsi%"!_Licenses15Path!\pkeyconfig-office.xrm-ms" - -if !_Mondo! EQU 1 ( -call :Ins15Lic Mondo -) -if !_O365ProPlus! EQU 1 if !_O16O365! EQU 0 ( -echo O365ProPlus 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365SmallBusPrem! EQU 1 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365SmallBusPrem 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365SmallBusPrem 3FBRX-NFP7C-6JWVK-F2YGK-H499R -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365HomePrem! EQU 1 if !_O365SmallBusPrem! EQU 0 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365HomePrem 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365HomePrem 9FNY8-PWWTY-8RY4F-GJMTV-KHGM9 -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_O365Business! EQU 1 if !_O365HomePrem! EQU 0 if !_O365SmallBusPrem! EQU 0 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -set _O365ProPlus=1 -echo O365Business 2013 Suite ^<-^> Mondo 2013 Licenses -call :Ins15Lic O365Business MCPBN-CPY7X-3PK9R-P6GTT-H8P8Y -if !_Mondo! EQU 0 call :Ins15Lic Mondo -) -if !_Mondo! EQU 1 if !_O365ProPlus! EQU 0 if !_O16O365! EQU 0 ( -echo Mondo 2013 Suite -call :Ins15Lic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK -goto :GVLKC2R -) -if !_SPD! EQU 1 if !_Mondo! EQU 0 if !_O365ProPlus! EQU 0 ( -echo SharePoint Designer 2013 App -^> Mondo 2013 Licenses -call :Ins15Lic Mondo -goto :GVLKC2R -) -if !_ProPlus! EQU 1 if !_O365ProPlus! EQU 0 ( -echo ProPlus 2013 Suite -call :Ins15Lic ProPlus -) -if !_Professional! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 ( -echo Professional 2013 Suite -^> ProPlus 2013 Licenses -call :Ins15Lic ProPlus -) -if !_Standard! EQU 1 if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 ( -echo Standard 2013 Suite -call :Ins15Lic Standard -) -for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a! EQU 1 ( -echo %%a 2013 SKU -call :Ins15Lic %%a -) -for %%a in (HomeBusiness,HomeStudent) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 if !_Standard! EQU 0 ( - set _Standard=1 - echo %%a 2013 Suite -^> Standard 2013 Licenses - call :Ins15Lic Standard - ) -) -for %%a in (%_A15Ids%) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 if !_Standard! EQU 0 ( - echo %%a 2013 App - call :Ins15Lic %%a - ) -) -for %%a in (Access) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 if !_Professional! EQU 0 ( - echo %%a 2013 App - call :Ins15Lic %%a - ) -) -for %%a in (Lync) do if !_%%a! EQU 1 ( -if !_O365ProPlus! EQU 0 if !_ProPlus! EQU 0 ( - echo SkypeforBusiness 2015 App - call :Ins15Lic %%a - ) -) -goto :GVLKC2R - -:InsLic -set "_ID=%1Volume" -set "_patt=%1VL_" -set "_pkey=" -set "_kpey=" -if not "%2"=="" ( -set "_ID=%1Retail" -set "_patt=%1R_" -set "_pkey=PidKey=%2" -set "_kpey=%2" -) -reg delete %_Config% /f /v %_ID%.OSPPReady %_Nul3% -"!_Integrator!" /I /License PRIDName=%_ID%.16 %_pkey% PackageGUID="%_GUID%" PackageRoot="!_InstallRoot!" %_Nul1% - -set fallback=0 -set "_qr=wmic path %_spp% where ApplicationID='%_oApp%' get LicenseFamily" -if %WMI_VBS% NEQ 0 set "_qr=%_csq% %_spp% "ApplicationID='%_oApp%'" LicenseFamily" -%_qr% %_Nul2% | find /i "%_patt%" %_Nul1% || (set fallback=1) -if %fallback% equ 0 goto :IntOK - -set "_lsfs=" -for %%# in ("!_LicensesPath!\%_patt%*.xrm-ms") do ( -set "_lsfs=!_lsfs! %%~nx#" -) -if defined _kpey ( - for %%# in ("!_LicensesPath!\%1DemoR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1E5R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1EDUR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1MSDNR*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1O365R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) - for %%# in ("!_LicensesPath!\%1CO365R*.xrm-ms") do ( - set "_lsfs=!_lsfs! %%~nx#" - ) -) -for %%# in (!_lsfs!) do ( -%_cscript% %_vbsf%"!_LicensesPath!\%%#" -) -set "_qr=wmic path %_sps% where Version='%_wmi%' call InstallProductKey ProductKey="%_kpey%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %_sps% "%_kpey%"" -if defined _kpey %_qr% %_Nul3% - -:IntOK -reg add %_Config% /f /v %_ID%.OSPPReady /t REG_SZ /d 1 %_Nul1% -reg query %_Config% /v ProductReleaseIds | findstr /I "%_ID%" %_Nul1% -if %errorlevel% NEQ 0 ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_Config% /v ProductReleaseIds') do reg add %_Config% /v ProductReleaseIds /t REG_SZ /d "%%b,%_ID%" /f %_Nul1% ) -exit /b - -:Ins15Lic -set "_ID=%1Volume" -set "_patt=%1VL_" -set "_pkey=" -if not "%2"=="" ( -set "_ID=%1Retail" -set "_patt=%1R_" -set "_pkey=%2" -) -reg delete %_OSPP15Ready% /f /v %_ID%.OSPPReady %_Nul3% -for %%# in ("!_Licenses15Path!\%_patt%*.xrm-ms") do ( -%_cscript% %_vbsi%"!_Licenses15Path!\%%~nx#" -) -set "_qr=wmic path %_sps% where Version='%_wmi%' call InstallProductKey ProductKey="%_pkey%"" -if %WMI_VBS% NEQ 0 set "_qr=%_csp% %_sps% "%_pkey%"" -if defined _pkey %_qr% %_Nul3% -reg add %_OSPP15Ready% /f /v %_ID%.OSPPReady /t %_OSPP15ReadT% /d 1 %_Nul1% -reg query %_Con15fig% %_Nul2% | findstr /I "%_ID%" %_Nul1% -if %errorlevel% NEQ 0 ( -for /f "skip=2 tokens=2*" %%a in ('reg query %_Con15fig% %_Nul6%') do reg add %_Con15fig% /t REG_SZ /d "%%b,%_ID%" /f %_Nul1% ) -exit /b -:GVLKC2R -set _CtRMsg=0 -if %_C16Msg% EQU 1 set _CtRMsg=1 -if %_C15Msg% EQU 1 set _CtRMsg=1 -if %_Office16% EQU 1 ( -for %%a in (%_RetIds%,ProPlus) do set "_%%a=" -for %%A in (19,21) do call :officeLoc %%A -) -if %_Office15% EQU 1 ( -for %%a in (%_R15Ids%,ProPlus) do set "_%%a=" -) -set "_qr=wmic path %_sps% where version='%_wmi%' call RefreshLicenseStatus" -if %WMI_VBS% NEQ 0 set "_qr=%_csm% "%_sps%.Version='%_wmi%'" RefreshLicenseStatus" -if %winbuild% GEQ 9200 %_qr% %_Nul3% -if exist "%SysPath%\spp\store_test\2.0\tokens.dat" if %rancopp% EQU 1 if %_CtRMsg% EQU 1 ( -%_cscript% %_SLMGR% /rilc -if !ERRORLEVEL! NEQ 0 %_cscript% %_SLMGR% /rilc -) -goto :%_sC2R% - -:keys -if "%~1"=="" exit /b -set yh=- -goto :%1 %_Nul2% - -:: Windows 11 [Ni] -:59eb965c-9150-42b7-a0ec-22151b9897c5 -set "_key=KBN8V%yh%HFGQ4%yh%MGXVD%yh%347P6%yh%PDQGT" &:: IoT Enterprise LTSC exit /b -:: Windows 11 [Co] -:ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69 -set "_key=37D7F%yh%N49CB%yh%WQR8W%yh%TBJ73%yh%FM8RX" &:: SE {Cloud} -exit /b +::======================================================================================================================================== -:d30136fc-cb4b-416e-a23d-87207abc44a9 -set "_key=6XN7V%yh%PCBDC%yh%BDBRH%yh%8DQY7%yh%G6R44" &:: SE N {Cloud N} -exit /b +:ks_processmsi -:: Windows 10 [RS5] -:32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee -set "_key=M7XTQ%yh%FN8P6%yh%TTKYV%yh%9D4CC%yh%J462D" &:: Enterprise LTSC 2019 -exit /b +:: Process Office MSI Version -:7103a333-b8c8-49cc-93ce-d37c09687f92 -set "_key=92NFX%yh%8DJQP%yh%P6BBQ%yh%THF9C%yh%7CG2H" &:: Enterprise LTSC 2019 N -exit /b +call :ks_reset -:ec868e65-fadf-4759-b23e-93fe37f2cc29 -set "_key=CPWHC%yh%NT2C7%yh%VYW78%yh%DHDB2%yh%PG3GK" &:: Enterprise for Virtual Desktops -exit /b +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +) -:0df4f814-3f57-4b8b-9a9d-fddadcd69fac -set "_key=NBTWJ%yh%3DR69%yh%3C4V8%yh%C26MC%yh%GQ9M6" &:: Lean -exit /b +set oVer=%1 +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") +if "%_oRoot:~-1%"=="\" set "_oRoot=%_oRoot:~0,-1%" -:: Windows 10 [RS3] -:82bbc092-bc50-4e16-8e18-b74fc486aec3 -set "_key=NRG8B%yh%VKK3Q%yh%CXVCJ%yh%9G2XF%yh%6Q84J" &:: Pro Workstation -exit /b +echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 +if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 +if "%osarch%"=="x86" set _oArch=x86 -:4b1571d3-bafb-4b40-8087-a961be2caf65 -set "_key=9FNHH%yh%K3HBT%yh%3W4TD%yh%6383H%yh%6XYWF" &:: Pro Workstation N -exit /b +set "_common=%CommonProgramFiles%" +if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" +set "_common2=%CommonProgramFiles(x86)%" -:e4db50ea-bda1-4566-b047-0ca50abc6f07 -set "_key=7NBT4%yh%WGBQX%yh%MP4H7%yh%QXFF8%yh%YP3KX" &:: Enterprise Remote Server -exit /b +for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" +if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -:: Windows 10 [RS2] -:e0b2d383-d112-413f-8a80-97f373a5820c -set "_key=YYVX9%yh%NTFWV%yh%6MDM3%yh%9PT4T%yh%4M68B" &:: Enterprise G -exit /b +call :ksdata getmsiprod %2 +call :ks_msiretaildata getmsiret %2 -:e38454fb-41a4-4f59-a5dc-25080e354730 -set "_key=44RPN%yh%FTY23%yh%9VTTB%yh%MP9BX%yh%T84FV" &:: Enterprise G N -exit /b +echo: +echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -:: Windows 10 [RS1] -:2d5a5a60-3040-48bf-beb0-fcd770c20ce0 -set "_key=DCPHK%yh%NFMTC%yh%H88MJ%yh%PFHPY%yh%QJ4BJ" &:: Enterprise 2016 LTSB +if not defined _oBranding ( +set error=1 +call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" exit /b +) -:9f776d83-7156-45b2-8a5c-359b9c9f22a3 -set "_key=QFFDN%yh%GRT3P%yh%VKWWX%yh%X7T3R%yh%8B639" &:: Enterprise 2016 LTSB N +if not defined _oIds ( +set error=1 +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" exit /b +) -:3f1afc82-f8ac-4f6c-8005-1d233e606eee -set "_key=6TP4R%yh%GNPTD%yh%KYYHQ%yh%7B7DP%yh%J447Y" &:: Pro Education +call :ks_process exit /b -:5300b18c-2e33-4dc2-8291-47ffcec746dd -set "_key=YVWGF%yh%BXNMC%yh%HTQYQ%yh%CPQ99%yh%66QFC" &:: Pro Education N -exit /b +::======================================================================================================================================== -:: Windows 10 [TH] -:58e97c99-f377-4ef1-81d5-4ad5522b5fd8 -set "_key=TX9XD%yh%98N7V%yh%6WMQ6%yh%BX7FG%yh%H8Q99" &:: Home -exit /b +:oh_installlic -:7b9e1751-a8da-4f75-9560-5fadfe3d8e38 -set "_key=3KHY7%yh%WNT83%yh%DGQKR%yh%F7HPR%yh%844BM" &:: Home N -exit /b +if not defined _oLPath exit /b -:cd918a57-a41b-4c82-8dce-1a538e221a83 -set "_key=7HNRX%yh%D7KGG%yh%3K4RQ%yh%4WPJ4%yh%YTDFH" &:: Home Single Language -exit /b +if %oVer%==16 ( +"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% +) else ( +"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% +) -:a9107544-f4a0-4053-a96a-1479abdef912 -set "_key=PVMJN%yh%6DFY6%yh%9CCP6%yh%7BKTT%yh%D3WVR" &:: Home China -exit /b +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b -:2de67392-b7a7-462a-b1ca-108dd189f588 -set "_key=W269N%yh%WFGWX%yh%YVC9B%yh%4J6C9%yh%T83GX" &:: Pro -exit /b +:: Fallback to manual method to install licenses incase integrator.exe is not working -:a80b5abf-76ad-428b-b05d-a47d2dffeebf -set "_key=MH37W%yh%N47XK%yh%V7XM9%yh%C7227%yh%GCQG9" &:: Pro N -exit /b +set _License=%_License:XVolume=XC2RVL_% -:e0c42288-980c-4788-a014-c080d2e1926e -set "_key=NW6C2%yh%QMPVW%yh%D7KKK%yh%3GKT6%yh%VCFB2" &:: Education -exit /b +set _License=%_License:O365EduCloudRetail=O365EduCloudEDUR_% -:3c102355-d027-42c6-ad23-2e7ef8a02585 -set "_key=2WH4N%yh%8QGBV%yh%H22JP%yh%CT43Q%yh%MDWWJ" &:: Education N -exit /b +set _License=%_License:ProjectProRetail=ProjectProO365R_% +set _License=%_License:ProjectStdRetail=ProjectStdO365R_% +set _License=%_License:VisioProRetail=VisioProO365R_% +set _License=%_License:VisioStdRetail=VisioStdO365R_% -:73111121-5638-40f6-bc11-f1d7b0d64300 -set "_key=NPPR9%yh%FWDCX%yh%D2C8J%yh%H872K%yh%2YT43" &:: Enterprise -exit /b +if defined _preview set _License=%_License:Volume=PreviewVL_% -:e272e3e2-732f-4c65-a8f0-484747d0d947 -set "_key=DPH2V%yh%TTNVB%yh%4X9Q3%yh%TJR4H%yh%KHJW4" &:: Enterprise N -exit /b +set _License=%_License:Retail=R_% +set _License=%_License:Volume=VL_% -:7b51a46c-0c04-4e8f-9af4-8496cca90d5e -set "_key=WNMTR%yh%4C88C%yh%JK8YV%yh%HQ7T2%yh%76DF9" &:: Enterprise 2015 LTSB -exit /b +for %%# in ("!_oLPath!\client-issuance-*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) -:87b838b7-41b6-4590-8318-5797951d8529 -set "_key=2F77B%yh%TNFGY%yh%69QQF%yh%B8YKP%yh%D69TJ" &:: Enterprise 2015 LTSB N -exit /b +for %%# in ("!_oLPath!\%_License%*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) -:: Windows Server 2022 [Fe] -:9bd77860-9b31-4b7b-96ad-2564017315bf -set "_key=VDYBN%yh%27WPP%yh%V4HQT%yh%9VMD4%yh%VMK7H" &:: Standard -exit /b +%psc% "$sls = Get-WmiObject %sps%; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); InstallLicenseArr '!_arr!'; InstallLicenseFile '"!_oLPath!\pkeyconfig-office.xrm-ms"'" %nul% -:ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03 -set "_key=WX4NM%yh%KYWYW%yh%QJJR4%yh%XV3QB%yh%6VM33" &:: Datacenter -exit /b +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% || ( +set error=1 +call :dk_color %Red% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Failed]" +) -:8c8f0ad3-9a43-4e05-b840-93b8d1475cbc -set "_key=6N379%yh%GGTMK%yh%23C6M%yh%XVVTC%yh%CKFRQ" &:: Azure Core exit /b -:f5e9429c-f50b-4b98-b15c-ef92eb5cff39 -set "_key=67KN8%yh%4FYJW%yh%2487Q%yh%MQ2J7%yh%4C4RG" &:: Standard ACor -exit /b +::======================================================================================================================================== -:39e69c41-42b4-4a0a-abad-8e3c10a797cc -set "_key=QFND9%yh%D3Y9C%yh%J3KKY%yh%6RPVP%yh%2DPYV" &:: Datacenter ACor -exit /b +:oh_clearblock -:: Windows Server 2019 [RS5] -:de32eafd-aaee-4662-9444-c1befb41bde2 -set "_key=N69G4%yh%B89J2%yh%4G8F4%yh%WWYCC%yh%J464C" &:: Standard -exit /b +:: Find remnants of Office vNext/shared/device license block and remove it because it stops other licenses from appearing +:: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state -:34e1ae55-27f8-4950-8877-7a03be5fb181 -set "_key=WMDGN%yh%G9PQG%yh%XVVXX%yh%R3X43%yh%63DFG" &:: Datacenter -exit /b +set _sidlist= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -:a99cc1f0-7719-4306-9645-294102fbff95 -set "_key=FDNH6%yh%VW9RW%yh%BXPJ7%yh%4XTYG%yh%239TB" &:: Azure Core +if not defined _sidlist ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" exit /b +) -:73e3957c-fc0c-400d-9184-5f7b6f2eb409 -set "_key=N2KJX%yh%J94YW%yh%TQVFB%yh%DG9YT%yh%724CC" &:: Standard ACor -exit /b +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 -:90c362e5-0da1-4bfd-b53b-b87d309ade43 -set "_key=6NMRW%yh%2C8FM%yh%D24W7%yh%TQWMY%yh%CWH2D" &:: Datacenter ACor -exit /b +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" +) -:034d3cbb-5d4b-4245-b3f8-f84571314078 -set "_key=WVDHN%yh%86M7X%yh%466P6%yh%VHXV7%yh%YY726" &:: Essentials -exit /b +::========================== -:8de8eb62-bbe0-40ac-ac17-f75595071ea3 -set "_key=GRFBW%yh%QNDC4%yh%6QBHG%yh%CCK3B%yh%2PR88" &:: ServerARM64 -exit /b +:: Load the unloaded useraccounts registry -:19b5e0fb-4431-46bc-bac1-2f1873e4ae73 -set "_key=NTBV8%yh%9K7Q8%yh%V27C6%yh%M2BTV%yh%KHMXV" &:: Azure Datacenter - ServerTurbine -exit /b - -:: Windows Server 2016 [RS4] -:43d9af6e-5e86-4be8-a797-d072a046896c -set "_key=K9FYF%yh%G6NCK%yh%73M32%yh%XMVPY%yh%F9DRR" &:: ServerARM64 -exit /b - -:: Windows Server 2016 [RS3] -:61c5ef22-f14f-4553-a824-c4b31e84b100 -set "_key=PTXN8%yh%JFHJM%yh%4WC78%yh%MPCBR%yh%9W4KR" &:: Standard ACor -exit /b - -:e49c08e7-da82-42f8-bde2-b570fbcae76c -set "_key=2HXDN%yh%KRXHB%yh%GPYC7%yh%YCKFJ%yh%7FVDG" &:: Datacenter ACor -exit /b - -:: Windows Server 2016 [RS1] -:8c1c5410-9f39-4805-8c9d-63a07706358f -set "_key=WC2BQ%yh%8NRM3%yh%FDDYY%yh%2BFGV%yh%KHKQY" &:: Standard -exit /b - -:21c56779-b449-4d20-adfc-eece0e1ad74b -set "_key=CB7KF%yh%BWN84%yh%R7R2Y%yh%793K2%yh%8XDDG" &:: Datacenter -exit /b - -:3dbf341b-5f6c-4fa7-b936-699dce9e263f -set "_key=VP34G%yh%4NPPG%yh%79JTQ%yh%864T4%yh%R3MQX" &:: Azure Core -exit /b - -:2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283 -set "_key=JCKRF%yh%N37P4%yh%C2D82%yh%9YXRT%yh%4M63B" &:: Essentials -exit /b - -:7b4433f4-b1e7-4788-895a-c45378d38253 -set "_key=QN4C6%yh%GBJD2%yh%FB422%yh%GHWJK%yh%GJG2R" &:: Cloud Storage -exit /b - -:: Windows 8.1 -:fe1c3238-432a-43a1-8e25-97e7d1ef10f3 -set "_key=M9Q9P%yh%WNJJT%yh%6PXPY%yh%DWX8H%yh%6XWKK" &:: Core -exit /b - -:78558a64-dc19-43fe-a0d0-8075b2a370a3 -set "_key=7B9N3%yh%D94CG%yh%YTVHR%yh%QBPX3%yh%RJP64" &:: Core N -exit /b - -:c72c6a1d-f252-4e7e-bdd1-3fca342acb35 -set "_key=BB6NG%yh%PQ82V%yh%VRDPW%yh%8XVD2%yh%V8P66" &:: Core Single Language -exit /b - -:db78b74f-ef1c-4892-abfe-1e66b8231df6 -set "_key=NCTT7%yh%2RGK8%yh%WMHRF%yh%RY7YQ%yh%JTXG3" &:: Core China -exit /b - -:ffee456a-cd87-4390-8e07-16146c672fd0 -set "_key=XYTND%yh%K6QKT%yh%K2MRH%yh%66RTM%yh%43JKP" &:: Core ARM -exit /b - -:c06b6981-d7fd-4a35-b7b4-054742b7af67 -set "_key=GCRJD%yh%8NW9H%yh%F2CDX%yh%CCM8D%yh%9D6T9" &:: Pro -exit /b - -:7476d79f-8e48-49b4-ab63-4d0b813a16e4 -set "_key=HMCNV%yh%VVBFX%yh%7HMBH%yh%CTY9B%yh%B4FXY" &:: Pro N -exit /b - -:096ce63d-4fac-48a9-82a9-61ae9e800e5f -set "_key=789NJ%yh%TQK6T%yh%6XTH8%yh%J39CJ%yh%J8D3P" &:: Pro with Media Center -exit /b - -:81671aaf-79d1-4eb1-b004-8cbbe173afea -set "_key=MHF9N%yh%XY6XB%yh%WVXMC%yh%BTDCT%yh%MKKG7" &:: Enterprise -exit /b - -:113e705c-fa49-48a4-beea-7dd879b46b14 -set "_key=TT4HM%yh%HN7YT%yh%62K67%yh%RGRQJ%yh%JFFXW" &:: Enterprise N -exit /b +set loadedsids= +set failedtoload= +set failedtounload= +for %%# in (%_sidlist%) do ( +reg query HKU\%%#\Software %nul% || ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +reg load HKU\%%# "%%b\NTUSER.DAT" %nul% +reg query HKU\%%#\Software %nul% && ( +call set "loadedsids=%%loadedsids%% %%#" +) || ( +set failedtoload=1 +) +) +) +) -:0ab82d54-47f4-4acb-818c-cc5bf0ecb649 -set "_key=NMMPB%yh%38DD4%yh%R2823%yh%62W8D%yh%VXKJB" &:: Embedded Industry Pro -exit /b +::========================== -:cd4e2d9f-5059-4a50-a92d-05d5bb1267c7 -set "_key=FNFKF%yh%PWTVT%yh%9RC8H%yh%32HB2%yh%JB34X" &:: Embedded Industry Enterprise -exit /b +:: Clear the vNext/shared/device license blocks which may prevent ohook activation -:f7e88590-dfc7-4c78-bccb-6f3865b99d1a -set "_key=VHXM3%yh%NR6FT%yh%RY6RT%yh%CK882%yh%KW2CJ" &:: Embedded Industry Automotive -exit /b +rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% -:e9942b32-2e55-4197-b0bd-5ff58cba8860 -set "_key=3PY8R%yh%QHNP9%yh%W7XQD%yh%G6DPH%yh%3J2C9" &:: with Bing -exit /b +for %%x in (15 16) do ( +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% +reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% -:c6ddecd6-2354-4c19-909b-306a3058484e -set "_key=Q6HTR%yh%N24GM%yh%PMJFP%yh%69CD8%yh%2GXKR" &:: with Bing N -exit /b - -:b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c -set "_key=KF37N%yh%VDV38%yh%GRRTV%yh%XH8X6%yh%6F3BB" &:: with Bing Single Language -exit /b - -:ba998212-460a-44db-bfb5-71bf09d1c68b -set "_key=R962J%yh%37N87%yh%9VVK2%yh%WJ74P%yh%XTMHR" &:: with Bing China -exit /b +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% +rmdir /s /q "%%b\AppData\Local\Microsoft\Office\%%x.0\Licensing\" %nul% +) +) +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f %nul% +reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% +) -:e58d87b5-8126-4580-80fb-861b22f79296 -set "_key=MX3RK%yh%9HNGX%yh%K3QKC%yh%6PJ3F%yh%W8D7B" &:: Pro for Students -exit /b +:: Clear SharedComputerLicensing for office +:: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation -:cab491c7-a918-4f60-b502-dab75e334f40 -set "_key=TNFGH%yh%2R6PB%yh%8XM3K%yh%QYHX2%yh%J4296" &:: Pro for Students N -exit /b +if not defined scaIsNeeded ( +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f %nul% +reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v SharedComputerLicensing /f /reg:32 %nul% +) -:: Windows Server 2012 R2 -:b3ca044e-a358-4d68-9883-aaa2941aca99 -set "_key=D2N9P%yh%3P6X9%yh%2R39C%yh%7RTCD%yh%MDVJX" &:: Standard -exit /b +:: Clear device-based-licensing +:: https://learn.microsoft.com/deployoffice/device-based-licensing -:00091344-1ea4-4f37-b789-01750ba6988c -set "_key=W3GGN%yh%FT8W3%yh%Y4M27%yh%J84CP%yh%Q3VJ9" &:: Datacenter -exit /b +for /f %%# in ('reg query "%o16c2r_reg%\Configuration" /f *.DeviceBasedLicensing %nul6% ^| findstr REG_') do reg delete "%o16c2r_reg%\Configuration" /v %%# /f %nul% -:21db6ba4-9a7b-4a14-9e29-64a60c59301d -set "_key=KNC87%yh%3J2TX%yh%XB4WP%yh%VCPJV%yh%M4FWM" &:: Essentials -exit /b +:: Remove OEM registry key +:: https://support.microsoft.com/office/office-repeatedly-prompts-you-to-activate-on-a-new-pc-a9a6b05f-f6ce-4d1f-8d49-eb5007b64ba1 -:b743a2be-68d4-4dd3-af32-92425b7bb623 -set "_key=3NPTF%yh%33KPT%yh%GGBPR%yh%YX76B%yh%39KDD" &:: Cloud Storage -exit /b +for %%# in (15 16) do ( +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f %nul% +reg delete "HKLM\SOFTWARE\Microsoft\Office\%%#.0\Common\OEM" /f /reg:32 %nul% +) -:: Windows 8 -:c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60 -set "_key=BN3D2%yh%R7TKB%yh%3YPBD%yh%8DRP2%yh%27GG4" &:: Core -exit /b +reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\0ff1ce15-a989-479d-af46-f275c6370663" /f %nul% +reg delete "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies\59a52881-a989-479d-af46-f275c6370663" /f %nul% -:197390a0-65f6-4a95-bdc4-55d58a3b0253 -set "_key=8N2M2%yh%HWPGY%yh%7PGT9%yh%HGDD8%yh%GVGGY" &:: Core N -exit /b +echo Clearing Office License Blocks [Successfully cleared from all %counter% user accounts] -:8860fcd4-a77b-4a20-9045-a150ff11d609 -set "_key=2WN2H%yh%YGCQR%yh%KFX6K%yh%CD6TF%yh%84YXQ" &:: Core Single Language -exit /b +::========================== -:9d5584a2-2d85-419a-982c-a00888bb9ddf -set "_key=4K36P%yh%JN4VD%yh%GDC6V%yh%KDT89%yh%DYFKP" &:: Core China -exit /b +:: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." +:: Resiliency registry entry can skip this check -:af35d7b7-5035-4b63-8972-f0b747b9f4dc -set "_key=DXHJF%yh%N9KQX%yh%MFPVR%yh%GHGQK%yh%Y7RKV" &:: Core ARM -exit /b +if defined o16c2r if defined officeact ( +reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% +reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +reg unload HKU\DEF_TEMP %nul% +reg query HKU\DEF_TEMP %nul% && set failedtounload=1 -:a98bcd6d-5343-4603-8afe-5908e4611112 -set "_key=NG4HW%yh%VH26C%yh%733KW%yh%K6F98%yh%J8CK4" &:: Pro -exit /b +for %%# in (%_sidlist%) do ( +reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% +reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% +) +echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +) -:ebf245c1-29a8-4daf-9cb1-38dfc608a8c8 -set "_key=XCVCF%yh%2NXM9%yh%723PB%yh%MHCB7%yh%2RYQQ" &:: Pro N -exit /b +::========================== -:a00018a3-f20f-4632-bf7c-8daa5351c914 -set "_key=GNBB8%yh%YVD74%yh%QJHX6%yh%27H4K%yh%8QHDG" &:: Pro with Media Center -exit /b +:: Unload the loaded useraccounts registry -:458e1bec-837a-45f6-b9d5-925ed5d299de -set "_key=32JNW%yh%9KQ84%yh%P47T8%yh%D8GGY%yh%CWCK7" &:: Enterprise -exit /b +for %%# in (%loadedsids%) do ( +reg unload HKU\%%# %nul% +reg query HKU\%%# %nul% && set failedtounload=1 +) -:e14997e7-800a-4cf7-ad10-de4b45b578db -set "_key=JMNMF%yh%RHW7P%yh%DMY6X%yh%RF3DR%yh%X2BQT" &:: Enterprise N -exit /b +if defined failedtoload ( +set error=1 +call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) -:10018baf-ce21-4060-80bd-47fe74ed4dab -set "_key=RYXVT%yh%BNQG7%yh%VD29F%yh%DBMRY%yh%HT73M" &:: Embedded Industry Pro -exit /b +if defined failedtounload ( +set error=1 +call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" +call :dk_color %Blue% "Reboot your machine using the restart option and try again." +) -:18db1848-12e0-4167-b9d7-da7fcda507db -set "_key=NKB3R%yh%R2F8T%yh%3XCDP%yh%7Q2KW%yh%XWYQ2" &:: Embedded Industry Enterprise exit /b -:: Windows Server 2012 -:f0f5ec41-0d55-4732-af02-440a44a3cf0f -set "_key=XC9B7%yh%NBPP2%yh%83J2H%yh%RHMBY%yh%92BT4" &:: Standard -exit /b +::======================================================================================================================================== -:d3643d60-0c42-412d-a7d6-52e6635327f6 -set "_key=48HP8%yh%DN98B%yh%MYWDG%yh%T2DCC%yh%8W83P" &:: Datacenter -exit /b +:: Uninstall other / grace Keys -:7d5486c7-e120-4771-b7f1-7b56c6d3170c -set "_key=HM7DN%yh%YVMH3%yh%46JC3%yh%XYTG7%yh%CYQJJ" &:: MultiPoint Standard -exit /b +:oh_uninstkey -:95fd1c83-7df5-494a-be8b-1300e1c9d1cd -set "_key=XNH6W%yh%2V9GX%yh%RGJ4K%yh%Y8X6F%yh%QGJ2G" &:: MultiPoint Premium -exit /b +set upk_result=0 +call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 -:: Windows 7 -:b92e9980-b9d5-4821-9c94-140f632f6312 -set "_key=FJ82H%yh%XT6CR%yh%J8D7P%yh%XQJJ2%yh%GPDD4" &:: Professional -exit /b +if "%_actprojvis%"=="1" ( +set _allactid= +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) else ( +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +) -:54a09a0d-d57b-4c10-8b69-a842d6590ad5 -set "_key=MRPKT%yh%YTG23%yh%K7D7T%yh%X2JMM%yh%QY7MG" &:: Professional N -exit /b +for %%# in (%apps%) do ( +echo "%_allactid%" | find /i "%%#" %nul1% || ( -:5a041529-fef8-4d07-b06f-b59b573b32d2 -set "_key=W82YF%yh%2Q76Y%yh%63HXB%yh%FGJG9%yh%GF7QX" &:: Professional E -exit /b +if %_wmic% EQU 1 wmic path %spp% where ID='%%#' call UninstallProductKey %nul% +if %_wmic% EQU 0 %psc% "$null=([WMI]'%spp%=''%%#''').UninstallProductKey()" %nul% -:ae2ee509-1b34-41c0-acb7-6d4650168915 -set "_key=33PXH%yh%7Y6KF%yh%2VJC9%yh%XBBR8%yh%HVTHH" &:: Enterprise -exit /b +if !errorlevel!==0 ( +set upk_result=1 +) else ( +set error=1 +set upk_result=2 +) +) +) -:1cb6d605-11b3-4e14-bb30-da91c8e3983a -set "_key=YDRBP%yh%3D83W%yh%TY26F%yh%D46B2%yh%XCKRJ" &:: Enterprise N +if defined officeact if not %upk_result%==0 echo: +if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] +if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" exit /b -:46bbed08-9c7b-48fc-a614-95250573f4ea -set "_key=C29WB%yh%22CC8%yh%VJ326%yh%GHFJW%yh%H9DH4" &:: Enterprise E -exit /b +::======================================================================================================================================== -:db537896-376f-48ae-a492-53d0547773d0 -set "_key=YBYF6%yh%BHCR3%yh%JPKRB%yh%CDW7B%yh%F9BK4" &:: Embedded POSReady 7 -exit /b +:: Refresh Windows Insider Preview Licenses +:: It required in Insider versions otherwise office may not activate -:e1a8296a-db37-44d1-8cce-7bc961d59c54 -set "_key=XGY72%yh%BRBBT%yh%FF8MH%yh%2GG8H%yh%W7KCW" &:: Embedded Standard -exit /b +:oh_licrefresh -:aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395 -set "_key=73KQT%yh%CD9G6%yh%K7TQG%yh%66MRP%yh%CQ22C" &:: Embedded ThinPC +if exist "%SysPath%\spp\store_test\2.0\tokens.dat" ( +%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if !errorlevel! NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +) exit /b -:: Windows Server 2008 R2 -:a78b8bd9-8017-4df5-b86a-09f756affa7c -set "_key=6TPJF%yh%RBVHG%yh%WBW2R%yh%86QPH%yh%6RTM4" &:: Web -exit /b +::======================================================================================================================================== -:cda18cf3-c196-46ad-b289-60c072869994 -set "_key=TT8MH%yh%CG224%yh%D3D7Q%yh%498W2%yh%9QCTX" &:: HPC -exit /b +:ks_uninstall -:68531fb9-5511-4989-97be-d11a0f55633f -set "_key=YC6KT%yh%GKW9T%yh%YTKYR%yh%T4X34%yh%R7VHC" &:: Standard -exit /b +cls +if not defined terminal mode 91, 30 +title Online %KS% Complete Uninstall %masver% -:7482e61b-c589-4b7f-8ecc-46d455ac3b87 -set "_key=74YFP%yh%3QFB3%yh%KQT8W%yh%PMXWJ%yh%7M648" &:: Datacenter -exit /b +set "uline=__________________________________________________________________________________________" -:620e2b3d-09e7-42fd-802a-17a13652fe7a -set "_key=489J6%yh%VHDMP%yh%X63PK%yh%3K798%yh%CPX3Y" &:: Enterprise -exit /b +set "_C16R=" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" +if %winbuild% GEQ 9200 if defined _C16R ( +echo: +call :dk_color %Gray% "Notice-" +echo: +echo To make sure Office programs do not show a non-genuine banner, +echo please run the activation option once, and don't uninstall afterward. +echo %uline% +) -:8a26851c-1c7e-48d3-a687-fbca9b9ac16b -set "_key=GT63C%yh%RJFQ3%yh%4GMB6%yh%BRFB9%yh%CB83V" &:: Itanium -exit /b +echo: +set error_= +call :_taskclear-cache +call :ks_clearstuff -:f772515c-0e87-48d5-a676-e6962c3e1195 -set "_key=736RG%yh%XDKJK%yh%V34PF%yh%BHK87%yh%J6X3K" &:: MultiPoint Server - ServerEmbeddedSolution -exit /b +:: check KMS38 lock -:: Office 2021 -:fbdb3e18-a8ef-4fb3-9183-dffd60bd0984 -set "_key=FXYTK%yh%NJJ8C%yh%GB6DW%yh%3DYQT%yh%6F7TH" &:: Professional Plus -exit /b +%nul% reg query "HKLM\%SPPk%\%_wApp%" && ( +set error_=9 +echo Failed to completely clear %KS% Cache. +reg query "HKLM\%SPPk%\%_wApp%" /s %nul2% | findstr /i "127.0.0.2" %nul1% && echo KMS38 activation is locked. +) || ( +echo Cleared %KS% Cache successfully. +) -:080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3 -set "_key=KDX7X%yh%BNVR8%yh%TXXGX%yh%4Q7Y8%yh%78VT3" &:: Standard -exit /b +if defined error_ ( +if "%error_%"=="1" ( +echo %uline% +%eline% +echo Try Again / Restart the System +echo %uline% +) +) else ( +echo %uline% +echo: +call :dk_color %Green% "Online %KS% has been successfully uninstalled." +echo %uline% +) -:76881159-155c-43e0-9db7-2d70a9a3a4ca -set "_key=FTNWT%yh%C6WBT%yh%8HMGF%yh%K9PRX%yh%QV9H8" &:: Project Professional -exit /b +goto :dk_done -:6dd72704-f752-4b71-94c7-11cec6bfc355 -set "_key=J2JDC%yh%NJCYY%yh%9RGQ4%yh%YXWMH%yh%T3D4T" &:: Project Standard -exit /b +:ks_clearstuff -:fb61ac9a-1688-45d2-8f6b-0674dbffa33c -set "_key=KNH8D%yh%FGHT4%yh%T8RK3%yh%CTDYJ%yh%K2HT4" &:: Visio Professional -exit /b +set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" -:72fce797-1884-48dd-a860-b2f6a5efd3ca -set "_key=MJVNY%yh%BYWPY%yh%CWV6J%yh%2RKRT%yh%4M8QG" &:: Visio Standard -exit /b +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && ( +echo Deleting [Task] Activation-Renewal +schtasks /delete /tn Activation-Renewal /f %nul% +) -:1fe429d8-3fa7-4a39-b6f0-03dded42fe14 -set "_key=WM8YG%yh%YNGDD%yh%4JHDC%yh%PG3F4%yh%FC4T4" &:: Access -exit /b +reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" %nul1% && ( +echo Deleting [Task] Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) -:ea71effc-69f1-4925-9991-2f5e319bbc24 -set "_key=NWG3X%yh%87C9K%yh%TC7YY%yh%BC2G7%yh%G6RVC" &:: Excel -exit /b +If exist "%ProgramFiles%\Activation-Renewal\" ( +echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ +rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% +) -:a5799e4c-f83c-4c6e-9516-dfe9b696150b -set "_key=C9FM6%yh%3N72F%yh%HFJXB%yh%TM3V9%yh%T86R9" &:: Outlook -exit /b +:: Stuff from old MAS versions -:6e166cc3-495d-438a-89e7-d7c9e6fd4dea -set "_key=TY7XF%yh%NFRBR%yh%KJ44C%yh%G83KF%yh%GX27K" &:: PowerPoint -exit /b +schtasks /delete /tn Online_%KS%_Activation_Script-Renewal /f %nul% +schtasks /delete /tn Online_%KS%_Activation_Script-Run_Once /f %nul% +del /f /q "%ProgramData%\Online_%KS%_Activation.cmd" %nul% +rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% +rmdir /s /q "%ProgramData%\Online_%KS%_Activation\" %nul% +rmdir /s /q "%windir%\Online_%KS%_Activation_Script\" %nul% +reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% -:aa66521f-2370-4ad8-a2bb-c095e3e4338f -set "_key=2MW9D%yh%N4BXM%yh%9VBPG%yh%Q7W6M%yh%KFBGQ" &:: Publisher -exit /b +:: Check if all is removed -:1f32a9af-1274-48bd-ba1e-1ab7508a23e8 -set "_key=HWCXN%yh%K3WBT%yh%WJBKY%yh%R8BD9%yh%XK29P" &:: Skype for Business +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && (set error_=1) +reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" %nul1% && (set error_=1) +reg query "%key%" /f Path /s | find /i "\Online_%KS%_Activation_Script" %nul1% && (set error_=1) +If exist "%windir%\Online_%KS%_Activation_Script\" (set error_=1) +reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && (set error_=1) +if exist "%ProgramData%\Online_%KS%_Activation.cmd" (set error_=1) +if exist "%ProgramData%\Online_%KS%_Activation\" (set error_=1) +if exist "%ProgramData%\Activation-Renewal\" (set error_=1) +if exist "%ProgramFiles%\Activation-Renewal\" (set error_=1) exit /b -:abe28aea-625a-43b1-8e30-225eb8fbd9e5 -set "_key=TN8H9%yh%M34D3%yh%Y64V9%yh%TR72V%yh%X79KV" &:: Word -exit /b +::======================================================================================================================================== -:: Office 2019 -:85dd8b5f-eaa4-4af3-a628-cce9e77c9a03 -set "_key=NMMKJ%yh%6RK4F%yh%KMJVX%yh%8D9MJ%yh%6MWKP" &:: Professional Plus -exit /b +:_extracttask: +@echo off -:6912a74b-a5fb-401a-bfdb-2e3ab46f4b02 -set "_key=6NWWJ%yh%YQWMR%yh%QKGCB%yh%6TMB3%yh%9D9HK" &:: Standard -exit /b +:: Renew K-M-S activation with Online servers via scheduled task -:2ca2bf3f-949e-446a-82c7-e25a15ec78c4 -set "_key=B4NPR%yh%3FKK7%yh%T2MBV%yh%FRQ4W%yh%PKD2B" &:: Project Professional -exit /b +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ -:1777f0e3-7392-4198-97ea-8ae4de6f6381 -set "_key=C4F7P%yh%NCP8C%yh%6CQPT%yh%MQHV9%yh%JXD2M" &:: Project Standard -exit /b -:5b5cf08f-b81a-431d-b080-3450d8620565 -set "_key=9BGNQ%yh%K37YR%yh%RQHF2%yh%38RQ3%yh%7VCBB" &:: Visio Professional +if not "%~1"=="Task" ( +echo: +echo ====== Error ====== +echo: +echo This file is supposed to be run only by the scheduled task. +echo: +echo Press any key to exit +pause >nul exit /b +) -:e06d7df3-aad0-419d-8dfb-0ac37e2bdf39 -set "_key=7TQNQ%yh%K3YQQ%yh%3PFH7%yh%CCPPM%yh%X4VQ2" &:: Visio Standard -exit /b +:: Set Environment variables, it helps if they are misconfigured in the system -:9e9bceeb-e736-4f26-88de-763f87dcc485 -set "_key=9N9PT%yh%27V4Y%yh%VJ2PD%yh%YXFMF%yh%YTFQT" &:: Access -exit /b +setlocal EnableExtensions +setlocal DisableDelayedExpansion -:237854e9-79fc-4497-a0c1-a70969691c6b -set "_key=TMJWT%yh%YYNMB%yh%3BKTF%yh%644FC%yh%RVXBD" &:: Excel -exit /b +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" -:c8f8a301-19f5-4132-96ce-2de9d4adbd33 -set "_key=7HD7K%yh%N4PVK%yh%BHBCQ%yh%YWQRW%yh%XW4VK" &:: Outlook -exit /b +set "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) -:3131fd61-5e4f-4308-8d6d-62be1987c92c -set "_key=RRNCX%yh%C64HY%yh%W2MM7%yh%MCH9G%yh%TJHMQ" &:: PowerPoint -exit /b +set "ComSpec=%SysPath%\cmd.exe" +set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" -:9d3e4cca-e172-46f1-a2f4-1d2107051444 -set "_key=G2KWX%yh%3NW6P%yh%PY93R%yh%JXK2T%yh%C9Y9V" &:: Publisher -exit /b +>nul fltmc || exit /b -:734c6c6e-b0ba-4298-a891-671772b2bd1b -set "_key=NCJ33%yh%JHBBY%yh%HTK98%yh%MYCV8%yh%HMKHJ" &:: Skype for Business -exit /b +::======================================================================================================================================== -:059834fe-a8ea-4bff-b67b-4d006b5447d3 -set "_key=PBX3G%yh%NWMT6%yh%Q7XBW%yh%PYJGG%yh%WXD33" &:: Word -exit /b +set _tserror= +set winbuild=1 +set "nul=>nul 2>&1" +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set psc=powershell.exe -:0bc88885-718c-491d-921f-6f214349e79c -set "_key=VQ9DP%yh%NVHPH%yh%T9HJC%yh%J9PDT%yh%KTQRG" &:: Pro Plus 2019 Preview -exit /b +set run_once= +set t_name=Renewal Task +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( +set run_once=1 +set t_name=Run Once Task +) -:fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9 -set "_key=XM2V9%yh%DN9HH%yh%QB449%yh%XDGKC%yh%W2RMW" &:: Project Pro 2019 Preview -exit /b +set _wmic=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" 2>nul | find /i "computersystem" 1>nul && set _wmic=1 +) -:500f6619-ef93-4b75-bcb4-82819998a3ca -set "_key=N2CG9%yh%YD3YK%yh%936X4%yh%3WR82%yh%Q3X4H" &:: Visio Pro 2019 Preview -exit /b +setlocal EnableDelayedExpansion +if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" +exit -:f3fb2d68-83dd-4c8b-8f09-08e0d950ac3b -set "_key=HFPBN%yh%RYGG8%yh%HQWCW%yh%26CH6%yh%PDPVF" &:: Pro Plus 2021 Preview -exit /b +::======================================================================================================================================== -:76093b1b-7057-49d7-b970-638ebcbfd873 -set "_key=WDNBY%yh%PCYFY%yh%9WP6G%yh%BXVXM%yh%92HDV" &:: Project Pro 2021 Preview -exit /b +:_taskstart -:a3b44174-2451-4cd6-b25f-66638bfb9046 -set "_key=2XYX7%yh%NXXBK%yh%9CK7W%yh%K2TKW%yh%JFJ7G" &:: Visio Pro 2021 Preview -exit /b +echo: +echo %date%, %time% -:: Office 2016 -:829b8110-0e6f-4349-bca4-42803577788d -set "_key=WGT24%yh%HCNMF%yh%FQ7XH%yh%6M8K7%yh%DRTW9" &:: Project Professional C2R-P -exit /b +set /a loop=1 +set /a max_loop=4 -:cbbaca45-556a-4416-ad03-bda598eaa7c8 -set "_key=D8NRQ%yh%JTYM3%yh%7J2DX%yh%646CT%yh%6836M" &:: Project Standard C2R-P -exit /b +call :_tasksetserv -:b234abe3-0857-4f9c-b05a-4dc314f85557 -set "_key=69WXN%yh%MBYV6%yh%22PQG%yh%3WGHK%yh%RM6XC" &:: Visio Professional C2R-P -exit /b +:_intrepeat -:361fe620-64f4-41b5-ba77-84f8e079b1f7 -set "_key=NY48V%yh%PPYYH%yh%3F4PX%yh%XJRKJ%yh%W4423" &:: Visio Standard C2R-P -exit /b +:: Check Internet connection. Works even if ICMP echo is disabled. -:e914ea6e-a5fa-4439-a394-a9bb3293ca09 -set "_key=DMTCJ%yh%KNRKX%yh%26982%yh%JYCKT%yh%P7KB6" &:: MondoR -exit /b +for %%a in (%srvlist%) do ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( +if not "%%#"=="" goto _taskIntConnected +) +) -:9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce -set "_key=HFTND%yh%W9MK4%yh%8B7MJ%yh%B6C4G%yh%XQBR2" &:: Mondo -exit /b +nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul +if "%errorlevel%"=="0" goto _taskIntConnected -:d450596f-894d-49e0-966a-fd39ed4c4c64 -set "_key=XQNVK%yh%8JYDB%yh%WJ9W3%yh%YJ8YR%yh%WFG99" &:: Professional Plus -exit /b +if %loop%==%max_loop% ( +set _tserror=1 +goto _taskend +) -:dedfa23d-6ed1-45a6-85dc-63cae0546de6 -set "_key=JNRGM%yh%WHDWX%yh%FJJG3%yh%K47QV%yh%DRTFM" &:: Standard -exit /b +echo: +echo Error: Internet is not connected +echo Waiting 30 seconds -:4f414197-0fc2-4c01-b68a-86cbb9ac254c -set "_key=YG9NW%yh%3K39V%yh%2T3HJ%yh%93F3Q%yh%G83KT" &:: Project Professional -exit /b +timeout /t 30 >nul +set /a loop=%loop%+1 +goto _intrepeat -:da7ddabc-3fbe-4447-9e01-6ab7440b4cd4 -set "_key=GNFHQ%yh%F6YQM%yh%KQDGJ%yh%327XX%yh%KQBVC" &:: Project Standard -exit /b +:_taskIntConnected -:6bf301c1-b94a-43e9-ba31-d494598c47fb -set "_key=PD3PC%yh%RHNGV%yh%FXJ29%yh%8JK7D%yh%RJRJK" &:: Visio Professional -exit /b +::======================================================================================================================================== -:aa2a7821-1827-4c2c-8f1d-4513a34dda97 -set "_key=7WHWN%yh%4T7MP%yh%G96JF%yh%G33KR%yh%W8GF4" &:: Visio Standard -exit /b +call :_taskclear-cache -:67c0fc0c-deba-401b-bf8b-9c8ad8395804 -set "_key=GNH9Y%yh%D2J4T%yh%FJHGG%yh%QRVH7%yh%QPFDW" &:: Access -exit /b +:: Check WMI and sppsvc Errors -:c3e65d36-141f-4d2f-a303-a842ee756a29 -set "_key=9C2PK%yh%NWTVB%yh%JMPW8%yh%BFT28%yh%7FTBF" &:: Excel -exit /b +set applist= +net start sppsvc /y %nul% +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" +%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) -:d8cace59-33d2-4ac7-9b1b-9b72339c51c8 -set "_key=DR92N%yh%9HTF2%yh%97XKM%yh%XW2WJ%yh%XW3J6" &:: OneNote -exit /b +if not defined applist ( +set _tserror=1 +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if !errorlevel! NEQ 0 (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) +echo: +echo Error: Not Respoding- !e_wmispp! +echo: +) -:ec9d9265-9d1e-4ed0-838a-cdc20f2551a1 -set "_key=R69KK%yh%NTPKF%yh%7M3Q4%yh%QYBHW%yh%6MT9B" &:: Outlook -exit /b +::======================================================================================================================================== -:d70b1bba-b893-4544-96e2-b7a318091c33 -set "_key=J7MQP%yh%HNJ4Y%yh%WJ7YM%yh%PFYGF%yh%BY6C6" &:: Powerpoint -exit /b +:: Check installed volume products activation ID's -:041a06cb-c5b8-4772-809f-416d03d16654 -set "_key=F47MM%yh%N3XJP%yh%TQXJ9%yh%BP99D%yh%8K837" &:: Publisher -exit /b +call :_taskgetids sppwid %slp% windows +call :_taskgetids sppoid %slp% office +call :_taskgetids osppid %ospp% office -:83e04ee1-fa8d-436d-8994-d31a862cab77 -set "_key=869NQ%yh%FJ69K%yh%466HW%yh%QYCP2%yh%DDBV6" &:: Skype for Business -exit /b +::======================================================================================================================================== -:bb11badf-d8aa-470e-9311-20eaf80fe5cc -set "_key=WXY84%yh%JN2Q9%yh%RBCCQ%yh%3Q3J3%yh%3PFJ6" &:: Word -exit /b +echo: +echo Renewing K-M-S activation for all installed Volume products -:: Office 2013 -:dc981c6b-fc8e-420f-aa43-f8f33e5c0923 -set "_key=42QTK%yh%RN8M7%yh%J3C4G%yh%BBGYM%yh%88CYV" &:: Mondo -exit /b +if not defined sppwid if not defined sppoid if not defined osppid ( +echo: +echo No installed Volume Windows / Office product found +echo: +echo Renewing K-M-S server +call :_taskgetserv +call :_taskregserv +goto :_skipact +) -:b322da9c-a2e2-4058-9e4e-f59a6970bd69 -set "_key=YC7DK%yh%G2NP3%yh%2QQC3%yh%J6H88%yh%GVGXT" &:: Professional Plus -exit /b +::======================================================================================================================================== -:b13afb38-cd79-4ae5-9f7f-eed058d750ca -set "_key=KBKQT%yh%2NMXY%yh%JJWGP%yh%M62JB%yh%92CD4" &:: Standard -exit /b +call :_taskact -:4a5d124a-e620-44ba-b6ff-658961b33b9a -set "_key=FN8TT%yh%7WMH6%yh%2D4X9%yh%M337T%yh%2342K" &:: Project Professional -exit /b +:_skipact -:427a28d1-d17c-4abf-b717-32c780ba6f07 -set "_key=6NTH3%yh%CW976%yh%3G3Y2%yh%JK3TX%yh%8QHTT" &:: Project Standard -exit /b +::======================================================================================================================================== -:e13ac10e-75d0-4aff-a0cd-764982cf541c -set "_key=C2FG9%yh%N6J68%yh%H8BTJ%yh%BW3QX%yh%RM3B3" &:: Visio Professional -exit /b +if defined run_once ( +echo: +echo Deleting Scheduled Task Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) -:ac4efaf0-f81f-4f61-bdf7-ea32b02ab117 -set "_key=J484Y%yh%4NKBF%yh%W2HMG%yh%DBMJC%yh%PGWR7" &:: Visio Standard -exit /b +::======================================================================================================================================== -:6ee7622c-18d8-4005-9fb7-92db644a279b -set "_key=NG2JY%yh%H4JBT%yh%HQXYP%yh%78QH9%yh%4JM2D" &:: Access -exit /b +:_taskend -:f7461d52-7c2b-43b2-8744-ea958e0bd09a -set "_key=VGPNG%yh%Y7HQW%yh%9RHP7%yh%TKPV3%yh%BG7GB" &:: Excel -exit /b +echo: +echo Exiting +echo ______________________________________________________________________ -:fb4875ec-0c6b-450f-b82b-ab57d8d1677f -set "_key=H7R7V%yh%WPNXQ%yh%WCYYC%yh%76BGV%yh%VT7GH" &:: Groove -exit /b +if defined _tserror (exit /b 123456789) else (exit /b 0) -:a30b8040-d68a-423f-b0b5-9ce292ea5a8f -set "_key=DKT8B%yh%N7VXH%yh%D963P%yh%Q4PHY%yh%F8894" &:: InfoPath -exit /b +::======================================================================================================================================== -:1b9f11e3-c85c-4e1b-bb29-879ad2c909e3 -set "_key=2MG3G%yh%3BNTT%yh%3MFW9%yh%KDQW3%yh%TCK7R" &:: Lync -exit /b +:_act -:efe1f3e6-aea2-4144-a208-32aa872b6545 -set "_key=TGN6P%yh%8MMBC%yh%37P2F%yh%XHXXK%yh%P34VW" &:: OneNote -exit /b +set prodname= +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get LicenseFamily /VALUE" 2^>nul') do (call set "prodname=%%#") +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM !_path! WHERE ID=''!_actid!''').Get()).LicenseFamily | %% {echo ('LicenseFamily='+$_)}" 2^>nul') do (call set "prodname=%%#") +for /f "tokens=1 delims=-_" %%a in ("%prodname%") do set "prodname=%%a" -:771c3afa-50c5-443f-b151-ff2546d863a0 -set "_key=QPN8Q%yh%BJBTJ%yh%334K3%yh%93TGY%yh%2PMBT" &:: Outlook -exit /b +set _taskskip= +if "%_actprojvis%"=="1" ( +echo: %prodname% | find /i "Office" %nul% && ( +echo: %prodname% | findstr /i "Project Visio" %nul% || (set _taskskip=1& exit /b) +) +) -:8c762649-97d1-4953-ad27-b7e2c25b972e -set "_key=4NT99%yh%8RJFH%yh%Q2VDH%yh%KYG2C%yh%4RD4F" &:: Powerpoint -exit /b +if defined t_name Activating: %prodname% -:00c79ff1-6850-443d-bf61-71cde0de305f -set "_key=PN2WF%yh%29XG2%yh%T9HJ7%yh%JQPJR%yh%FCXK4" &:: Publisher -exit /b +set errorcode=12345 +set /a act_attempt=0 -:d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3 -set "_key=6Q7VD%yh%NX8JD%yh%WJ2VH%yh%88V73%yh%4GBJ7" &:: Word -exit /b +:_act2 -:: Office 2010 -:09ed9640-f020-400a-acd8-d7d867dfd9c2 -set "_key=YBJTT%yh%JG6MD%yh%V9Q7P%yh%DBKXJ%yh%38W9R" &:: Mondo -exit /b +if %act_attempt% GTR 4 exit /b -:ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c -set "_key=7TC2V%yh%WXF6P%yh%TD7RT%yh%BQRXR%yh%B8K32" &:: Mondo2 -exit /b +if not "%act_ok%"=="1" ( +if not defined _server call :_taskgetserv +call :_taskregserv +) -:6f327760-8c5c-417c-9b61-836a98287e0c -set "_key=VYBBJ%yh%TRJPB%yh%QFQRF%yh%QFT4D%yh%H3GVB" &:: Professional Plus -exit /b +if not !server_num! GTR %max_servers% ( -:9da2a678-fb6b-4e67-ab84-60dd6a9c819a -set "_key=V7QKV%yh%4XVVR%yh%XYV4D%yh%F7DFM%yh%8R6BM" &:: Standard +if "%1"=="act_win" if %_kms38% EQU 1 ( +set act_ok=1 exit /b +) -:df133ff7-bf14-4f95-afe3-7b48e7e331ef -set "_key=YGX6F%yh%PGV49%yh%PGW3J%yh%9BTGG%yh%VHKC6" &:: Project Professional -exit /b +if %_wmic% EQU 1 wmic path !_path! where ID='!_actid!' call Activate %nul% +if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM !_path! where ID=''!_actid!''').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" -:5dc7bf61-5ec9-4996-9ccb-df806a2d0efe -set "_key=4HP3K%yh%88W3F%yh%W2K3D%yh%6677X%yh%F9PGB" &:: Project Standard -exit /b +call set errorcode=!errorlevel! -:92236105-bb67-494f-94c7-7f7a607929bd -set "_key=D9DWC%yh%HPYVV%yh%JGF4P%yh%BTWQB%yh%WX8BJ" &:: Visio Premium +if !errorcode! EQU 0 ( +set act_ok=1 exit /b - -:e558389c-83c3-4b29-adfe-5e4d7f46c358 -set "_key=7MCW8%yh%VRQVK%yh%G677T%yh%PDJCM%yh%Q8TCP" &:: Visio Professional +) +if "%1"=="act_win" if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( +set act_ok=1 exit /b +) -:9ed833ff-4f92-4f36-b370-8683a4f13275 -set "_key=767HD%yh%QGMWX%yh%8QTDB%yh%9G3R2%yh%KHFGJ" &:: Visio Standard +set act_ok=0 +set /a act_attempt+=1 +if not defined _server goto _act2 +) exit /b -:8ce7e872-188c-4b98-9d90-f8f90b7aad02 -set "_key=V7Y44%yh%9T38C%yh%R2VJK%yh%666HK%yh%T7DDX" &:: Access -exit /b +::======================================================================================================================================== -:cee5d470-6e3b-4fcc-8c2b-d17428568a9f -set "_key=H62QG%yh%HXVKF%yh%PP4HP%yh%66KMR%yh%CW9BM" &:: Excel -exit /b +:_actinfo -:8947d0b8-c33b-43e1-8c56-9b674c052832 -set "_key=QYYW6%yh%QP4CB%yh%MBV6G%yh%HYMCJ%yh%4T3J4" &:: Groove - SharePoint Workspace -exit /b +if "%1"=="act_win" if not defined t_name (set prodname=%winos%) -:ca6b6639-4ad6-40ae-a575-14dee07f6430 -set "_key=K96W8%yh%67RPQ%yh%62T9Y%yh%J8FQJ%yh%BT37T" &:: InfoPath +if "%1"=="act_win" if %_kms38% EQU 1 ( +if defined t_name ( +echo %prodname% is already activated with KMS38. +) else ( +call :dk_color %Green% "%prodname% is already activated with KMS38." +) exit /b +) -:ab586f5c-5256-4632-962f-fefd8b49e6f4 -set "_key=Q4Y4M%yh%RHWJM%yh%PY37F%yh%MTKWH%yh%D3XHX" &:: OneNote +if %errorcode% EQU 12345 ( +if defined t_name ( +echo %prodname% activation failed due to restricted or no Internet. +) else ( +call :dk_color %Red% "%prodname% activation failed due to restricted or no Internet." +) +set showfix=1 +set _tserror=1 exit /b +) -:ecb7c192-73ab-4ded-acf4-2399b095d0cc -set "_key=7YDC2%yh%CWM8M%yh%RRTJC%yh%8MDVC%yh%X3DWQ" &:: Outlook +if %errorcode% EQU -1073418187 if "%1"=="act_win" if %winbuild% LSS 9200 ( +if defined t_name ( +echo %prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]. +) else ( +call :dk_color %Red% "%prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]." +set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" +) +set oemerr=1 +set showfix=1 exit /b +) -:45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a -set "_key=RC8FX%yh%88JRY%yh%3PF7C%yh%X8P67%yh%P4VTT" &:: Powerpoint +if %errorcode% EQU -1073418124 ( +if defined t_name ( +echo %prodname% activation failed due to Internet issue [0xC004F074]. +) else ( +call :dk_color %Red% "%prodname% activation failed due to Internet issue [0xC004F074]." +if not defined _tserror ( +call :dk_color %Blue% "Make sure that system files are not blocked by firewall." +call :dk_color %Blue% "If the issue persists, try another Internet connection or VPN such as https://1.1.1.1" +) +) +set showfix=1 +set _tserror=1 exit /b +) -:b50c4f75-599b-43e8-8dcd-1081a7967241 -set "_key=BFK7F%yh%9MYHM%yh%V68C7%yh%DRQ66%yh%83YTP" &:: Publisher -exit /b -:2d0882e7-a4e7-423b-8ccc-70d91e0158b1 -set "_key=HVHB3%yh%C6FV7%yh%KQX9W%yh%YQG79%yh%CRY7T" &:: Word -exit /b +set gpr=0 +set gpr2=0 +call :_taskgetgrace +set /a "gpr2=(%gpr%+1440-1)/1440" -:ea509e87-07a1-4a45-9edc-eba5a39f36af -set "_key=D6QFG%yh%VBYP2%yh%XQHM7%yh%J97RH%yh%VVRCK" &:: Small Business Basics +if %errorcode% EQU 0 if %gpr% EQU 0 ( +if defined t_name ( +echo %prodname% activation succeeded, but Remaining Period failed to increase. +) else ( +call :dk_color %Red% "%prodname% activation succeeded, but Remaining Period failed to increase." +) +set _tserror=1 exit /b - -:TheEnd - -if %act_failed% EQU 1 ( -echo ____________________________________________________________________ -echo. -call :_errorinfo ) -if not defined _tskinstalled if not defined _oldtsk ( -echo. -if %winbuild% GEQ 9200 ( -call :leavenonexistentkms %nul% -echo Keeping the non-existent IP address 10.0.0.10 as KMS Server. +set _actpass=1 +if %gpr% EQU 43200 if "%1"=="act_win" if %winbuild% GEQ 9200 set _actpass=0 +if %gpr% EQU 64800 set _actpass=0 +if %gpr% GTR 259200 if "%1"=="act_win" call :_taskchkEnterpriseG _actpass +if %gpr% EQU 259200 set _actpass=0 + +if %errorcode% EQU 0 if %_actpass% EQU 0 ( +if defined t_name ( +echo %prodname% is successfully activated for %gpr2% days. ) else ( -call :Clear-KMS-Cache +call :dk_color %Green% "%prodname% is successfully activated for %gpr2% days." ) +exit /b ) -if not [%Act_OK%]==[1] ( -echo. -echo In case of any issues, check https://mass%-%grave.dev/troubleshoot +cmd /c exit /b %errorcode% +if defined t_name ( +echo %prodname% has failed to activate [0x!=ExitCode!]. Remaining Period: %gpr2% days [%gpr% minutes]. +) else ( +call :dk_color %Red% "%prodname% has failed to activate [0x!=ExitCode!]. Remaining Period: %gpr2% days [%gpr% minutes]." ) - -if defined _unattended exit /b - -echo ____________________________________________________________________ -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul +set _tserror=1 exit /b ::======================================================================================================================================== -:_errorinfo +:_taskact -call :CheckFR +:: Check KMS38 activation -set _intcon= -for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _intcon ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _intcon=1) +set gpr=0 +set _kms38=0 +if defined sppwid if %winbuild% GEQ 14393 ( +set _path=%slp% +set _actid=%sppwid% +call :_taskgetgrace ) -if not defined _intcon ( -call :_color %_Red% "Internet is not connected." -exit /b +if %gpr% NEQ 0 if %gpr% GTR 259200 ( +set _kms38=1 +call :_taskchkEnterpriseG _kms38 ) -if [%ERRORCODE%]==[-1073418124] ( -echo Checking Port 1688 connection, it may take a while... -echo. +:: Set specific K-M-S host to Local Host so that global K-M-S IP can not replace KMS38 activation but can be used with Office and other Windows Editions. -set /a count=0 -set _portcon= -for %%a in (%srvlist%) do if not defined _portcon if !count! LEQ 7 ( -set /a count+=1 -%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""%%a""", 1688)}catch{};$t.Connected" | findstr /i true 1>nul && set _portcon=1 +if %_kms38% EQU 1 ( +%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" +%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" ) -if not defined _portcon ( -call :_color %Red% "Port 1688 is blocked in your Internet connection." -echo. -echo Reason: Probably restricted Internet [Office/College] is connected, -echo or Firewall is blocking the connection. -echo. -echo Solution: Either use another Internet connection or use offline KMS -echo https://github.com/abbodi1406/KMS_VL_ALL_AIO +echo: +if defined sppwid ( +set _path=%slp% +set _actid=%sppwid% +call :_act act_win +call :_actinfo act_win ) else ( -echo Port 1688 connection test is passed. -echo. -echo Make sure system files are not blocked by your firewall. -echo If the issue persists, try offline KMS -echo https://github.com/abbodi1406/KMS_VL_ALL_AIO +if defined t_name echo Checking: Volume version of Windows is not installed +) + +if defined sppoid ( +set _path=%slp% +for %%# in (%sppoid%) do ( +set _actid=%%# +call :_act +if not defined _taskskip call :_actinfo +) +) + +if defined osppid ( +set _path=%ospp% +for %%# in (%osppid%) do ( +set _actid=%%# +call :_act +if not defined _taskskip call :_actinfo +) ) -echo. + +if not defined sppoid if not defined osppid if defined t_name ( +echo: +echo Checking: Volume version of Office is not installed ) -echo KMS server is not an issue in this case. exit /b ::======================================================================================================================================== -:setserv +:_taskgetids + +set %1= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %2 where (Name like '%%%3%%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get ID /VALUE" 2^>nul')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %2 WHERE Name like ''%%%3%%'' and Description like ''%%KMSCLIENT%%'' and PartialProductKey is not NULL AND LicenseDependsOn is NULL').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" +%chkapp% do (if defined %1 (call set "%1=!%1! %%a") else (call set "%1=%%a")) +exit /b -:: Multi KMS servers integration and servers randomization +:_taskgetgrace -set srvlist= -set -= +set gpr=0 +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get GracePeriodRemaining /VALUE" 2^>nul') do call set "gpr=%%#" +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM !_path! where ID=''!_actid!''').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" 2^>nul') do call set "gpr=%%#" +exit /b -set "srvlist=kms.zhu%-%xiaole.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" -set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.wl%-%rxy.cn kms.ca%-%tqu.com" -set "srvlist=%srvlist% kms.0%-%t.net.cn kms.its%-%jzx.com kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" +:_taskchkEnterpriseG -set n=1 -for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) -set max_servers=15 -set /a server_num=0 +for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) exit /b -:getserv +::======================================================================================================================================== -if %server_num% equ %max_servers% set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b -set /a rand=%Random%%%(15+1-1)+1 -if defined !server%rand%! goto :getserv -set KMS_IP=!server%rand%! -set !server%rand%!=1 +:: Clean existing K-M-S cache from the registry -:: Get IPv4 address of KMS server to use for the activation, works even if ICMP echo is disabled. -:: Microsoft and Antivirus's may flag the issue if public KMS server host name is directly used for the activation. +:_taskclear-cache -set /a server_num+=1 -(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" -if [%KMS_IP%]==[!KMS_IP!] for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" -if not [%KMS_IP%]==[!KMS_IP!] exit /b -goto :getserv +set w= +for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do ( +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul% ) -:========================================================================================================================================== - -:Clear-KMS-Cache +set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" +set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -set OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform -set SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform +set "slp=SoftwareLicensingProduct" +set "ospp=OfficeSoftwareProtectionProduct" -set _wApp=55c92734-d682-4d71-983e-d6ec3f16059f -set _oApp=0ff1ce15-a989-479d-af46-f275c6370663 -set _oA14=59a52881-a989-479d-af46-f275c6370663 +set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" +set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" +set "_oA14=59a52881-a989-479d-af46-f275c6370663" %nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName +%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32 %nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort +%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32 %nul% reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing %nul% reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching %nul% reg delete "HKLM\%SPPk%\%_wApp%" /f if %winbuild% GEQ 9200 ( -if defined notx86 ( -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32 -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32 -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -) %nul% reg delete "HKLM\%SPPk%\%_oApp%" /f +%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 ) if %winbuild% GEQ 9600 ( %nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f @@ -3256,267 +1935,139 @@ if %winbuild% GEQ 9600 ( %nul% reg delete "HKLM\%OPPk%\%_oA14%" /f %nul% reg delete "HKLM\%OPPk%\%_oApp%" /f -:: check KMS38 lock - -%nul% reg query "HKLM\%SPPk%\%_wApp%" && ( -set error_=9 -echo Failed to completely clear KMS Cache. -reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo KMS38 activation is locked. -) || ( -echo Cleared KMS Cache successfully. -) exit /b -:========================================================================================================================================= - -:leavenonexistentkms - -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing -reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching -if not defined _keepkms38 reg delete "HKLM\%SPPk%\%_wApp%" /f -if %winbuild% GEQ 9200 ( -if not %xOS%==x86 ( -reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 -reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -) -reg delete "HKLM\%SPPk%\%_oApp%" /f -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -) -if %winbuild% GEQ 9600 ( -reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f -reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f -) -reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" -reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort -reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing -reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching -reg delete "HKLM\%OPPk%\%_oA14%" /f -reg delete "HKLM\%OPPk%\%_oApp%" /f -goto :eof - -:========================================================================================================================================= - -:_Complete_Uninstall +::======================================================================================================================================== -cls -mode con: cols=91 lines=30 -title Online KMS Complete Uninstall %masver% +:_taskregserv -set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" +if defined _server (set KMS_IP=%_server%) +if not defined _port set _port=1688 -set "_C16R=" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath /reg:32" 2^>nul') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" set "_C16R=1" -if %winbuild% GEQ 9200 if defined _C16R ( -echo. -echo ## Notice ## -echo. -echo To make sure Office programs do not show a non-genuine banner, -echo please run the activation option once, and don't uninstall afterward. -echo __________________________________________________________________________________________ -) +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" /reg:32 -set error_= -echo. -call :Clear-KMS-Cache -call :clearstuff +%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" -if defined error_ ( -if [%error_%]==[1] ( -echo __________________________________________________________________________________________ -%eline% -echo Try Again / Restart the System -echo __________________________________________________________________________________________ -) -) else ( -echo __________________________________________________________________________________________ -echo. -call :_color %Green% "Online KMS Complete Uninstall was done successfully." -echo __________________________________________________________________________________________ +if %winbuild% GEQ 9200 ( +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" /reg:32 ) - -if defined _unattended timeout /t 2 & exit /b - -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul exit /b -:clearstuff - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && ( -echo Deleting [Task] Activation-Renewal -schtasks /delete /tn Activation-Renewal /f %nul% -) - -reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && ( -echo Deleting [Task] Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% -) - -reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Renewal" >nul && ( -echo Deleting [Task] Online_KMS_Activation_Script-Renewal -schtasks /delete /tn Online_KMS_Activation_Script-Renewal /f %nul% -) +::======================================================================================================================================== -reg query "%key%" /f Path /s | find /i "\Online_KMS_Activation_Script-Run_Once" >nul && ( -echo Deleting [Task] Online_KMS_Activation_Script-Run_Once -schtasks /delete /tn Online_KMS_Activation_Script-Run_Once /f %nul% -) +:_tasksetserv -If exist "%windir%\Online_KMS_Activation_Script\" ( -echo Deleting [Folder] %windir%\Online_KMS_Activation_Script\ -rmdir /s /q "%windir%\Online_KMS_Activation_Script\" %nul% -) +:: Multi K-M-S servers integration and servers randomization -if exist "%ProgramData%\Online_KMS_Activation.cmd" ( -echo Deleting [File] %ProgramData%\Online_KMS_Activation.cmd -del /f /q "%ProgramData%\Online_KMS_Activation.cmd" %nul% -) +set srvlist= +set -= -If exist "%ProgramData%\Online_KMS_Activation\" ( -echo Deleting [Folder] %ProgramData%\Online_KMS_Activation\ -rmdir /s /q "%ProgramData%\Online_KMS_Activation\" %nul% -) +set "srvlist=kms.03%-%k.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" +set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.lol%-%i.best kms.my%-%ds.cloud" +set "srvlist=%srvlist% kms.0%-%t.net.cn win.k%-%ms.pub kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" -If exist "%ProgramData%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramData%\Activation-Renewal\ -rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% -) +set n=1 +for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) +set max_servers=15 +set /a server_num=0 +exit /b -If exist "%ProgramFiles%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ -rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% -) +:_taskgetserv -reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && ( -echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office -Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% -) +if %server_num% geq %max_servers% (set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b) +set /a rand=%Random%%%(15+1-1)+1 +if defined !server%rand%! goto :_taskgetserv +set KMS_IP=!server%rand%! +set !server%rand%!=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 "\Online_KMS_Activation_Script" >nul && (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) -if exist "%ProgramData%\Online_KMS_Activation.cmd" (set error_=1) -if exist "%ProgramData%\Online_KMS_Activation\" (set error_=1) -if exist "%ProgramData%\Activation-Renewal\" (set error_=1) -if exist "%ProgramFiles%\Activation-Renewal\" (set error_=1) -exit /b +:: Get IPv4 address of K-M-S server to use for the activation, works even if ICMP echo is disabled. +:: Microsoft and Antivirus's may flag the issue if public K-M-S server host name is directly used for the activation. -:========================================================================================================================================= +set /a server_num+=1 +(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" +if "%KMS_IP%"=="!KMS_IP!" for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" +if not "%KMS_IP%"=="!KMS_IP!" exit /b +goto :_taskgetserv +) +::Ver:2.7 +:_extracttask: -:RenTask +::======================================================================================================================================== -cls -mode con cols=91 lines=30 -title Install Activation Auto-Renewal %masver% +:ks_renewal set error_= set "_dest=%ProgramFiles%\Activation-Renewal" set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" -call :clearstuff %nul% +call :ks_clearstuff %nul% if defined error_ ( -%eline% -echo Failed to completely clear KMS related folders/tasks. -echo Run the Uninstall option and then try again. -goto :RenDone +set error=1 +call :dk_color %Red% "Failed to remove previous Renewal Task. Restart system / Try again." +exit /b ) if not exist "%_dest%\" md "%_dest%\" %nul% -set "_temp=%SystemRoot%\Temp\_taskwork_%Random%" +for /f %%G in ('%psc% "[Guid]::NewGuid().Guid"') do set "randguid=%%G" +set "_temp=%SystemRoot%\Temp\%Random%%randguid%" set nil= if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% md "%_temp%\" %nul% -call :RenExport renewal "%_temp%\Renewal.xml" Unicode -if defined ActTask (call :RenExport run_once "%_temp%\Run_Once.xml" Unicode) +call :ks_RenExport renewal "%_temp%\Renewal.xml" Unicode +if not defined _int (call :ks_RenExport run_once "%_temp%\Run_Once.xml" Unicode) s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Renewal" /ru "SYS%nil%TEM" /xml "%_temp%\Renewal.xml" %nul% -if defined ActTask (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) +if not defined _int (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% -call :createInfo.txt -%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 %masver% +call :ks_createInfo.txt +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@::%randguid%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII)" ::======================================================================================================================================== reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul || (set error_=1) -if defined ActTask reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul || (set error_=1) +if not defined _int reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul || (set error_=1) If not exist "%_dest%\Activation_task.cmd" (set error_=1) If not exist "%_dest%\Info.txt" (set error_=1) if defined error_ ( - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && ( schtasks /delete /tn Activation-Renewal /f %nul% -) -reg query "%key%" /f Path /s | find /i "\Activation-Run_Once" >nul && ( schtasks /delete /tn Activation-Run_Once /f %nul% -) - -If exist "%_dest%\" ( rmdir /s /q "%_dest%\" %nul% +set error=1 +call :dk_color %Red% "Failed to install Renewal Task. Restart system / Try again." +exit /b ) -%eline% -echo Run the Uninstall option and then try again. -goto :RenDone -) - -echo __________________________________________________________________________________________ -echo. -echo Files created: -echo %_dest%\Activation_task.cmd -echo %_dest%\Info.txt -echo. -(if defined ActTask (echo Scheduled Tasks created:) else (echo Scheduled Task created:)) -echo \Activation-Renewal [Weekly] -if defined ActTask (echo \Activation-Run_Once) -echo __________________________________________________________________________________________ -echo. -echo Info: -echo Activation will be renewed every week if the Internet connection is found. -echo It'll only renew installed KMS licenses. It won't convert any license to KMS. -echo __________________________________________________________________________________________ -echo. -if defined ActTask ( -call :_color %Green% "Renewal and Activation Tasks were successfully created." -) else ( -call :_color %Green% "Renewal Task was successfully created." -) -echo. -call :_color %Gray% "Make sure you have run the Activation option at least once." -echo __________________________________________________________________________________________ +if "%keyerror%"=="0" if not defined _tserror ( +call :dk_color %Green% "Renewal Task for lifetime activation is successfully installed in %_dest%" +exit /b ) +echo Renewal Task for lifetime activation is successfully installed in %_dest% +exit /b -::======================================================================================================================================== - -:RenDone +:: Extract the text from batch script without character and file encoding issue -if defined _unattended exit /b +:ks_RenExport -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" exit /b ::======================================================================================================================================== -:createInfo.txt +:ks_createInfo.txt ( -echo The use of this script is to renew your Windows/Office KMS license using online KMS. +echo The use of this script is to renew your Windows/Office license using online K-M-S. echo: echo If renewal/activation Scheduled tasks were created then following would exist, echo: @@ -3531,10 +2082,10 @@ echo C:\Program Files\Activation-Renewal\Info.txt echo C:\Program Files\Activation-Renewal\Logs.txt echo ______________________________________________________________________________________________ echo: -echo Online KMS Activation Script is a part of 'Microsoft_Activation_Scripts' [MAS] project. +echo This Script is a part of MAS project. echo: echo Homepage: mass grave[.]dev -echo Email: windowsaddict@protonmail.com +echo Email: mas.help@outlook.com )>"%_dest%\Info.txt" exit /b @@ -3663,615 +2214,1366 @@ exit /b ::======================================================================================================================================== -:: Extract the text from batch script without character and file encoding issue +:: Set variables -:RenExport +:dk_setvar -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" -exit /b +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) -:_extracttask: -@echo off +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 -:: Renew K-M-S activation with Online servers via scheduled task +:: Show OS info -::============================================================================ -:: -:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project. -:: -:: Homepage: mass grave[.]dev -:: Email: windowsaddict@protonmail.com -:: -::============================================================================ +:dk_showosinfo +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b -if not "%~1"=="Task" ( -echo. -echo ====== Error ====== -echo. -echo This file is supposed to be run only by the scheduled task. -echo. -echo Press any key to exit -pause >nul -exit /b +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) ) -:: Set Path variable, it helps if it is misconfigured in the system +echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] +exit /b -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 SKU value + +:dk_checksku + +call :dk_reflection + +set osSKU= +set slcSKU= +set wmiSKU= +set regSKU= +set winsub= + +if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); +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) +set slcSKU=%slcSKU: =% +if "%slcSKU%"=="0" set slcSKU= +for /f "tokens=* delims=0123456789" %%a in ("%slcSKU%") do (if not "[%%a]"=="[]" set slcSKU=) + +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" + +if %winbuild% GEQ 15063 %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';iex ($f[1])" %nul2% | find /i "Subscription_is_activated" %nul% && ( +if defined regSKU if defined slcSKU if not "%regSKU%"=="%slcSKU%" ( +set winsub=1 +set osSKU=%regSKU% +) ) ->nul fltmc || exit /b +if not defined osSKU set osSKU=%slcSKU% +if not defined osSKU set osSKU=%wmiSKU% +if not defined osSKU set osSKU=%regSKU% +exit /b -::======================================================================================================================================== +:: Get Windows Subscription status -set _tserror= -set winbuild=1 -set "nul=>nul 2>&1" -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -set psc=powershell.exe +:winsubstatus: +$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(6, 1).DefineDynamicModule(4).DefineType(2) +[void]$DM.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$m = [System.Runtime.InteropServices.Marshal] +$p = $m::AllocHGlobal(12) +$r = $DM.CreateType()::ClipGetSubscriptionStatus([ref]$p) +if ($r -eq 0) { + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: -set run_once= -set t_name=Renewal Task -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( -set run_once=1 -set t_name=Run Once Task +:: Get Windows permanent activation status + +:dk_checkperm + +if %_wmic% EQU 1 wmic path %spp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +exit /b + +:: Refresh license status + +:dk_refresh + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% +exit /b + +:: Install Key + +:dk_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] +) else ( +call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." +call :dk_color %Blue% "%_fixmsg%" +set showfix=1 ) +set error=1 +) + +exit /b + +:: Get Windows installed key channel + +:k_channel + +set _gvlk= +if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like '%%KMSCLIENT%%'" Get Name /value %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) +if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL and Description like ''%%KMSCLIENT%%''').Get()).Name | %% {echo ('Name='+$_)}" %nul6%') do (echo %%# findstr /i "Windows" %nul1% && set _gvlk=1) +exit /b + +:: Get all products Activation IDs + +:dk_actids + +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Trigger reevaluation, it helps in updating SPP tasks + +:dk_reeval + +:: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP + +set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" +reg delete "%ruleskey%" /v "State" /f %nul% +reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); +set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" +exit /b + +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + +:: 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 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 ) +exit /b -setlocal EnableDelayedExpansion -if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" & exit +:: Show info for potential script stuck scenario -::======================================================================================================================================== +:dk_sppissue -:_taskstart +sc start sppsvc %nul% +set spperror=%errorlevel% -echo. -echo %date%, %time% +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) -set /a loop=1 -set /a max_loop=4 +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +exit /b -call :_tasksetserv +:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) -:_intrepeat +:dk_product -:: Check Internet connection. Works even if ICMP echo is disabled. +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%%') -for %%a in (%srvlist%) do ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto _taskIntConnected +set winos= +for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) +echo "%winos%" | find /i "Windows" %nul1% || ( +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 ( +set winos=!winos:Windows 10=Windows 11! ) ) -nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto _taskIntConnected +if not defined winsub exit /b -if %loop%==%max_loop% ( -set _tserror=1 -goto _taskend +:: Check base edition product name if Windows subscription license is found + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a +) else ( +set winos=Windows 10 %%a +) ) +exit /b -echo. -echo Error: Internet is not connected -echo Waiting 30 seconds +:: Common lines used in PowerShell reflection code -timeout /t 30 >nul -set /a loop=%loop%+1 -goto _intrepeat +:dk_reflection -:_taskIntConnected +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 ::======================================================================================================================================== -:: Check not x86 Windows +:: Get Product Key from pkeyhelper.dll for future new editions +:: It works on Windows 10 1803 (17134) and later builds. -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 +:k_pkey -::======================================================================================================================================== +call :dk_reflection -set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SkuGetProductKeyForEdition', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [String], [String].MakeByRefType(), [String].MakeByRefType()), 1, 3); +set d1=%d1% $out = ''; [void]$TypeBuilder.CreateType()::SkuGetProductKeyForEdition(%1, %2, [ref]$out, [ref]$null); $out -set "slp=SoftwareLicensingProduct" -set "ospp=OfficeSoftwareProtectionProduct" +set pkey= +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkey=%%a) +exit /b -set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f" -set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663" -set "_oA14=59a52881-a989-479d-af46-f275c6370663" +:: Get channel name for the key which was extracted from pkeyhelper.dll -::======================================================================================================================================== +:k_pkeychannel -:: Clean existing KMS cache from the registry / Set port value to 1688 +set k=%1 +set m=[Runtime.InteropServices.Marshal] +set p=%SysPath%\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms -%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f -if %winbuild% GEQ 9200 ( -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" /reg:32 -) -%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3); +set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8); +set d1=%d1% [void]$TypeBuilder.CreateType()::PidGenX('%k%', '%p%', '00000', 0, 0, 0, $f); %m%::Copy($f, $r, 0, 0x04F8); %m%::FreeHGlobal($f); [Text.Encoding]::Unicode.GetString($r, 1016, 128) + +set pkeychannel= +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkeychannel=%%a) +exit /b + +:k_gvlk + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +for %%# in (Volume:GVLK) do ( +call :k_pkey %osSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! +if /i "!pkeychannel!"=="%%#" ( +set key=!pkey! +exit /b ) -if %winbuild% GEQ 9600 ( -%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f -%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f ) -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" -%nul% reg delete "HKLM\%OPPk%\%_oA14%" /f -%nul% reg delete "HKLM\%OPPk%\%_oApp%" /f +exit /b ::======================================================================================================================================== -:: Check WMI and sppsvc Errors +:dk_chkmal -set applist= -net start sppsvc /y %nul% -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" -if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. -if not defined applist ( -set _tserror=1 -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -echo. -echo Error: Not Respoding- !e_wmispp! -echo. +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico +if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS +set pupfound=%pupfound1%%pupfound2% + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +set wucount=0 +for %%# in (wuauserv) do ( +set _corrupt= +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 & set /a wucount+=1) +) +) +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: ) +exit /b ::======================================================================================================================================== -:: Check installed volume products activation ID's +:dk_errorcheck -call :_taskgetids sppwid %slp% windows -call :_taskgetids sppoid %slp% office -call :_taskgetids osppid %ospp% office +set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) ::======================================================================================================================================== -echo. -echo Renewing KMS activation for all installed Volume products +:: Check corrupt services -if not defined sppwid if not defined sppoid if not defined osppid ( -echo. -echo No installed Volume Windows / Office product found -echo. -echo Renewing KMS server -call :_taskgetserv -call :_taskregserv -goto :_skipact +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 +set showfix=1 +call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) ::======================================================================================================================================== -:: Check KMS38 activation +:: Check disabled services -set gpr=0 -set _kms38=0 -if defined sppwid if %winbuild% GEQ 14393 ( -set _path=%slp% -set _actid=%sppwid% -call :_taskgetgrace +set serv_ste= +for %%# in (%_serv%) do ( +sc start %%# %nul% +if !errorlevel! EQU 1058 (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) ) -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set _kms38=1 -call :_taskchkEnterpriseG _kms38 +:: Change disabled services startup type to default + +set serv_csts= +set serv_cste= + +if defined serv_ste ( +for %%# in (%serv_ste%) do ( +if /i %%#==ClipSVC (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "3" /f %nul% & sc config %%# start= demand %nul%) +if /i %%#==wlidsvc sc config %%# start= demand %nul% +if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "2" /f %nul% & sc config %%# start= delayed-auto %nul%) +if /i %%#==KeyIso sc config %%# start= demand %nul% +if /i %%#==LicenseManager sc config %%# start= demand %nul% +if /i %%#==Winmgmt sc config %%# start= auto %nul% +if !errorlevel!==0 ( +if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") +) else ( +if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") +) +) ) -:: Set specific KMS host to Local Host so that global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions. +if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" -if %_kms38% EQU 1 ( -%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" -%nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" +if defined serv_cste ( +set error=1 +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" ) ::======================================================================================================================================== -echo. -if defined sppwid ( -set _path=%slp% -set _actid=%sppwid% -call :_actprod -call :_act act_win -call :_actinfo act_win -) else ( -echo Checking: Volume version of Windows is not installed -) +:: Check if the services are able to run or not +:: Workarounds are added to get correct status and error code because sc query doesn't output correct results in some conditions -if defined sppoid ( -set _path=%slp% -for %%# in (%sppoid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo +set serv_e= +for %%# in (%_serv%) do ( +set errorcode= +set checkerror= + +sc query %%# | find /i "RUNNING" %nul% || ( +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +set errorcode=!errorlevel! +sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) + +sc start %%# %nul% +if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1) +if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!") ) -if defined osppid ( -set _path=%ospp% -for %%# in (%osppid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo +if defined serv_e ( +set error=1 +call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" +echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." +set showfix=1 ) ) -if not defined sppoid if not defined osppid ( -echo. -echo Checking: Volume version of Office is not installed +::======================================================================================================================================== + +:: Various error checks + +if defined safeboot_option ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option%] " %Blue% "[Safe mode found. Run in normal mode.]" ) -:_skipact -::======================================================================================================================================== +for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) +if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( +set error=1 +call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set showfix=1 +call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." +) +) -if defined run_once ( -echo. -echo Deleting Scheduled Task Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% + +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE mode found. Run in normal mode.]" ) -::======================================================================================================================================== -:_taskend +set wpainfo= +set wpaerror= +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) +echo "%wpainfo%" | find /i "Error Found" %nul% && ( +set error=1 +set wpaerror=1 +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" +) || ( +echo Checking WPA Registry Count [%wpainfo%] +) -echo. -echo Exiting -echo ______________________________________________________________________ -if defined _tserror (exit /b 123456789) else (exit /b 0) +if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( +set error=1 +call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) +) -::======================================================================================================================================== -:_act +set osedition=0 +for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" -set errorcode=12345 -set /a act_attempt=0 +:: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional -:_act2 +if not %osedition%==0 ( +if "%osSKU%"=="164" set osedition=ProfessionalEducation +if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) -if %act_attempt% GTR 4 exit /b +if not defined officeact ( +if %osedition%==0 ( +call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" +) else ( -if not [%act_ok%]==[1] ( -call :_taskgetserv -call :_taskregserv +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +set error=1 +set skunotfound=1 +call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) -if not !server_num! GTR %max_servers% ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +set error=1 +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" +) +) +) -if [%1]==[act_win] if %_kms38% EQU 1 ( -set act_ok=1 -exit /b + +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set error_code=%errorlevel% +cmd /c exit /b %error_code% +if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" +if %error_code% NEQ 0 ( +set error=1 +call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] %error_code%" ) -if %_wmic% EQU 1 wmic path !_path! where ID='!_actid!' call Activate %nul% -if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM !_path! where ID=''!_actid!''').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" -call set errorcode=!errorlevel! +set wmifailed= +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% +if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% -if !errorcode! EQU 0 ( -set act_ok=1 -exit /b +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 Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +set showfix=1 +) + + +if not defined officeact ( +if %winbuild% GEQ 10240 ( +%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" +set /a "sum/=3" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) ) -if [%1]==[act_win] if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( -set act_ok=1 -exit /b ) -set act_ok=0 -set /a act_attempt+=1 -goto _act2 +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]" ) -exit /b -:_actprod -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%x in ('"wmic path !_path! where ID='!_actid!' get Name /VALUE" 2^>nul') do call echo Activating: %%x -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%x in ('%psc% "(([WMISEARCHER]'SELECT Name FROM !_path! WHERE ID=''!_actid!''').Get()).Name | %% {echo ('Name='+$_)}" 2^>nul') do call echo Activating: %%x -exit /b +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]" +) -::======================================================================================================================================== -:_actinfo +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. -if [%1]==[act_win] if %_kms38% EQU 1 ( -echo Windows is activated with KMS38 -exit /b +if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +echo Checking Eval WLMS Service [Found] ) - -if %errorcode% EQU 12345 ( -echo Product Activation Failed -echo Unable to test KMS servers due to restricted or no Internet -set _tserror=1 -exit /b ) -if %errorcode% EQU -1073418187 ( -echo Product Activation Failed: 0xC004F035 -if [%1]==[act_win] if %winbuild% LSS 9200 echo Windows 7 cannot be KMS-activated on this computer due to unqualified OEM BIOS -exit /b + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -if %errorcode% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -set _tserror=1 -exit /b + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) -set gpr=0 -set gpr2=0 -call :_taskgetgrace -set /a "gpr2=(%gpr%+1440-1)/1440" -if %errorcode% EQU 0 if %gpr% EQU 0 ( -echo Product Activation succeeded, but Remaining Period failed to increase. -if [%1]==[act_win] if %winbuild% LSS 9200 echo This could be related to the error described in KB4487266 -set _tserror=1 -exit /b +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% +call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +set error=1 ) -set _actpass=1 -if %gpr% EQU 43200 if [%1]==[act_win] if %winbuild% GEQ 9200 set _actpass=0 -if %gpr% EQU 64800 set _actpass=0 -if %gpr% GTR 259200 if [%1]==[act_win] call :_taskchkEnterpriseG _actpass -if %gpr% EQU 259200 set _actpass=0 -if %errorcode% EQU 0 if %_actpass% EQU 0 ( -echo Product Activation Successful -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -exit /b +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]" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +set error=1 +set showfix=1 ) -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 ( -echo Product Activation Failed: 0x!=ExitCode! -) else ( -echo Product Activation Failed + +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 %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 +set error=1 +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set _tserror=1 -exit /b -::======================================================================================================================================== -:_taskgetids +:: This code creates token folder only if it's missing and sets default permission for it -set %1= -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %2 where (Name like '%%%3%%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get ID /VALUE" 2^>nul')" -if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %2 WHERE Name like ''%%%3%%'' and Description like ''%%KMSCLIENT%%'' and PartialProductKey is not NULL').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" -%chkapp% do (if defined %1 (call set "%1=!%1! %%a") else (call set "%1=%%a")) -exit /b +if not defined toerr if not exist "%tokenstore%\" ( +mkdir "%tokenstore%" %nul% +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 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% +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) +) -:_taskgetgrace -set gpr=0 -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('"wmic path !_path! where ID='!_actid!' get GracePeriodRemaining /VALUE" 2^>nul') do call set "gpr=%%#" -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT GracePeriodRemaining FROM !_path! where ID=''!_actid!''').Get()).GracePeriodRemaining | %% {echo ('GracePeriodRemaining='+$_)}" 2^>nul') do call set "gpr=%%#" -exit /b +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set "_notfoundids=Not found" +) +set error=1 +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" +) +) -:_taskchkEnterpriseG -for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) -exit /b +if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +set error=1 +call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" +) -::======================================================================================================================================== -:_taskregserv +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +) +) -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" -%nul% reg add "HKLM\%OPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. + +set permerror= if %winbuild% GEQ 9200 ( -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" -if defined notx86 ( -%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 -%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" /reg:32 +for %%# in ( +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) ) ) -exit /b -::======================================================================================================================================== +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application -:_tasksetserv +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) +) -:: Multi KMS servers integration and servers randomization +if defined permerror ( +set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +) -set srvlist= -set -= -set "srvlist=kms.zhu%-%xiaole.org kms-default.cangs%-%hui.net kms.six%-%yin.com kms.moe%-%club.org kms.cgt%-%soft.com" -set "srvlist=%srvlist% kms.id%-%ina.cn kms.moe%-%yuuko.com xinch%-%eng213618.cn kms.wl%-%rxy.cn kms.ca%-%tqu.com" -set "srvlist=%srvlist% kms.0%-%t.net.cn kms.its%-%jzx.com kms.wx%-%lost.com kms.moe%-%yuuko.top kms.gh%-%pym.com" +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before -set n=1 -for %%a in (%srvlist%) do (set %%a=&set server!n!=%%a&set /a n+=1) -set max_servers=15 -set /a server_num=0 -exit /b +if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( +set showfix=1 +call :dk_color %Blue% "%_fixmsg%" +if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." +) +) -:_taskgetserv +if not defined showfix if defined wpaerror ( +set showfix=1 +call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." +) -if %server_num% geq %max_servers% (set /a server_num+=1&set KMS_IP=222.184.9.98&exit /b) -set /a rand=%Random%%%(15+1-1)+1 -if defined !server%rand%! goto :_taskgetserv -set KMS_IP=!server%rand%! -set !server%rand%!=1 +exit /b -:: Get IPv4 address of KMS server to use for the activation, works even if ICMP echo is disabled. -:: Microsoft and Antivirus's may flag the issue if public KMS server host name is directly used for the activation. +:: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems -set /a server_num+=1 -(for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%a" -if [%KMS_IP%]==[!KMS_IP!] for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 -n -p 1 -q 1 -w 1 %KMS_IP% 2^>nul') do set "KMS_IP=%%#" -if not [%KMS_IP%]==[!KMS_IP!] exit /b -goto :_taskgetserv -) +:wpatest: +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} +$osVersion = [System.Environment]::OSVersion.Version +$minBuildNumber = 14393 +if ($osVersion.Build -ge $minBuildNumber) { + $subkeyHashTable = @{} + foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } + } + for ($i=1; $i -le $count; $i++) { + if (-not $subkeyHashTable.ContainsKey("$i")) { + Write-Output "Total Keys $count. Error Found - $i key does not exist." + $wpaKey.Close() + exit + } + } +} +$wpaKey.GetSubKeyNames() | ForEach-Object { + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } + } +} +$count +$wpaKey.Close() +:wpatest: -:: Ver:1.9 ::======================================================================================================================================== -:_extracttask: -:====================================================================================================================================================== - -:_color +:dk_color if %_NCS% EQU 1 ( -if defined _unattended (echo %~2) else (echo %esc%[%~1%~2%esc%[0m) +echo %esc%[%~1%~2%esc%[0m ) else ( -if defined _unattended (echo %~2) else (call :batcol %~1 "%~2") +%psc% write-host -back '%1' -fore '%2' '%3' ) exit /b -:_color2 +:dk_color2 if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m ) else ( -call :batcol %~1 "%~2" %~3 "%~4" +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' ) exit /b -::======================================= - -:: Colored text with pure batch method -:: Thanks to @dbenham and @jeb -:: stackoverflow.com/a/10407642 +::======================================================================================================================================== -:batcol +:dk_done -pushd %_coltemp% -if not exist "'" ("'" set /p "=.") -setlocal -set "s=%~2" -set "t=%~4" -call :_batcol %1 s %3 t -del /f /q "'" -del /f /q "`.txt" -popd -exit /b +echo: +if %_unattended%==1 timeout /t 2 & exit /b -:_batcol +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 %%#)) +) -setlocal EnableDelayedExpansion -set "s=!%~2!" -set "t=!%~4!" -for /f delims^=^ eol^= %%i in ("!s!") do ( - if "!" equ "" setlocal DisableDelayedExpansion - >`.txt (echo %%i\..\') - findstr /a:%~1 /f:`.txt "." - `.txt (echo %%i\..\') - findstr /a:%~3 /f:`.txt "." - =! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%C | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) +) +) +) +) +) exit /b + +::======================================================================================================================================== + +:: 1st column = Activation ID +:: 2nd column = GVLK / Free Office products keys +:: 3rd column = In case of Windows, its SKU ID. In case of Office, its Office version +:: 4th column = Edition ID +:: 5th column = In case of Windows, its Build Branch name in case same Edition ID is used in different OS versions with different key (For reference only) +:: In case of Office, its either a key type if its a free Office product or Retail product names that needs to be converted to the Edition ID mentioned in 4th column +:: In Office 2010, one highest VL edition from each primary product ID is selected, that's why Visio Prem key is mentioned but not for Visio Pro, Std +:: Separator = "_" + +:ksdata + +set f= +for %%# in ( +:: Windows 10/11 +73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43___4_Enterprise +e272e3e2-732f-4c65-a8f0-484747d0d947_DPH2V-TTNVB-4X9Q3-TJR4H-KH%f%JW4__27_EnterpriseN +2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX__48_Professional +a80b5abf-76ad-428b-b05d-a47d2dffeebf_MH37W-N47XK-V7XM9-C7227-GC%f%QG9__49_ProfessionalN +7b9e1751-a8da-4f75-9560-5fadfe3d8e38_3KHY7-WNT83-DGQKR-F7HPR-84%f%4BM__98_CoreN +a9107544-f4a0-4053-a96a-1479abdef912_PVMJN-6DFY6-9CCP6-7BKTT-D3%f%WVR__99_CoreCountrySpecific +cd918a57-a41b-4c82-8dce-1a538e221a83_7HNRX-D7KGG-3K4RQ-4WPJ4-YT%f%DFH_100_CoreSingleLanguage +58e97c99-f377-4ef1-81d5-4ad5522b5fd8_TX9XD-98N7V-6WMQ6-BX7FG-H8%f%Q99_101_Core +e0c42288-980c-4788-a014-c080d2e1926e_NW6C2-QMPVW-D7KKK-3GKT6-VC%f%FB2_121_Education +3c102355-d027-42c6-ad23-2e7ef8a02585_2WH4N-8QGBV-H22JP-CT43Q-MD%f%WWJ_122_EducationN +32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_125_EnterpriseS_RS5,VB,Ge +2d5a5a60-3040-48bf-beb0-fcd770c20ce0_DCPHK-NFMTC-H88MJ-PFHPY-QJ%f%4BJ_125_EnterpriseS_RS1 +7b51a46c-0c04-4e8f-9af4-8496cca90d5e_WNMTR-4C88C-JK8YV-HQ7T2-76%f%DF9_125_EnterpriseS_TH1 +7103a333-b8c8-49cc-93ce-d37c09687f92_92NFX-8DJQP-P6BBQ-THF9C-7C%f%G2H_126_EnterpriseSN_RS5,VB,Ge +9f776d83-7156-45b2-8a5c-359b9c9f22a3_QFFDN-GRT3P-VKWWX-X7T3R-8B%f%639_126_EnterpriseSN_RS1 +87b838b7-41b6-4590-8318-5797951d8529_2F77B-TNFGY-69QQF-B8YKP-D6%f%9TJ_126_EnterpriseSN_TH1 +82bbc092-bc50-4e16-8e18-b74fc486aec3_NRG8B-VKK3Q-CXVCJ-9G2XF-6Q%f%84J_161_ProfessionalWorkstation +4b1571d3-bafb-4b40-8087-a961be2caf65_9FNHH-K3HBT-3W4TD-6383H-6X%f%YWF_162_ProfessionalWorkstationN +3f1afc82-f8ac-4f6c-8005-1d233e606eee_6TP4R-GNPTD-KYYHQ-7B7DP-J4%f%47Y_164_ProfessionalEducation +5300b18c-2e33-4dc2-8291-47ffcec746dd_YVWGF-BXNMC-HTQYQ-CPQ99-66%f%QFC_165_ProfessionalEducationN +e0b2d383-d112-413f-8a80-97f373a5820c_YYVX9-NTFWV-6MDM3-9PT4T-4M%f%68B_171_EnterpriseG +e38454fb-41a4-4f59-a5dc-25080e354730_44RPN-FTY23-9VTTB-MP9BX-T8%f%4FV_172_EnterpriseGN +ec868e65-fadf-4759-b23e-93fe37f2cc29_CPWHC-NT2C7-VYW78-DHDB2-PG%f%3GK_175_ServerRdsh_RS5 +e4db50ea-bda1-4566-b047-0ca50abc6f07_7NBT4-WGBQX-MP4H7-QXFF8-YP%f%3KX_175_ServerRdsh_RS3 +0df4f814-3f57-4b8b-9a9d-fddadcd69fac_NBTWJ-3DR69-3C4V8-C26MC-GQ%f%9M6_183_CloudE +59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_191_IoTEnterpriseS_VB,NI +d30136fc-cb4b-416e-a23d-87207abc44a9_6XN7V-PCBDC-BDBRH-8DQY7-G6%f%R44_202_CloudEditionN +ca7df2e3-5ea0-47b8-9ac1-b1be4d8edd69_37D7F-N49CB-WQR8W-TBJ73-FM%f%8RX_203_CloudEdition +:: Windows 2016/19/22/25 LTSC/SAC +7dc26449-db21-4e09-ba37-28f2958506a6_TVRH6-WHNXV-R9WG3-9XRFY-MY%f%832___7_ServerStandard_Ge +9bd77860-9b31-4b7b-96ad-2564017315bf_VDYBN-27WPP-V4HQT-9VMD4-VM%f%K7H___7_ServerStandard_FE +de32eafd-aaee-4662-9444-c1befb41bde2_N69G4-B89J2-4G8F4-WWYCC-J4%f%64C___7_ServerStandard_RS5 +8c1c5410-9f39-4805-8c9d-63a07706358f_WC2BQ-8NRM3-FDDYY-2BFGV-KH%f%KQY___7_ServerStandard_RS1 +c052f164-cdf6-409a-a0cb-853ba0f0f55a_D764K-2NDRG-47T6Q-P8T8W-YP%f%6DF___8_ServerDatacenter_Ge +ef6cfc9f-8c5d-44ac-9aad-de6a2ea0ae03_WX4NM-KYWYW-QJJR4-XV3QB-6V%f%M33___8_ServerDatacenter_FE +34e1ae55-27f8-4950-8877-7a03be5fb181_WMDGN-G9PQG-XVVXX-R3X43-63%f%DFG___8_ServerDatacenter_RS5 +21c56779-b449-4d20-adfc-eece0e1ad74b_CB7KF-BWN84-R7R2Y-793K2-8X%f%DDG___8_ServerDatacenter_RS1 +034d3cbb-5d4b-4245-b3f8-f84571314078_WVDHN-86M7X-466P6-VHXV7-YY%f%726__50_ServerSolution_RS5 +2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283_JCKRF-N37P4-C2D82-9YXRT-4M%f%63B__50_ServerSolution_RS1 +7b4433f4-b1e7-4788-895a-c45378d38253_QN4C6-GBJD2-FB422-GHWJK-GJ%f%G2R_110_ServerCloudStorage +8de8eb62-bbe0-40ac-ac17-f75595071ea3_GRFBW-QNDC4-6QBHG-CCK3B-2P%f%R88_120_ServerARM64_RS5 +43d9af6e-5e86-4be8-a797-d072a046896c_K9FYF-G6NCK-73M32-XMVPY-F9%f%DRR_120_ServerARM64_RS4 +39e69c41-42b4-4a0a-abad-8e3c10a797cc_QFND9-D3Y9C-J3KKY-6RPVP-2D%f%PYV_145_ServerDatacenterACor_FE +90c362e5-0da1-4bfd-b53b-b87d309ade43_6NMRW-2C8FM-D24W7-TQWMY-CW%f%H2D_145_ServerDatacenterACor_RS5 +e49c08e7-da82-42f8-bde2-b570fbcae76c_2HXDN-KRXHB-GPYC7-YCKFJ-7F%f%VDG_145_ServerDatacenterACor_RS3 +f5e9429c-f50b-4b98-b15c-ef92eb5cff39_67KN8-4FYJW-2487Q-MQ2J7-4C%f%4RG_146_ServerStandardACor_FE +73e3957c-fc0c-400d-9184-5f7b6f2eb409_N2KJX-J94YW-TQVFB-DG9YT-72%f%4CC_146_ServerStandardACor_RS5 +61c5ef22-f14f-4553-a824-c4b31e84b100_PTXN8-JFHJM-4WC78-MPCBR-9W%f%4KR_146_ServerStandardACor_RS3 +45b5aff2-60a0-42f2-bc4b-ec6e5f7b527e_FCNV3-279Q9-BQB46-FTKXX-9H%f%PRH_168_ServerAzureCor_Ge +8c8f0ad3-9a43-4e05-b840-93b8d1475cbc_6N379-GGTMK-23C6M-XVVTC-CK%f%FRQ_168_ServerAzureCor_FE +a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_ServerAzureCor_RS5 +3dbf341b-5f6c-4fa7-b936-699dce9e263f_VP34G-4NPPG-79JTQ-864T4-R3%f%MQX_168_ServerAzureCor_RS1 +c2e946d1-cfa2-4523-8c87-30bc696ee584_XGN3F-F394H-FD2MY-PP6FD-8M%f%CRC_407_ServerTurbine_Ge +19b5e0fb-4431-46bc-bac1-2f1873e4ae73_NTBV8-9K7Q8-V27C6-M2BTV-KH%f%MXV_407_ServerTurbine_RS5 +:: Windows 8.1 +81671aaf-79d1-4eb1-b004-8cbbe173afea_MHF9N-XY6XB-WVXMC-BTDCT-MK%f%KG7___4_Enterprise +113e705c-fa49-48a4-beea-7dd879b46b14_TT4HM-HN7YT-62K67-RGRQJ-JF%f%FXW__27_EnterpriseN +c06b6981-d7fd-4a35-b7b4-054742b7af67_GCRJD-8NW9H-F2CDX-CCM8D-9D%f%6T9__48_Professional +7476d79f-8e48-49b4-ab63-4d0b813a16e4_HMCNV-VVBFX-7HMBH-CTY9B-B4%f%FXY__49_ProfessionalN +f7e88590-dfc7-4c78-bccb-6f3865b99d1a_VHXM3-NR6FT-RY6RT-CK882-KW%f%2CJ__86_EmbeddedIndustryA +0ab82d54-47f4-4acb-818c-cc5bf0ecb649_NMMPB-38DD4-R2823-62W8D-VX%f%KJB__89_EmbeddedIndustry +cd4e2d9f-5059-4a50-a92d-05d5bb1267c7_FNFKF-PWTVT-9RC8H-32HB2-JB%f%34X__91_EmbeddedIndustryE +ffee456a-cd87-4390-8e07-16146c672fd0_XYTND-K6QKT-K2MRH-66RTM-43%f%JKP__97_CoreARM +78558a64-dc19-43fe-a0d0-8075b2a370a3_7B9N3-D94CG-YTVHR-QBPX3-RJ%f%P64__98_CoreN +db78b74f-ef1c-4892-abfe-1e66b8231df6_NCTT7-2RGK8-WMHRF-RY7YQ-JT%f%XG3__99_CoreCountrySpecific +c72c6a1d-f252-4e7e-bdd1-3fca342acb35_BB6NG-PQ82V-VRDPW-8XVD2-V8%f%P66_100_CoreSingleLanguage +fe1c3238-432a-43a1-8e25-97e7d1ef10f3_M9Q9P-WNJJT-6PXPY-DWX8H-6X%f%WKK_101_Core +096ce63d-4fac-48a9-82a9-61ae9e800e5f_789NJ-TQK6T-6XTH8-J39CJ-J8%f%D3P_103_ProfessionalWMC +e9942b32-2e55-4197-b0bd-5ff58cba8860_3PY8R-QHNP9-W7XQD-G6DPH-3J%f%2C9_111_CoreConnected +c6ddecd6-2354-4c19-909b-306a3058484e_Q6HTR-N24GM-PMJFP-69CD8-2G%f%XKR_113_CoreConnectedN +b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c_KF37N-VDV38-GRRTV-XH8X6-6F%f%3BB_115_CoreConnectedSingleLanguage +ba998212-460a-44db-bfb5-71bf09d1c68b_R962J-37N87-9VVK2-WJ74P-XT%f%MHR_116_CoreConnectedCountrySpecific +e58d87b5-8126-4580-80fb-861b22f79296_MX3RK-9HNGX-K3QKC-6PJ3F-W8%f%D7B_112_ProfessionalStudent +cab491c7-a918-4f60-b502-dab75e334f40_TNFGH-2R6PB-8XM3K-QYHX2-J4%f%296_114_ProfessionalStudentN +:: Windows Server 2012 R2 +b3ca044e-a358-4d68-9883-aaa2941aca99_D2N9P-3P6X9-2R39C-7RTCD-MD%f%VJX___7_ServerStandard +00091344-1ea4-4f37-b789-01750ba6988c_W3GGN-FT8W3-Y4M27-J84CP-Q3%f%VJ9___8_ServerDatacenter +21db6ba4-9a7b-4a14-9e29-64a60c59301d_KNC87-3J2TX-XB4WP-VCPJV-M4%f%FWM__50_ServerSolution +b743a2be-68d4-4dd3-af32-92425b7bb623_3NPTF-33KPT-GGBPR-YX76B-39%f%KDD_110_ServerCloudStorage +:: Windows 8 +458e1bec-837a-45f6-b9d5-925ed5d299de_32JNW-9KQ84-P47T8-D8GGY-CW%f%CK7___4_Enterprise +e14997e7-800a-4cf7-ad10-de4b45b578db_JMNMF-RHW7P-DMY6X-RF3DR-X2%f%BQT__27_EnterpriseN +a98bcd6d-5343-4603-8afe-5908e4611112_NG4HW-VH26C-733KW-K6F98-J8%f%CK4__48_Professional +ebf245c1-29a8-4daf-9cb1-38dfc608a8c8_XCVCF-2NXM9-723PB-MHCB7-2R%f%YQQ__49_ProfessionalN +10018baf-ce21-4060-80bd-47fe74ed4dab_RYXVT-BNQG7-VD29F-DBMRY-HT%f%73M__89_EmbeddedIndustry +18db1848-12e0-4167-b9d7-da7fcda507db_NKB3R-R2F8T-3XCDP-7Q2KW-XW%f%YQ2__91_EmbeddedIndustryE +af35d7b7-5035-4b63-8972-f0b747b9f4dc_DXHJF-N9KQX-MFPVR-GHGQK-Y7%f%RKV__97_CoreARM +197390a0-65f6-4a95-bdc4-55d58a3b0253_8N2M2-HWPGY-7PGT9-HGDD8-GV%f%GGY__98_CoreN +9d5584a2-2d85-419a-982c-a00888bb9ddf_4K36P-JN4VD-GDC6V-KDT89-DY%f%FKP__99_CoreCountrySpecific +8860fcd4-a77b-4a20-9045-a150ff11d609_2WN2H-YGCQR-KFX6K-CD6TF-84%f%YXQ_100_CoreSingleLanguage +c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60_BN3D2-R7TKB-3YPBD-8DRP2-27%f%GG4_101_Core +a00018a3-f20f-4632-bf7c-8daa5351c914_GNBB8-YVD74-QJHX6-27H4K-8Q%f%HDG_103_ProfessionalWMC +:: Windows Server 2012 +f0f5ec41-0d55-4732-af02-440a44a3cf0f_XC9B7-NBPP2-83J2H-RHMBY-92%f%BT4___7_ServerStandard +d3643d60-0c42-412d-a7d6-52e6635327f6_48HP8-DN98B-MYWDG-T2DCC-8W%f%83P___8_ServerDatacenter +8f365ba6-c1b9-4223-98fc-282a0756a3ed_HTDQM-NBMMG-KGYDT-2DTKT-J2%f%MPV__50_ServerSolution +7d5486c7-e120-4771-b7f1-7b56c6d3170c_HM7DN-YVMH3-46JC3-XYTG7-CY%f%QJJ__76_ServerMultiPointStandard +95fd1c83-7df5-494a-be8b-1300e1c9d1cd_XNH6W-2V9GX-RGJ4K-Y8X6F-QG%f%J2G__77_ServerMultiPointPremium +:: Windows 7 +ae2ee509-1b34-41c0-acb7-6d4650168915_33PXH-7Y6KF-2VJC9-XBBR8-HV%f%THH___4_Enterprise +1cb6d605-11b3-4e14-bb30-da91c8e3983a_YDRBP-3D83W-TY26F-D46B2-XC%f%KRJ__27_EnterpriseN +b92e9980-b9d5-4821-9c94-140f632f6312_FJ82H-XT6CR-J8D7P-XQJJ2-GP%f%DD4__48_Professional +54a09a0d-d57b-4c10-8b69-a842d6590ad5_MRPKT-YTG23-K7D7T-X2JMM-QY%f%7MG__49_ProfessionalN +db537896-376f-48ae-a492-53d0547773d0_YBYF6-BHCR3-JPKRB-CDW7B-F9%f%BK4__65_Embedded_POSReady +e1a8296a-db37-44d1-8cce-7bc961d59c54_XGY72-BRBBT-FF8MH-2GG8H-W7%f%KCW__65_Embedded_Standard +aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395_73KQT-CD9G6-K7TQG-66MRP-CQ%f%22C__65_Embedded_ThinPC +5a041529-fef8-4d07-b06f-b59b573b32d2_W82YF-2Q76Y-63HXB-FGJG9-GF%f%7QX__69_ProfessionalE +46bbed08-9c7b-48fc-a614-95250573f4ea_C29WB-22CC8-VJ326-GHFJW-H9%f%DH4__70_EnterpriseE +:: Windows Server 2008 R2 +68531fb9-5511-4989-97be-d11a0f55633f_YC6KT-GKW9T-YTKYR-T4X34-R7%f%VHC___7_ServerStandard +7482e61b-c589-4b7f-8ecc-46d455ac3b87_74YFP-3QFB3-KQT8W-PMXWJ-7M%f%648___8_ServerDatacenter +620e2b3d-09e7-42fd-802a-17a13652fe7a_489J6-VHDMP-X63PK-3K798-CP%f%X3Y__10_ServerEnterprise +7482e61b-c589-4b7f-8ecc-46d455ac3b87_74YFP-3QFB3-KQT8W-PMXWJ-7M%f%648__12_ServerDatacenterCore +68531fb9-5511-4989-97be-d11a0f55633f_YC6KT-GKW9T-YTKYR-T4X34-R7%f%VHC__13_ServerStandardCore +620e2b3d-09e7-42fd-802a-17a13652fe7a_489J6-VHDMP-X63PK-3K798-CP%f%X3Y__14_ServerEnterpriseCore +8a26851c-1c7e-48d3-a687-fbca9b9ac16b_GT63C-RJFQ3-4GMB6-BRFB9-CB%f%83V__15_ServerEnterpriseIA64 +a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_ServerWeb +cda18cf3-c196-46ad-b289-60c072869994_TT8MH-CG224-D3D7Q-498W2-9Q%f%CTX__18_ServerHPC +a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__29_ServerWebCore +f772515c-0e87-48d5-a676-e6962c3e1195_736RG-XDKJK-V34PF-BHK87-J6%f%X3K__56_ServerEmbeddedSolution +::======================================================================================================================================== +:: Office 2010 +8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL +cee5d470-6e3b-4fcc-8c2b-d17428568a9f_H62QG-HXVKF-PP4HP-66KMR-CW%f%9BM__14_ExcelVL +8947d0b8-c33b-43e1-8c56-9b674c052832_QYYW6-QP4CB-MBV6G-HYMCJ-4T%f%3J4__14_GrooveVL +ca6b6639-4ad6-40ae-a575-14dee07f6430_K96W8-67RPQ-62T9Y-J8FQJ-BT%f%37T__14_InfoPathVL +09ed9640-f020-400a-acd8-d7d867dfd9c2_YBJTT-JG6MD-V9Q7P-DBKXJ-38%f%W9R__14_MondoVL +ab586f5c-5256-4632-962f-fefd8b49e6f4_Q4Y4M-RHWJM-PY37F-MTKWH-D3%f%XHX__14_OneNoteVL +ecb7c192-73ab-4ded-acf4-2399b095d0cc_7YDC2-CWM8M-RRTJC-8MDVC-X3%f%DWQ__14_OutlookVL +45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a_RC8FX-88JRY-3PF7C-X8P67-P4%f%VTT__14_PowerPointVL +df133ff7-bf14-4f95-afe3-7b48e7e331ef_YGX6F-PGV49-PGW3J-9BTGG-VH%f%KC6__14_ProjectProVL +5dc7bf61-5ec9-4996-9ccb-df806a2d0efe_4HP3K-88W3F-W2K3D-6677X-F9%f%PGB__14_ProjectStdVL +6f327760-8c5c-417c-9b61-836a98287e0c_VYBBJ-TRJPB-QFQRF-QFT4D-H3%f%GVB__14_ProPlusVL +b50c4f75-599b-43e8-8dcd-1081a7967241_BFK7F-9MYHM-V68C7-DRQ66-83%f%YTP__14_PublisherVL +ea509e87-07a1-4a45-9edc-eba5a39f36af_D6QFG-VBYP2-XQHM7-J97RH-VV%f%RCK__14_SmallBusBasicsVL +9da2a678-fb6b-4e67-ab84-60dd6a9c819a_V7QKV-4XVVR-XYV4D-F7DFM-8R%f%6BM__14_StandardVL +92236105-bb67-494f-94c7-7f7a607929bd_D9DWC-HPYVV-JGF4P-BTWQB-WX%f%8BJ__14_VisioSIVL +2d0882e7-a4e7-423b-8ccc-70d91e0158b1_HVHB3-C6FV7-KQX9W-YQG79-CR%f%Y7T__14_WordVL +:: Office 2013 +6ee7622c-18d8-4005-9fb7-92db644a279b_NG2JY-H4JBT-HQXYP-78QH9-4J%f%M2D__15_AccessVolume_-AccessRetail- +f7461d52-7c2b-43b2-8744-ea958e0bd09a_VGPNG-Y7HQW-9RHP7-TKPV3-BG%f%7GB__15_ExcelVolume_-ExcelRetail- +fb4875ec-0c6b-450f-b82b-ab57d8d1677f_H7R7V-WPNXQ-WCYYC-76BGV-VT%f%7GH__15_GrooveVolume_-GrooveRetail- +a30b8040-d68a-423f-b0b5-9ce292ea5a8f_DKT8B-N7VXH-D963P-Q4PHY-F8%f%894__15_InfoPathVolume_-InfoPathRetail- +9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__15_LyncAcademicRetail_[PrepidBypass] +ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_N42BF-CBY9F-W2C7R-X397X-DY%f%FQW__15_LyncEntryRetail_[PrepidBypass] +1b9f11e3-c85c-4e1b-bb29-879ad2c909e3_2MG3G-3BNTT-3MFW9-KDQW3-TC%f%K7R__15_LyncVolume_-LyncRetail- +1dc00701-03af-4680-b2af-007ffc758a1f_CWH2Y-NPYJW-3C7HD-BJQWB-G2%f%8JJ__15_MondoRetail +dc981c6b-fc8e-420f-aa43-f8f33e5c0923_42QTK-RN8M7-J3C4G-BBGYM-88%f%CYV__15_MondoVolume_-O365BusinessRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +3391e125-f6e4-4b1e-899c-a25e6092d40d_4TGWV-6N9P6-G2H8Y-2HWKB-B4%f%FF4__15_OneNoteFreeRetail_[Bypass] +efe1f3e6-aea2-4144-a208-32aa872b6545_TGN6P-8MMBC-37P2F-XHXXK-P3%f%4VW__15_OneNoteVolume_-OneNoteRetail- +771c3afa-50c5-443f-b151-ff2546d863a0_QPN8Q-BJBTJ-334K3-93TGY-2P%f%MBT__15_OutlookVolume_-OutlookRetail- +8c762649-97d1-4953-ad27-b7e2c25b972e_4NT99-8RJFH-Q2VDH-KYG2C-4R%f%D4F__15_PowerPointVolume_-PowerPointRetail- +4a5d124a-e620-44ba-b6ff-658961b33b9a_FN8TT-7WMH6-2D4X9-M337T-23%f%42K__15_ProjectProVolume_-ProjectProRetail- +427a28d1-d17c-4abf-b717-32c780ba6f07_6NTH3-CW976-3G3Y2-JK3TX-8Q%f%HTT__15_ProjectStdVolume_-ProjectStdRetail- +b322da9c-a2e2-4058-9e4e-f59a6970bd69_YC7DK-G2NP3-2QQC3-J6H88-GV%f%GXT__15_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- +00c79ff1-6850-443d-bf61-71cde0de305f_PN2WF-29XG2-T9HJ7-JQPJR-FC%f%XK4__15_PublisherVolume_-PublisherRetail- +ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W__15_SPDRetail_[PrepidBypass] +b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- +e13ac10e-75d0-4aff-a0cd-764982cf541c_C2FG9-N6J68-H8BTJ-BW3QX-RM%f%3B3__15_VisioProVolume_-VisioProRetail- +ac4efaf0-f81f-4f61-bdf7-ea32b02ab117_J484Y-4NKBF-W2HMG-DBMJC-PG%f%WR7__15_VisioStdVolume_-VisioStdRetail- +d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVolume_-WordRetail- +:: Office 2016 +9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV__16_AccessRuntimeRetail_[PrepidBypass] +67c0fc0c-deba-401b-bf8b-9c8ad8395804_GNH9Y-D2J4T-FJHGG-QRVH7-QP%f%FDW__16_AccessVolume_-AccessRetail- +c3e65d36-141f-4d2f-a303-a842ee756a29_9C2PK-NWTVB-JMPW8-BFT28-7F%f%TBF__16_ExcelVolume_-ExcelRetail- +e914ea6e-a5fa-4439-a394-a9bb3293ca09_DMTCJ-KNRKX-26982-JYCKT-P7%f%KB6__16_MondoRetail +9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM__16_OneNoteFreeRetail_[Bypass] +d8cace59-33d2-4ac7-9b1b-9b72339c51c8_DR92N-9HTF2-97XKM-XW2WJ-XW%f%3J6__16_OneNoteVolume_-OneNoteRetail-OneNote2021Retail- +ec9d9265-9d1e-4ed0-838a-cdc20f2551a1_R69KK-NTPKF-7M3Q4-QYBHW-6M%f%T9B__16_OutlookVolume_-OutlookRetail- +d70b1bba-b893-4544-96e2-b7a318091c33_J7MQP-HNJ4Y-WJ7YM-PFYGF-BY%f%6C6__16_PowerPointVolume_-PowerPointRetail- +4f414197-0fc2-4c01-b68a-86cbb9ac254c_YG9NW-3K39V-2T3HJ-93F3Q-G8%f%3KT__16_ProjectProVolume_-ProjectProRetail- +829b8110-0e6f-4349-bca4-42803577788d_WGT24-HCNMF-FQ7XH-6M8K7-DR%f%TW9__16_ProjectProXVolume +da7ddabc-3fbe-4447-9e01-6ab7440b4cd4_GNFHQ-F6YQM-KQDGJ-327XX-KQ%f%BVC__16_ProjectStdVolume_-ProjectStdRetail- +cbbaca45-556a-4416-ad03-bda598eaa7c8_D8NRQ-JTYM3-7J2DX-646CT-68%f%36M__16_ProjectStdXVolume +d450596f-894d-49e0-966a-fd39ed4c4c64_XQNVK-8JYDB-WJ9W3-YJ8YR-WF%f%G99__16_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- +041a06cb-c5b8-4772-809f-416d03d16654_F47MM-N3XJP-TQXJ9-BP99D-8K%f%837__16_PublisherVolume_-PublisherRetail- +9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__16_SkypeServiceBypassRetail_[PrepidBypass] +971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY__16_SkypeforBusinessEntryRetail_[PrepidBypass] +83e04ee1-fa8d-436d-8994-d31a862cab77_869NQ-FJ69K-466HW-QYCP2-DD%f%BV6__16_SkypeforBusinessVolume_-SkypeforBusinessRetail- +dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- +6bf301c1-b94a-43e9-ba31-d494598c47fb_PD3PC-RHNGV-FXJ29-8JK7D-RJ%f%RJK__16_VisioProVolume_-VisioProRetail- +b234abe3-0857-4f9c-b05a-4dc314f85557_69WXN-MBYV6-22PQG-3WGHK-RM%f%6XC__16_VisioProXVolume +aa2a7821-1827-4c2c-8f1d-4513a34dda97_7WHWN-4T7MP-G96JF-G33KR-W8%f%GF4__16_VisioStdVolume_-VisioStdRetail- +361fe620-64f4-41b5-ba77-84f8e079b1f7_NY48V-PPYYH-3F4PX-XJRKJ-W4%f%423__16_VisioStdXVolume +bb11badf-d8aa-470e-9311-20eaf80fe5cc_WXY84-JN2Q9-RBCCQ-3Q3J3-3P%f%FJ6__16_WordVolume_-WordRetail- +:: Office 2019 +22e6b96c-1011-4cd5-8b35-3c8fb6366b86_FGQNJ-JWJCG-7Q8MG-RMRGJ-9T%f%QVF__16_AccessRuntime2019Retail_[PrepidBypass] +9e9bceeb-e736-4f26-88de-763f87dcc485_9N9PT-27V4Y-VJ2PD-YXFMF-YT%f%FQT__16_Access2019Volume_-Access2019Retail- +237854e9-79fc-4497-a0c1-a70969691c6b_TMJWT-YYNMB-3BKTF-644FC-RV%f%XBD__16_Excel2019Volume_-Excel2019Retail- +c8f8a301-19f5-4132-96ce-2de9d4adbd33_7HD7K-N4PVK-BHBCQ-YWQRW-XW%f%4VK__16_Outlook2019Volume_-Outlook2019Retail- +3131fd61-5e4f-4308-8d6d-62be1987c92c_RRNCX-C64HY-W2MM7-MCH9G-TJ%f%HMQ__16_PowerPoint2019Volume_-PowerPoint2019Retail- +2ca2bf3f-949e-446a-82c7-e25a15ec78c4_B4NPR-3FKK7-T2MBV-FRQ4W-PK%f%D2B__16_ProjectPro2019Volume_-ProjectPro2019Retail- +1777f0e3-7392-4198-97ea-8ae4de6f6381_C4F7P-NCP8C-6CQPT-MQHV9-JX%f%D2M__16_ProjectStd2019Volume_-ProjectStd2019Retail- +85dd8b5f-eaa4-4af3-a628-cce9e77c9a03_NMMKJ-6RK4F-KMJVX-8D9MJ-6M%f%WKP__16_ProPlus2019Volume_-ProPlus2019Retail-Professional2019Retail- +9d3e4cca-e172-46f1-a2f4-1d2107051444_G2KWX-3NW6P-PY93R-JXK2T-C9%f%Y9V__16_Publisher2019Volume_-Publisher2019Retail- +734c6c6e-b0ba-4298-a891-671772b2bd1b_NCJ33-JHBBY-HTK98-MYCV8-HM%f%KHJ__16_SkypeforBusiness2019Volume_-SkypeforBusiness2019Retail- +f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK__16_SkypeforBusinessEntry2019Retail_[PrepidBypass] +6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudent2019Retail-Personal2019Retail- +5b5cf08f-b81a-431d-b080-3450d8620565_9BGNQ-K37YR-RQHF2-38RQ3-7V%f%CBB__16_VisioPro2019Volume_-VisioPro2019Retail- +e06d7df3-aad0-419d-8dfb-0ac37e2bdf39_7TQNQ-K3YQQ-3PFH7-CCPPM-X4%f%VQ2__16_VisioStd2019Volume_-VisioStd2019Retail- +059834fe-a8ea-4bff-b67b-4d006b5447d3_PBX3G-NWMT6-Q7XBW-PYJGG-WX%f%D33__16_Word2019Volume_-Word2019Retail- +:: Office 2021 +1fe429d8-3fa7-4a39-b6f0-03dded42fe14_WM8YG-YNGDD-4JHDC-PG3F4-FC%f%4T4__16_Access2021Volume_-Access2021Retail- +ea71effc-69f1-4925-9991-2f5e319bbc24_NWG3X-87C9K-TC7YY-BC2G7-G6%f%RVC__16_Excel2021Volume_-Excel2021Retail- +a5799e4c-f83c-4c6e-9516-dfe9b696150b_C9FM6-3N72F-HFJXB-TM3V9-T8%f%6R9__16_Outlook2021Volume_-Outlook2021Retail- +6e166cc3-495d-438a-89e7-d7c9e6fd4dea_TY7XF-NFRBR-KJ44C-G83KF-GX%f%27K__16_PowerPoint2021Volume_-PowerPoint2021Retail- +76881159-155c-43e0-9db7-2d70a9a3a4ca_FTNWT-C6WBT-8HMGF-K9PRX-QV%f%9H8__16_ProjectPro2021Volume_-ProjectPro2021Retail- +6dd72704-f752-4b71-94c7-11cec6bfc355_J2JDC-NJCYY-9RGQ4-YXWMH-T3%f%D4T__16_ProjectStd2021Volume_-ProjectStd2021Retail- +fbdb3e18-a8ef-4fb3-9183-dffd60bd0984_FXYTK-NJJ8C-GB6DW-3DYQT-6F%f%7TH__16_ProPlus2021Volume_-ProPlus2021Retail-Professional2021Retail- +aa66521f-2370-4ad8-a2bb-c095e3e4338f_2MW9D-N4BXM-9VBPG-Q7W6M-KF%f%BGQ__16_Publisher2021Volume_-Publisher2021Retail- +1f32a9af-1274-48bd-ba1e-1ab7508a23e8_HWCXN-K3WBT-WJBKY-R8BD9-XK%f%29P__16_SkypeforBusiness2021Volume_-SkypeforBusiness2021Retail- +080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3_KDX7X-BNVR8-TXXGX-4Q7Y8-78%f%VT3__16_Standard2021Volume_-Standard2021Retail-HomeBusiness2021Retail-HomeStudent2021Retail-Personal2021Retail- +fb61ac9a-1688-45d2-8f6b-0674dbffa33c_KNH8D-FGHT4-T8RK3-CTDYJ-K2%f%HT4__16_VisioPro2021Volume_-VisioPro2021Retail- +72fce797-1884-48dd-a860-b2f6a5efd3ca_MJVNY-BYWPY-CWV6J-2RKRT-4M%f%8QG__16_VisioStd2021Volume_-VisioStd2021Retail- +abe28aea-625a-43b1-8e30-225eb8fbd9e5_TN8H9-M34D3-Y64V9-TR72V-X7%f%9KV__16_Word2021Volume_-Word2021Retail- +:: Office 2024 +fceda083-1203-402a-8ec4-3d7ed9f3648c_2TDPW-NDQ7G-FMG99-DXQ7M-TX%f%3T2__16_ProPlus2024Volume-Preview +aaea0dc8-78e1-4343-9f25-b69b83dd1bce_D9GTG-NP7DV-T6JP3-B6B62-JB%f%89R__16_ProjectPro2024Volume-Preview +4ab4d849-aabc-43fb-87ee-3aed02518891_YW66X-NH62M-G6YFP-B7KCT-WX%f%GKQ__16_VisioPro2024Volume-Preview +72e9faa7-ead1-4f3d-9f6e-3abc090a81d7_82FTR-NCHR7-W3944-MGRHM-JM%f%CWD__16_Access2024Volume_-Access2024Retail- +cbbba2c3-0ff5-4558-846a-043ef9d78559_F4DYN-89BP2-WQTWJ-GR8YC-CK%f%GJG__16_Excel2024Volume_-Excel2024Retail- +bef3152a-8a04-40f2-a065-340c3f23516d_D2F8D-N3Q3B-J28PV-X27HD-RJ%f%WB9__16_Outlook2024Volume_-Outlook2024Retail- +b63626a4-5f05-4ced-9639-31ba730a127e_CW94N-K6GJH-9CTXY-MG2VC-FY%f%CWP__16_PowerPoint2024Volume_-PowerPoint2024Retail- +f510af75-8ab7-4426-a236-1bfb95c34ff8_NBBBB-BBBBB-BBBBB-BBBH4-GX%f%3R4__16_ProjectPro2024Volume_-ProjectPro2024Retail- +9f144f27-2ac5-40b9-899d-898c2b8b4f81_PD3TT-NTHQQ-VC7CY-MFXK3-G8%f%7F8__16_ProjectStd2024Volume_-ProjectStd2024Retail- +8d368fc1-9470-4be2-8d66-90e836cbb051_NBBBB-BBBBB-BBBBB-BBBJD-VX%f%RPM__16_ProPlus2024Volume_-ProPlus2024Retail- +0002290a-2091-4324-9e53-3cfe28884cde_4NKHF-9HBQF-Q3B6C-7YV34-F6%f%4P3__16_SkypeforBusiness2024Volume +bbac904f-6a7e-418a-bb4b-24c85da06187_V28N4-JG22K-W66P8-VTMGK-H6%f%HGR__16_Standard2024Volume_-Home2024Retail-HomeBusiness2024Retail- +fa187091-8246-47b1-964f-80a0b1e5d69a_NBBBB-BBBBB-BBBBB-BBBCW-6M%f%X6T__16_VisioPro2024Volume_-VisioPro2024Retail- +923fa470-aa71-4b8b-b35c-36b79bf9f44b_JMMVY-XFNQC-KK4HK-9H7R3-WQ%f%QTV__16_VisioStd2024Volume_-VisioStd2024Retail- +d0eded01-0881-4b37-9738-190400095098_MQ84N-7VYDM-FXV7C-6K7CC-VF%f%W9J__16_Word2024Volume_-Word2024Retail- +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +if %1==winkey if %osSKU%==%%C if not defined key ( +echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) -for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "_BS=%%A %%A" -set "_coltemp=%SystemRoot%\Temp" +if %1==chkprod if "%oVer%"=="%%C" if not defined foundprod ( +echo "%%D" | findstr /I "\<%2.*" %nul% && set foundprod=1 +) -set "Red="CF"" -set "Gray="8F"" -set "Black="00"" -set "Green="2F"" -set "Blue="1F"" -set "Yellow="6F"" -set "Magenta="5F"" +if %1==getinfo if not defined key if "%oVer%"=="%%C" ( +if /i "%2"=="%%D" ( +set key=%%B +set _actid=%%A +set _allactid=!_allactid! %%A +) else if not defined _oBranding if %_NoEditionChange%==0 ( +echo: %%E | find /i "-%2-" %nul% && ( +set key=%%B +set _altoffid=%%D +set _actid=%%A +set _allactid=!_allactid! %%A +) +) +) -set "_Red="0C"" -set "_Green="0A"" -set "_Blue="09"" -set "_White="07"" -set "_Yellow="0E"" +if %1==getmsiprod if "%oVer%"=="%%C" ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%A" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%D | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%2\Registration\{%%A}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +) +) +) +) +) exit /b ::======================================================================================================================================== -:: https://gist.github.com/ave9858/9fff6af726ba3ddc646285d1bbf37e71 -:: This code is used to clean Office licenses - -:cleanlicense: -function UninstallLicenses($DllPath) { - $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) - $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) - $TypeBuilder = $ModuleBuilder.DefineType(0) - - [void]$TypeBuilder.DefinePInvokeMethod('SLOpen', $DllPath, 'Public, Static', 1, [int], @([IntPtr].MakeByRefType()), 1, 3) - [void]$TypeBuilder.DefinePInvokeMethod('SLGetSLIDList', $DllPath, 'Public, Static', 1, [int], - @([IntPtr], [int], [Guid].MakeByRefType(), [int], [int].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - [void]$TypeBuilder.DefinePInvokeMethod('SLUninstallLicense', $DllPath, 'Public, Static', 1, [int], @([IntPtr], [IntPtr]), 1, 3) - - $SPPC = $TypeBuilder.CreateType() - $Handle = 0 - [void]$SPPC::SLOpen([ref]$Handle) - $pnReturnIds = 0 - $ppReturnIds = 0 - - if (!$SPPC::SLGetSLIDList($Handle, 0, [ref][Guid]"0ff1ce15-a989-479d-af46-f275c6370663", 6, [ref]$pnReturnIds, [ref]$ppReturnIds)) { - foreach ($i in 0..($pnReturnIds - 1)) { - [void]$SPPC::SLUninstallLicense($Handle, [Int64]$ppReturnIds + [Int64]16 * $i) - } - } -} +:: Below code is used to get alternate edition name and key if current edition doesn't support K-M-S activation -$OSPP = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -ErrorAction SilentlyContinue).Path -if ($OSPP) { - Write-Output "Found Office Software Protection installed, cleaning" - UninstallLicenses($OSPP + "osppc.dll") -} -UninstallLicenses("sppc.dll") -:cleanlicense: +:: 1st column = Current SKU ID +:: 2nd column = Current Edition Name +:: 3rd column = Current Edition Activation ID +:: 4th column = Alternate Edition Activation ID +:: 5th column = Alternate Edition GVLK +:: 6th column = Alternate Edition Name +:: Separator = _ + + +:kms38fallback + +set notfoundaltactID= +if %_NoEditionChange%==1 exit /b + +for %%# in ( +188_IoTEnterprise__________________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +206_IoTEnterpriseK_________________80083eae-7031-4394-9e88-4901973d56fe_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2Y%f%T43_Enterprise +191_IoTEnterpriseS-2021____________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J4%f%62D_EnterpriseS-2021 +205_IoTEnterpriseSK________________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PD%f%QGT_IoTEnterpriseS +138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T8%f%3GX_Professional +) do ( +for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( +echo "!allapps!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( +set altkey=%%E +set altedition=%%F +) || ( +set altedition=%%F +set notfoundaltactID=1 +) +) +) +) +exit /b ::======================================================================================================================================== :: Leave empty line below diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd new file mode 100644 index 0000000..c10cfdf --- /dev/null +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -0,0 +1,1339 @@ +@set masver=2.7 +@echo off + + + +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ + + + +::======================================================================================================================================== + +:: 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 "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) + +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 +) + +:: 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" +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 "blank=" +set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" + +:: 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 - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 +) +cls + +:: Check LF line ending + +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: +echo: +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul +popd +exit /b +) +popd + +::======================================================================================================================================== + +cls +color 07 +title Change Office Edition %masver% + +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 +) +) + +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" + +call :dk_setvar +set "line=echo ___________________________________________________________________________________________" + +::======================================================================================================================================== + +if %winbuild% LSS 7600 ( +%nceline% +echo Unsupported OS version detected [%winbuild%]. +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done +) + +::======================================================================================================================================== + +:: Fix special character limitations 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 _PSarg=%_PSarg:'=''% + +set "_ttemp=%userprofile%\AppData\Local\Temp" + +setlocal EnableDelayedExpansion + +::======================================================================================================================================== + +echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( +if /i not "!_work!"=="!_ttemp!" ( +%eline% +echo The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. +echo: +echo Extract the archive file and launch the script from the extracted folder. +goto dk_done +) +) + +::======================================================================================================================================== + +:: 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 dk_done +) + +::======================================================================================================================================== + +:: 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 +%eline% +echo This script needs admin rights. +echo Right click on this script and select 'Run as administrator'. +goto dk_done +) + +::======================================================================================================================================== + +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) + +:: 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 + +set -= +set old= + +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +) + +if defined old ( +echo ________________________________________________ +%eline% +echo Your version of MAS [%masver%] is outdated. +echo ________________________________________________ +echo: +if not %_unattended%==1 ( +echo [1] Get Latest MAS +echo [0] Continue Anyway +echo: +call :dk_color %_Green% "Choose a menu option using your 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 +if not defined terminal mode 98, 30 +title Change Office Edition %masver% + +echo: +echo Initializing... +echo: + +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing. Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_reflection +call :dk_ckeckwmic +call :dk_sppissue + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") +) +) + +::======================================================================================================================================== + +:: Check Windows Edition +:: This is just to ensure that SPP/WMI are functional + +cls +set osedition=0 +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 ( +%eline% +echo Failed to detect OS Edition. Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + +:: Check installed Office 16.0 C2R + +set o16c2r= +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office + +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun) + +if not defined o16c2r_reg ( +%eline% +echo Office C2R 2016 or later is not installed, which is required for this script. +echo Download and install Office from below URL and try again. +echo: +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done +) + +call :ch_getinfo + +::======================================================================================================================================== + +:: Check minimum required details + +if %verchk% LSS 9029 ( +%eline% +echo Installed Office version is %_version%. +echo Minimum required version is 16.0.9029.2167 +echo Aborting... +echo: +call :dk_color %Blue% "Download and install latest Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done +) + +for %%A in ( +_oArch +_updch +_lang +_clversion +_version +_oIds +_c2rXml +_c2rExe +_c2rCexe +_masterxml +) do ( +if not defined %%A ( +%eline% +echo Failed to find %%A. Aborting... +echo: +call :dk_color %Blue% "Download and install Office from below URL and try again." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done +) +) + +if %winbuild% LSS 10240 if defined ltscfound ( +%eline% +echo Installed Office appears to be from the Volume channel %ltsc19%%ltsc21%%ltsc24%, +echo which is not officially supported on your Windows build version %winbuild%. +echo Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +set unsupbuild= +if %winbuild% LSS 10240 if %winbuild% GEQ 9200 if %verchk% GTR 16026 set unsupbuild=1 +if %winbuild% LSS 9200 if %verchk% GTR 12527 set unsupbuild=1 + +if defined unsupbuild ( +%eline% +echo Unsupported Office %verchk% is installed on your Windows build version %winbuild%. +echo Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + +:oemenu + +cls +set fixes= +if not defined terminal mode 76, 25 +title Change Office Edition %masver% +echo: +echo: +echo: +echo: +echo ____________________________________________________________ +echo: +echo [1] Change - Office Edition +echo [2] Add - Office Edition +echo [3] Remove - Office Edition +echo ____________________________________________ +echo: +echo [4] Change Office Update Channel +echo [0] %_exitmsg% +echo ____________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" +choice /C:12340 /N +set _el=!errorlevel! +if !_el!==5 exit /b +if !_el!==4 goto :oe_changeupdchnl +if !_el!==3 goto :oe_removeedition +if !_el!==2 set change=0& goto :oe_edition +if !_el!==1 set change=1& goto :oe_edition +goto :oemenu + +::======================================================================================================================================== + +:oe_edition + +cls +call :oe_chkinternet +if not defined _int ( +goto :oe_goback +) + +cls +if not defined terminal mode 76, 25 +title Change Office Edition %masver% +echo: +echo: +echo: +echo: +echo O365/Mondo editions have the latest features. +echo ____________________________________________________________ +echo: +echo [1] Office Suites - Retail +echo [2] Office Suites - Volume +echo [3] Office SingleApps - Retail +echo [4] Office SingleApps - Volume +echo ____________________________________________ +echo: +echo [0] Go Back +echo ____________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" +choice /C:12340 /N +set _el=!errorlevel! +if !_el!==5 goto :oemenu +if !_el!==4 set list=SingleApps_Volume&goto :oe_editionchangepre +if !_el!==3 set list=SingleApps_Retail&goto :oe_editionchangepre +if !_el!==2 set list=Suites_Volume&goto :oe_editionchangepre +if !_el!==1 set list=Suites_Retail&goto :oe_editionchangepre +goto :oe_edition + +::======================================================================================================================================== + +:oe_editionchangepre + +cls +call :ch_getinfo +call :oe_tempcleanup +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getlist\:.*';iex ($f[1])" + +:oe_editionchange + +cls +if not defined terminal ( +mode 98, 45 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=44;$B.Height=100;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% +) + +if not exist %SystemRoot%\Temp\%list%.txt ( +%eline% +echo Failed to generate available editions list. +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :oe_goback +) + +set inpt= +set counter=0 +set verified=0 +set targetedition= + +%line% +echo: +call :dk_color %Gray% "Installed Office editions: %_oIds%" +call :dk_color %Gray% "You can select one of the following Office Editions." +if %winbuild% LSS 10240 echo Unsupported products such as 2019/2021/2024 are excluded from this list. +%line% +echo: + +for /f "usebackq delims=" %%A in (%SystemRoot%\Temp\%list%.txt) do ( +set /a counter+=1 +if !counter! LSS 10 ( +echo [!counter!] %%A +) else ( +echo [!counter!] %%A +) +set targetedition!counter!=%%A +) + +%line% +echo: +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_editionchange +if "%inpt%"=="0" (call :oe_tempcleanup & goto :oe_edition) +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto :oe_editionchange + +::======================================================================================================================================== + +:: Set app exclusions + +cls +set suites= +echo %list% | find /i "Suites" %nul1% && ( +set suites=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getappnames\:.*';iex ($f[1])" +if not exist %SystemRoot%\Temp\getAppIds.txt ( +%eline% +echo Failed to generate available apps list. +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :oe_goback +) +) + +for %%# in ( +Access +Excel +Lync +OneNote +Outlook +PowerPoint +Project +Publisher +Visio +Word +) do ( +if defined suites ( +find /i "%%#" "%SystemRoot%\Temp\getAppIds.txt" %nul1% && (set %%#_st=On) || (set %%#_st=) +) else ( +set %%#_st= +) +) + +if defined Lync_st set Lync_st=Off +set OneDrive_st=Off +if defined suites (set Teams_st=Off) else (set Teams_st=) + +:oe_excludeapps + +cls +if not defined terminal mode 98, 32 + +%line% +echo: +call :dk_color %Gray% "Target edition: %targetedition%" +call :dk_color %Gray% "You can exclude the below apps from installation." +%line% +if defined suites echo: +if defined Access_st echo [A] Access : %Access_st% +if defined Excel_st echo [E] Excel : %Excel_st% +if defined OneNote_st echo [N] OneNote : %OneNote_st% +if defined Outlook_st echo [O] Outlook : %Outlook_st% +if defined PowerPoint_st echo [P] PowerPoint : %PowerPoint_st% +if defined Project_st echo [J] Project : %Project_st% +if defined Publisher_st echo [R] Publisher : %Publisher_st% +if defined Visio_st echo [V] Visio : %Visio_st% +if defined Word_st echo [W] Word : %Word_st% +echo: +if defined Lync_st echo [L] SkypeForBusiness : %Lync_st% +if defined OneDrive_st echo [D] OneDrive : %OneDrive_st% +if defined Teams_st echo [T] Teams : %Teams_st% +%line% +echo: +echo [1] Continue +echo [0] Go Back +%line% +echo: +call :dk_color %_Green% "Choose a menu option using your keyboard:" +choice /C:AENOPJRVWLDT10 /N +set _el=!errorlevel! +if !_el!==14 goto :oe_editionchangepre +if !_el!==13 call :excludelist & goto :oe_editionchangefinal +if !_el!==12 if defined Teams_st (if "%Teams_st%"=="Off" (set Teams_st=ON) else (set Teams_st=Off)) +if !_el!==11 if defined OneDrive_st (if "%OneDrive_st%"=="Off" (set OneDrive_st=ON) else (set OneDrive_st=Off)) +if !_el!==10 if defined Lync_st (if "%Lync_st%"=="Off" (set Lync_st=ON) else (set Lync_st=Off)) +if !_el!==9 if defined Word_st (if "%Word_st%"=="Off" (set Word_st=ON) else (set Word_st=Off)) +if !_el!==8 if defined Visio_st (if "%Visio_st%"=="Off" (set Visio_st=ON) else (set Visio_st=Off)) +if !_el!==7 if defined Publisher_st (if "%Publisher_st%"=="Off" (set Publisher_st=ON) else (set Publisher_st=Off)) +if !_el!==6 if defined Project_st (if "%Project_st%"=="Off" (set Project_st=ON) else (set Project_st=Off)) +if !_el!==5 if defined PowerPoint_st (if "%PowerPoint_st%"=="Off" (set PowerPoint_st=ON) else (set PowerPoint_st=Off)) +if !_el!==4 if defined Outlook_st (if "%Outlook_st%"=="Off" (set Outlook_st=ON) else (set Outlook_st=Off)) +if !_el!==3 if defined OneNote_st (if "%OneNote_st%"=="Off" (set OneNote_st=ON) else (set OneNote_st=Off)) +if !_el!==2 if defined Excel_st (if "%Excel_st%"=="Off" (set Excel_st=ON) else (set Excel_st=Off)) +if !_el!==1 if defined Access_st (if "%Access_st%"=="Off" (set Access_st=ON) else (set Access_st=Off)) +goto :oe_excludeapps + +:excludelist + +set excludelist= +for %%# in ( +Access +Excel +OneNote +Outlook +PowerPoint +Project +Publisher +Visio +Word +Lync +OneDrive +Teams +) do ( +if /i "!%%#_st!"=="Off" if defined excludelist (set excludelist=!excludelist!,%%#) else (set excludelist=,%%#) +) +exit /b + +::======================================================================================================================================== + +:: Final command to change/add edition + +:oe_editionchangefinal + +cls +if not defined terminal mode 105, 32 + +:: Check for Project and Visio with unsupported language + +set projvis= +set langmatched= +echo: %Project_st% %Visio_st% | find /i "ON" %nul% && set projvis=1 +echo: %targetedition% | findstr /i "Project Visio" %nul% && set projvis=1 + +if defined projvis ( +for %%# in ( +ar-sa +cs-cz +da-dk +de-de +el-gr +en-us +es-es +fi-fi +fr-fr +he-il +hu-hu +it-it +ja-jp +ko-kr +nb-no +nl-nl +pl-pl +pt-br +pt-pt +ro-ro +ru-ru +sk-sk +sl-si +sv-se +tr-tr +uk-ua +zh-cn +zh-tw +) do ( +if /i "%_lang%"=="%%#" set langmatched=1 +) +if not defined langmatched ( +%eline% +echo %_lang% language is not available for Project/Visio apps. +echo: +call :dk_color %Blue% "Install Office in the supported language for Project/Visio from the below URL." +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :oe_goback +) +) + +:: Thanks to @abbodi1406 for first discovering OfficeClickToRun.exe uses +:: Thanks to @may for the suggestion to use it to change edition with CDN as a source +:: OfficeClickToRun.exe with productstoadd method is used here to add editions +:: It uses delta updates, meaning that since it's using same installed build, it will consume very less Internet + +set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=Groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" + +if %change%==1 ( +set "c2rcommand=!c2rcommand! productstoremove=AllProducts" +) + +echo: +echo Running the below command, please wait... +echo: +echo %c2rcommand% +%c2rcommand% +set errorcode=%errorlevel% +timeout /t 10 %nul% + +echo: +if %errorcode% EQU 0 ( +call :dk_color %Gray% "Now run the Office activation option from the main menu." +) else ( +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +call :oe_tempcleanup +goto :oe_goback + +::======================================================================================================================================== + +:: Remove Office editions + +:oe_removeedition + +call :ch_getinfo + +cls +if not defined terminal ( +mode 98, 35 +) + +set counter=0 +for %%A in (%_oIds%) do (set /a counter+=1) + +if !counter! LEQ 1 ( +echo: +echo Only "%_oIds%" product is installed. +echo This option is available only when multiple products are installed. +goto :oe_goback +) + +::=============== + +set inpt= +set counter=0 +set verified=0 +set targetedition= + +%line% +echo: +call :dk_color %Gray% "You can uninstall one of the following Office editions." +%line% +echo: + +for %%A in (%_oIds%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A +) + +%line% +echo: +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_removeedition +if "%inpt%"=="0" goto :oemenu +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto :oe_removeedition + +::=============== + +cls +if not defined terminal mode 105, 32 + +set _lang= +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%\%targetedition%.16" /f "-" /k ^| findstr /i ".*16\\.*-.*"') do ( +if defined _lang (set "_lang=!_lang!_%%a") else (set "_lang=_%%a") +) + +set "c2rcommand="%_c2rExe%" platform=%_oArch% productstoremove=%targetedition%.16%_lang%" + +echo: +echo Running the below command, please wait... +echo: +echo %c2rcommand% +%c2rcommand% + +if %errorlevel% NEQ 0 ( +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +goto :oe_goback + +::======================================================================================================================================== + +:: Change Office update channel + +:oe_changeupdchnl + +call :ch_getinfo + +cls +if not defined terminal ( +mode 98, 33 +) + +call :oe_chkinternet +if not defined _int ( +goto :oe_goback +) + +if %winbuild% LSS 10240 ( +echo %_oIds% | findstr "2019 2021 2024" %nul% && ( +%eline% +echo Installed Office editions: %_oIds% +echo Unsupported Office edition is installed on your Windows build version %winbuild%. +goto :oe_goback +) +) + +::=============== + +set inpt= +set counter=0 +set verified=0 +set targetFFN= +set targetchannel= + +%line% +echo: +call :dk_color %Gray% "Installed update channel: %_AudienceData%, %_version%, Client: %_clversion%" +call :dk_color %Gray% "Unsupported update channels are excluded from this list." +%line% +echo: + +for %%# in ( +"5440FD1F-7ECB-4221-8110-145EFAA6372F_Insider Fast [Beta] - Insiders::DevMain" +"64256AFE-F5D9-4F86-8936-8840A6A4F5BE_Monthly Preview - Insiders::CC" +"492350F6-3A01-4F97-B9C0-C7C6DDF67D60_Monthly [Current] - Production::CC" +"55336B82-A18D-4DD6-B5F6-9E5095C314A6_Monthly Enterprise - Production::MEC" +"B8F9B850-328D-4355-9145-C59439A0C4CF_Semi Annual Preview - Insiders::FRDC" +"7FFBC6BF-BC32-4F92-8982-F9DD17FD3114_Semi Annual - Production::DC" +"EA4A4090-DE26-49D7-93C1-91BFF9E53FC3_DevMain Channel - Dogfood::DevMain" +"B61285DD-D9F7-41F2-9757-8F61CBA4E9C8_Microsoft Elite - Microsoft::DevMain" +"F2E724C1-748F-4B47-8FB8-8E0D210E9208_Perpetual2019 VL - Production::LTSC" +"1D2D2EA6-1680-4C56-AC58-A441C8C24FF9_Microsoft2019 VL - Microsoft::LTSC" +"5030841D-C919-4594-8D2D-84AE4F96E58E_Perpetual2021 VL - Production::LTSC2021" +"86752282-5841-4120-AC80-DB03AE6B5FDB_Microsoft2021 VL - Microsoft::LTSC2021" +"7983BAC0-E531-40CF-BE00-FD24FE66619C_Perpetual2024 VL - Production::LTSC2024" +"C02D8FE6-5242-4DA8-972F-82EE55E00671_Microsoft2024 VL - Microsoft::LTSC2024" +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( +set supported= +if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) +if %winbuild% GEQ 10240 (if defined ltsc19 echo %%B | findstr /i "LTSC\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if defined ltsc21 echo %%B | findstr /i "LTSC2021\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if defined ltsc24 echo %%B | findstr /i "LTSC2024\>" %nul% || set supported=) +if %winbuild% GEQ 10240 (if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported=) +if defined supported ( +set /a counter+=1 +if !counter! LSS 10 ( +echo [!counter!] %%B +) else ( +echo [!counter!] %%B +) +set targetFFN!counter!=%%A +set targetchannel!counter!=%%B +) +) +) + +%line% +echo: +echo [R] Learn about update channels +echo [0] Go back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_changeupdchnl +if "%inpt%"=="0" goto :oemenu +if /i "%inpt%"=="R" start https://learn.microsoft.com/microsoft-365-apps/updates/overview-update-channels & goto :oe_changeupdchnl +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetFFN=!targetFFN%inpt%! +set targetchannel=!targetchannel%inpt%! +if %verified%==0 goto :oe_changeupdchnl + +::======================= + +cls +if not defined terminal mode 105, 32 + +:: Get build number for the target FFN, using build number with OfficeC2RClient.exe command to trigger updates provides accurate results + +set build= +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getbuild\:.*';iex ($f[1])" %nul6%') do (set build=%%a) +echo "%build%" | find /i "16." %nul% || set build= + +:: Cleanup Office update related registries, thanks to @abbodi1406 +:: https://techcommunity.microsoft.com/t5/office-365-blog/how-to-manage-office-365-proplus-channels-for-it-pros/ba-p/795813 +:: https://learn.microsoft.com/en-us/microsoft-365-apps/updates/change-update-channels#considerations-when-changing-channels + +echo: +for /f "tokens=1 delims=-" %%A in ("%targetchannel%") do (echo Target update channel: %%A) +echo: +echo Cleaning Office update registry keys... +echo Adding new update channel to registry keys... + +%nul% reg add %o16c2r_reg%\Configuration /v CDNBaseUrl /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f +%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannel /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f +%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannelChanged /t REG_SZ /d "True" /f +%nul% reg delete %o16c2r_reg%\Configuration /v UnmanagedUpdateURL /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdateUrl /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdatePath /f +%nul% reg delete %o16c2r_reg%\Configuration /v UpdateToVersion /f +%nul% reg delete %o16c2r_reg%\Updates /v UpdateToVersion /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f /reg:32 +%nul% reg delete HKCU\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f +%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f /reg:32 +%nul% reg delete HKCU\Software\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f + +if not defined build ( +if %winbuild% GEQ 9200 call :dk_color %Gray% "Failed to detect build number for the target FFN." +set "updcommand="%_c2rCexe%" /update user" +) else ( +set "updcommand="%_c2rCexe%" /update user updatetoversion=%build%" +) +echo Running the below command to trigger updates... +echo: +echo %updcommand% +%updcommand% +echo: +echo Help - %mas%troubleshoot +goto :oe_goback + +::======================================================================================================================================== + +:oe_goback + +call :oe_tempcleanup + +echo: +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 go back..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to go back..." +pause %nul1% +) +goto :oemenu + +::======================================================================================================================================== + +:oe_tempcleanup + +del /f /q %SystemRoot%\Temp\SingleApps_Volume.txt %nul% +del /f /q %SystemRoot%\Temp\SingleApps_Retail.txt %nul% +del /f /q %SystemRoot%\Temp\Suites_Volume.txt %nul% +del /f /q %SystemRoot%\Temp\Suites_Retail.txt %nul% +del /f /q %SystemRoot%\Temp\getAppIds.txt %nul% +exit /b + +::======================================================================================================================================== + +:: Fetch required info + +:ch_getinfo + +set _oRoot= +set _oArch= +set _updch= +set _oIds= +set _lang= +set _cfolder= +set _version= +set _clversion= +set _AudienceData= +set _actconfig= +set _c2rXml= +set _c2rExe= +set _c2rCexe= +set _masterxml= +set ltsc19= +set ltsc21= +set ltsc24= +set ltscfound= + +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientFolder" %nul6%') do (set "_cfolder=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceId" %nul6%') do (set "_updch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientCulture" %nul6%') do (set "_lang=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientVersionToReport" %nul6%') do (set "_clversion=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\ProductReleaseIDs /v ActiveConfiguration" %nul6%') do (set "_actconfig=%%b") + +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%" /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +if defined _oIds (set "_oIds=!_oIds! %%a") else (set "_oIds=%%a") +) +set _oIds=%_oIds:.16=% + +set verchk=0 +for /f "tokens=3 delims=." %%a in ("%_version%") do set "verchk=%%a" + +if exist "%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml" set "_c2rXml=%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml" + +if exist "%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml" ( +set "_masterxml=%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml" +) + +if exist "%_cfolder%\OfficeClickToRun.exe" ( +set "_c2rExe=%_cfolder%\OfficeClickToRun.exe" +) + +if exist "%_cfolder%\OfficeC2RClient.exe" ( +set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe" +) + +echo %_AudienceData% | findstr /i "LTSC\>" %nul% && set ltsc19=LTSC +echo %_clversion% %_version% | findstr "16.0.103 16.0.104 16.0.105" %nul% && set ltsc19=LTSC + +echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 +echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 + +echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 +:: LTSC 2024 build is not fixed yet + +if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1 + +exit /b + +::======================================================================================================================================== + +:: Check Internet connection + +:oe_chkinternet + +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) +) + +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1) +) + +if not defined _int ( +%eline% +call :dk_color %Red% "Internet is not connected." +call :dk_color %Blue% "Internet is required for this operation." +) +exit /b + +::======================================================================================================================================== + +:: Get available build number for a FFN + +:getbuild: +$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072) +[System.Net.ServicePointManager]::SecurityProtocol = $Tls12 + +$FFN = $env:targetFFN +$windowsBuild = [System.Environment]::OSVersion.Version.Build + +$baseUrl = "https://mrodevicemgr.officeapps.live.com/mrodevicemgrsvc/api/v2/C2RReleaseData?audienceFFN=$FFN" +$url = if ($windowsBuild -lt 9200) { "$baseUrl&osver=Client|6.1" } elseif ($windowsBuild -lt 10240) { "$baseUrl&osver=Client|6.3" } else { $baseUrl } + +$response = if ($windowsBuild -ge 9200) { irm -Uri $url -Method Get } else { (New-Object System.Net.WebClient).DownloadString($url) } + +if ($windowsBuild -lt 9200) { + if ($response -match '"AvailableBuild"\s*:\s*"([^"]+)"') { Write-Host $matches[1] } +} else { + Write-Host $response.AvailableBuild +} +:getbuild: + +::======================================================================================================================================== + +:: Get available edition list from c2rpridslicensefiles_auto.xml +:: and filter the list using MasterDescriptor.x-none.xml +:: and exclude unsupported products on Windows 7/8/8.1 + +:getlist: +$xmlPath1 = $env:_c2rXml +$xmlPath2 = $env:_masterxml +$outputDir = $env:SystemRoot + "\Temp\" +$buildNumber = [System.Environment]::OSVersion.Version.Build +$excludedKeywords = @("2019", "2021", "2024") +$productReleaseIds = @() + +if (Test-Path $xmlPath1) { + $xml1 = New-Object -TypeName System.Xml.XmlDocument + $xml1.Load($xmlPath1) + foreach ($node in $xml1.SelectNodes("//ProductReleaseId")) { + $id = $node.GetAttribute("id") + $exclude = $false + if ($buildNumber -lt 10240) { + foreach ($keyword in $excludedKeywords) { + if ($id -match $keyword) { $exclude = $true; break } + } + } + if ($id -ne "CommonLicenseFiles" -and -not $exclude) { $productReleaseIds += $id } + } +} + +$categories = @{ + "Suites_Retail" = @(); "Suites_Volume" = @() + "SingleApps_Retail" = @(); "SingleApps_Volume" = @() +} + +foreach ($id in $productReleaseIds) { + $category = if ($id -match "Retail") { "Retail" } else { "Volume" } + $categories["SingleApps_$category"] += $id +} + +if (Test-Path $xmlPath2) { + $xml2 = New-Object -TypeName System.Xml.XmlDocument + $xml2.Load($xmlPath2) + foreach ($sku in $xml2.SelectNodes("//SKU")) { + $skuId = $sku.GetAttribute("ID") + if ($productReleaseIds -contains $skuId) { + $appIds = $sku.SelectNodes("Apps/App") | ForEach-Object { $_.GetAttribute("id") } + if ($appIds -contains "Excel" -and $appIds -contains "Word") { + $category = if ($skuId -match "Retail") { "Retail" } else { "Volume" } + $categories["Suites_$category"] += $skuId + $categories["SingleApps_$category"] = $categories["SingleApps_$category"] | Where-Object { $_ -ne $skuId } + } + } + } +} + +foreach ($section in $categories.Keys) { + $filePath = Join-Path -Path $outputDir -ChildPath "$section.txt" + $ids = $categories[$section] + if ($ids.Count -gt 0) { $ids | Out-File -FilePath $filePath -Encoding ASCII } +} +:getlist: + +::======================================================================================================================================== + +:: Get App list for a specific product ID using MasterDescriptor.x-none.xml + +:getappnames: +$xmlPath = $env:_masterxml +$targetSkuId = $env:targetedition +$outputDir = $env:SystemRoot + "\Temp\" +$outputFile = Join-Path -Path $outputDir -ChildPath "getAppIds.txt" +$excludeIds = @("shared", "PowerPivot", "PowerView", "MondoOnly", "OSM", "OSMUX", "Groove", "DCF") + +$xml = New-Object -TypeName System.Xml.XmlDocument +$xml.Load($xmlPath) + +$appIdsList = @() +$skuNodes = $xml.SelectNodes("//SKU[@ID='$targetSkuId']") + +foreach ($skuNode in $skuNodes) { + foreach ($app in $skuNode.SelectNodes("Apps/App")) { + $appId = $app.GetAttribute("id") + if ($excludeIds -notcontains $appId) { + $appIdsList += $appId + } + } +} + +if ($appIdsList.Count -gt 0) { + $appIdsList | Out-File -FilePath $outputFile -Encoding ASCII +} +:getappnames: + +::======================================================================================================================================== + +:: 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 + +::======================================================================================================================================== + +:: Check wmic.exe + +:dk_ckeckwmic + +set _wmic=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +) +exit /b + +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +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 + +:dk_color2 + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m +) else ( +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) +exit /b + +::======================================================================================================================================== + +:dk_done + +echo: +if %_unattended%==1 timeout /t 2 & exit /b + +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 + +::======================================================================================================================================== +:: Leave empty line below diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd similarity index 55% rename from MAS/Separate-Files-Version/Change_Edition.cmd rename to MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 5622663..f32d110 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 :: ::============================================================================ @@ -22,26 +19,32 @@ set _stg=0 ::======================================================================================================================================== -:: 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 "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" + +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" @@ -69,10 +72,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 10 +ping 127.0.0.1 -n 20 ) cls @@ -81,9 +84,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: echo: -ping 127.0.0.1 -n 6 >nul +ping 127.0.0.1 -n 20 >nul popd exit /b ) @@ -97,6 +104,7 @@ title Change Windows Edition %masver% set _args= set _elev= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% @@ -111,56 +119,21 @@ 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 :dk_color %Red% "==== ERROR ====" &echo:" +call :dk_setvar set "line=echo ___________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. -goto ced_done -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. -goto ced_done +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -169,6 +142,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -179,40 +153,93 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( 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 The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. -goto ced_done +goto dk_done ) ) ::======================================================================================================================================== +:: 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 dk_done +) + +::======================================================================================================================================== + :: 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'. -goto ced_done +echo Right click on this script and select 'Run as administrator'. +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 +:: 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 @@ -221,134 +248,135 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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) ) +) + +::======================================================================================================================================== + +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" + +if not defined desktop ( +%eline% +echo Unable to detect Desktop location, aborting... +goto dk_done +) + +setlocal EnableDelayedExpansion ::======================================================================================================================================== cls -mode 98, 30 +if not defined terminal mode 98, 30 +title Change Windows Edition %masver% echo: echo Initializing... echo: -call :dk_product -call :dk_ckeckwmic - -:: Show info for potential script stuck scenario -sc start sppsvc %nul% -if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( -echo: -echo Error code: %errorlevel% -call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." +for %%# in ( +sppsvc.exe +dism.exe +) do ( +if not exist %SysPath%\%%# ( +%eline% +echo [%SysPath%\%%#] file is missing, aborting... echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) ) ::======================================================================================================================================== -:: Check Activation IDs +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -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 ( -%eline% -echo Activation IDs not found. Aborting... -echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +call :dk_reflection +call :dk_ckeckwmic +call :dk_sppissue + +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j +) else ( +for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" +for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( +if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ) ) ::======================================================================================================================================== -call :dk_checksku +:: Check Activation ID -if not defined osSKU ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( %eline% -echo SKU value was not detected properly. Aborting... -goto ced_done +echo Either key is not insalled or script failed to get installed key's activation ID. Aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== -:: Check Windows Edition +:: Check Windows Edition and branch -set osedition= +set osedition=0 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 %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") -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" +if %osedition%==0 ( +%eline% +echo Failed to detect OS edition, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) -:: Workaround for an issue 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 "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "regedition=%%a" +if /i not "%osedition%"=="%regedition%" ( +set "showeditionerror=call :dk_color %_Yellow% "Mismatch found [WMI-%osedition%] [Reg-%regedition%]."" +) 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. %mas%troubleshoot -goto ced_done -) - -::======================================================================================================================================== - set branch= 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 - -%psc% $ExecutionContext.SessionState.LanguageMode %nul2% | find /i "Full" %nul1% || ( -%eline% -%psc% $ExecutionContext.SessionState.LanguageMode -echo: -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done -) - ::======================================================================================================================================== -:: Get Target editions list +:: Get target editions list set _target= set _dtarget= @@ -361,20 +389,25 @@ if %winbuild% LSS 10240 for /f "tokens=4" %%a in ('%psc% "$f=[io.file]::ReadAllT 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! " +if /i "%osedition:~0,4%"=="Core" set _pro=Professional +if /i "%osedition%"=="CoreN" set _pro=ProfessionalN +set "_dtarget= %_dtarget% !_wtarget! !_pro! " ) ::======================================================================================================================================== -:: Block the change to/from CloudEdition editions - -for %%# in (202 203) do if %osSKU%==%%# ( -%eline% -echo [%winos% ^| SKU:%osSKU% ^| %winbuild%] -echo It's not recommended to change this installed edition to any other. -echo Aborting... -goto ced_done +for %%# in (CloudEdition CloudEditionN ServerRdsh) do if /i %osedition%==%%# ( +cls +echo: +call :dk_color %Red% "==== Note ====" +echo: +echo [EditionID:%osedition% ^| %fullbuild%] +echo: +echo Changing this edition may not remove "%osedition%"-specific features. +echo: +call :dk_color %_Yellow% "Press [7] to continue anyway..." +choice /c 7 /n +cls ) for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" ( @@ -383,18 +416,18 @@ echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# " if defined _target ( for %%# in (%_target%) do ( -echo %%# | findstr /i "CountrySpecific CloudEdition ServerRdsh" %nul% || (set "_ntarget=!_ntarget! %%#") +echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#") ) ) if not defined _ntarget ( %line% echo: -if defined dismnotworking call :dk_color %Red% "DISM.exe is not responding." -call :dk_color %Gray% "Target Edition not found." +if defined dismnotworking call :dk_color %Red% "DISM.exe is not working." +call :dk_color %Gray% "Target editions not found." echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition. %line% -goto ced_done +goto dk_done ) ::======================================================================================================================================== @@ -402,7 +435,7 @@ goto ced_done :cedmenu2 cls -mode 98, 30 +if not defined terminal mode 98, 30 set inpt= set counter=0 set verified=0 @@ -410,9 +443,10 @@ set targetedition= %line% 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%] [%fullbuild%] to one of the following." +%showeditionerror% if defined dismnotworking ( -call :dk_color %_Yellow% "Note - DISM.exe is not responding." +call :dk_color %_Yellow% "Note - DISM.exe is not working." if /i "%osedition:~0,4%"=="Core" call :dk_color %_Yellow% " - You will see more edition options to choose once its changed to Pro." ) %line% @@ -428,7 +462,7 @@ set targetedition!counter!=%%A echo: echo [0] %_exitmsg% echo: -call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":" +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" set /p inpt= if "%inpt%"=="" goto cedmenu2 if "%inpt%"=="0" exit /b @@ -442,32 +476,56 @@ if %winbuild% LSS 10240 goto :cbsmethod if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" goto :ced_change_server cls -mode con cols=105 lines=32 +if not defined terminal mode con cols=105 lines=32 + +if /i "%targetedition%"=="ServerRdsh" ( +echo: +call :dk_color %Red% "==== Note ====" +echo: +echo Once the edition is changed to "%targetedition%", +echo the system may not be able to properly change edition later. +echo: +echo [1] Continue Anyway +echo [0] Go Back +echo: +call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" +choice /C:10 /N +if !errorlevel!==2 goto cedmenu2 +if !errorlevel!==1 rem +) +cls set key= set _chan= set _dismapi=0 -:: Check if DISM Api 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 "%SysPath%\spp\tokens\skus\%targetedition%\" ( +echo %_wtarget% | find /i " %targetedition% " || ( set _dismapi=1 ) +) -set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK" +set "keyflow=Retail Volume:GVLK Volume:MAK OEM:NONSLP OEM:DM PGS:TB Retail:TB:Eval" call :ced_targetSKU %targetedition% if defined targetSKU call :ced_windowskey if defined key if defined pkeychannel set _chan=%pkeychannel% if not defined key call :changeeditiondata +if not defined key if %_dismapi%==1 if /i "%targetedition%"=="Professional" ( +set key=VK7JG-NPHTM-C97JM-9MPGT-3V66T +set _chan=Retail +) if not defined key ( %eline% echo [%targetedition% ^| %winbuild%] -echo Unable to get product key from pkeyhelper.dll +echo Failed to get product key from pkeyhelper.dll. echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== @@ -476,27 +534,23 @@ goto ced_done :: In other cases, editions can be changed instantly with "slmgr /ipk" if %_dismapi%==1 ( -mode con cols=105 lines=40 -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -%eline% -echo Pending Reboot flags found. -echo: -echo Restart the system and try again. -goto ced_done -) +if not defined terminal mode con cols=105 lines=40 +call :ced_rebootflag +if defined rebootreq goto dk_done ) cls %line% echo: -if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: if %_dismapi%==1 ( -call :dk_color %Green% "Notes-" +call :dk_color %Green% "Notes -" echo: -echo - Save your work before continue, system will auto restart. +echo - Save your work before continuing, the system will auto-restart. echo: echo - You will need to activate with HWID option once the edition is changed. %line% @@ -508,61 +562,61 @@ if !errorlevel!==1 exit /b ::======================================================================================================================================== if %_dismapi%==0 ( -echo Installing %_chan% Key [%key%] +echo Installing %_chan% key [%key%] echo: -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!]" +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=!errorlevel! +cmd /c exit /b !keyerror! +if !keyerror! NEQ 0 set "keyerror=[0x!=ExitCode!]" -if !error_code! EQU 0 ( +if !keyerror! EQU 0 ( call :dk_refresh call :dk_color %Green% "[Successful]" echo: -call :dk_color %Gray% "Reboot is required to properly change the Edition." +call :dk_color %Gray% "Reboot is required to fully change the edition." ) else ( -call :dk_color %Red% "[Unsuccessful] [Error Code: 0x!=ExitCode!]" -echo Check this page for help. %mas%troubleshoot +call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) ) if %_dismapi%==1 ( echo: -echo Applying the DISM API method with %_chan% Key %key%. Please wait... -echo: -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%;" -timeout /t 3 %nul1% +echo Applying the DISM API method with %_chan% key %key%. Please wait... echo: -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%change_edition_issues" + +call :ced_prep +if defined preperror goto dk_done + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%" +call :ced_postprep ) %line% -goto ced_done +goto dk_done ::======================================================================================================================================== :cbsmethod cls +if not defined terminal ( mode con cols=105 lines=32 %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;}" +) -REM %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -REM %eline% -REM echo Pending reboot flags found. -REM echo: -REM echo Restart the system and try again. -REM goto ced_done -REM ) +call :ced_rebootflag +if defined rebootreq goto dk_done echo: -if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: -call :dk_color %Blue% "Important - Save your work before continue, system will auto reboot." +call :dk_color %Blue% "Important - Save your work before continuing, the system will auto-restart." echo: choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : " if %errorlevel%==1 exit /b @@ -571,26 +625,29 @@ echo: echo Initializing... echo: +call :ced_prep +if defined preperror goto dk_done + if %_stg%==0 (set stage=) else (set stage=-StageCurrent) -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;" -echo: -call :dk_color %Blue% "Incase of errors, you must restart your system before trying again." -echo Check this page for help. %mas%troubleshoot +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%" +call :ced_postprep %line% -goto ced_done +goto dk_done ::======================================================================================================================================== :ced_change_server cls +if not defined terminal ( mode con cols=105 lines=32 %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 _chan= -set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM" +set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM PGS:TB Retail:TB:Eval" call :ced_targetSKU %targetedition% if defined targetSKU call :ced_windowskey @@ -600,99 +657,191 @@ if not defined key call :changeeditiondata if not defined key ( %eline% echo [%targetedition% ^| %winbuild%] -echo Unable to get product key from pkeyhelper.dll +echo Failed to get product key from pkeyhelper.dll. echo: -echo Check this page for help. %mas%troubleshoot -goto ced_done +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) -::======================================================================================================================================== - -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':checkrebootflag\:.*';iex ($f[1]);" | find /i "True" %nul% && ( -%eline% -echo Pending reboot flags found. -echo: -echo Restart the system and try again. -goto ced_done -) +call :ced_rebootflag +if defined rebootreq goto dk_done cls echo: -if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not responding." -echo Changing the Current Edition [%osedition%] %winbuild% to [%targetedition%] +%showeditionerror% +if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working." +echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: -echo Applying the command with %_chan% Key + +call :ced_prep +if defined preperror goto dk_done + +echo Applying the command with %_chan% key... echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula -call :dk_color %Blue% "You must restart the system at this stage." -echo Help: %mas%troubleshoot +call :ced_postprep +%line% + +goto dk_done ::======================================================================================================================================== -:ced_done +:ced_prep + +set _time= +set preperror= + +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + +%psc% Stop-Service TrustedInstaller -force %nul% + +sc query TrustedInstaller | find /i "RUNNING" %nul% && ( +%eline% +echo Failed to stop the TrustedInstaller service. +echo Reboot your machine using the restart option and try again. +set preperror=1 +exit /b +) + +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul% + +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% +del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul% + +:: Initiate this to appear in fresh logs + +dism /online /english /Get-CurrentEdition %nul% +dism /online /english /Get-TargetEditions %nul% +exit /b + +::======================================================================================================================================== + +:ced_postprep + +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul% + +if not exist "!desktop!\ChangeEdition_Logs\" md "!desktop!\ChangeEdition_Logs\" %nul% +call :compresslog cbs\cbs_%_time%.log ChangeEdition_Logs\CBS %nul% +call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul% echo: -call :dk_color %_Yellow% "Press any key to %_exitmsg%..." -pause %nul1% +if %winbuild% GEQ 9200 %psc% "if ((Get-WindowsOptionalFeature -Online -FeatureName NetFx3).State -eq 'Enabled') {Write-Host 'Checking .NET Framework 3.5 Status - Enabled'}" +echo Log files are copied to the ChangeEdition_Logs folder on your desktop. +echo: +call :dk_color %Blue% "In case there are errors, you should restart the system before trying again." +echo: +set fixes=%fixes% %mas%change_edition_issues +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" +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!\%2_%_time%.cab" +del /q /f %ddf% exit /b ::======================================================================================================================================== -:: Check SKU value +:: Set variables -:dk_checksku +:dk_setvar -set osSKU= -set slcSKU= -set wmiSKU= -set regSKU= +set psc=powershell.exe +set winbuild=1 +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) -set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); -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 _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) -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" +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 osSKU=%slcSKU% -if not defined osSKU set osSKU=%wmiSKU% -if not defined osSKU set osSKU=%regSKU% +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 +::======================================================================================================================================== + :: 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% +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% +if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% exit /b -:: Get Windows Activation IDs +:: Get installed products Activation IDs -:dk_actids +:dk_actid -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" %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='+$_)}" %nul6%')" -%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) 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 if exist %Systemdrive%\Windows\System32\spp\tokens\skus\%%a ( -call set "_wtarget= !_wtarget! %%a " -) -) +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do call set "_wtarget= !_wtarget! %%a " exit /b :: Check wmic.exe @@ -701,27 +850,24 @@ exit /b set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && 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 +:: Show info for potential script stuck scenario -call :dk_reflection +:dk_sppissue -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%%') +sc start sppsvc %nul% +set spperror=%errorlevel% -set winos= -for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) -echo "%winos%" | find /i "Windows" %nul1% || ( -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 ( -set winos=!winos:Windows 10=Windows 11! -) +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] ) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code @@ -737,31 +883,26 @@ exit /b :: Check pending reboot flags -:checkrebootflag: -function Test-PendingReboot -{ - if (Test-Path -Path "$env:windir\WinSxS\pending.xml") { return $true } - if (Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -EA SilentlyContinue) { return $true } - if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -EA SilentlyContinue) { return $true } - try { - $util = [wmiclass]"\\.\root\ccm\clientsdk:CCM_ClientUtilities" - $status = $util.DetermineIfRebootPending() - if(($status -ne $null) -and $status.RebootPending){ - return $true - } - }catch{} - - return $false -} -Test-PendingReboot -:checkrebootflag: +:ced_rebootflag + +set rebootreq= +reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" %nul% && set rebootreq=1 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" %nul% && set rebootreq=1 + +if defined rebootreq ( +%eline% +echo Pending reboot flags found. +echo: +echo Make sure Windows is fully updated, restart the system and try again. +) +exit /b ::======================================================================================================================================== :: Get Product Key from pkeyhelper.dll for future new editions :: It works on Windows 10 1803 (17134) and later builds. -:dk_pkey +:k_pkey call :dk_reflection @@ -772,14 +913,13 @@ set pkey= for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkey=%%a) exit /b - :: Get channel name for the key which was extracted from pkeyhelper.dll -:dk_pkeychannel +:k_pkeychannel set k=%1 set m=[Runtime.InteropServices.Marshal] -set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms +set p=%SysPath%\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3); set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8); @@ -793,9 +933,9 @@ exit /b for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b for %%# in (%keyflow%) do ( -call :dk_pkey %targetSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( +call :k_pkey %targetSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) @@ -841,7 +981,30 @@ exit /b ::======================================================================================================================================== -:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition +:dk_done + +echo: +if %_unattended%==1 timeout /t 2 & exit /b + +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 + +::======================================================================================================================================== + +:: https://github.com/asdcorp/Set-WindowsCbsEdition :cbsxml:[ param ( @@ -1113,45 +1276,45 @@ if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*. set h= for %%# in ( -XGV%h%PP-NM%h%H47-7TT%h%HJ-W%h%3FW7-8HV%h%2C__OEM:NONSLP_Enterprise -D6R%h%D9-D4%h%N8T-RT9%h%QX-Y%h%W6YT-FCW%h%WJ______Retail_Starter -3V6%h%Q6-NQ%h%XCX-V8Y%h%XR-9%h%QCYV-QPF%h%CT__Volume:MAK_EnterpriseN -3NF%h%XW-2T%h%27M-2BD%h%W6-4%h%GHRV-68X%h%RX______Retail_StarterN -VK7%h%JG-NP%h%HTM-C97%h%JM-9%h%MPGT-3V6%h%6T______Retail_Professional -2B8%h%7N-8K%h%FHP-DKV%h%6R-Y%h%2C8J-PKC%h%KT______Retail_ProfessionalN -4CP%h%RK-NM%h%3K3-X6X%h%XQ-R%h%XX86-WXC%h%HW______Retail_CoreN -N24%h%34-X9%h%D7W-8PF%h%6X-8%h%DV9T-8TY%h%MD______Retail_CoreCountrySpecific -BT7%h%9Q-G7%h%N6G-PGB%h%YW-4%h%YWX6-6F4%h%BT______Retail_CoreSingleLanguage -YTM%h%G3-N6%h%DKC-DKB%h%77-7%h%M9GH-8HV%h%X7______Retail_Core -XKC%h%NC-J2%h%6Q9-KFH%h%D2-F%h%KTHY-KD7%h%2Y__OEM:NONSLP_PPIPro -YNM%h%GQ-8R%h%YV3-4PG%h%Q3-C%h%8XTP-7CF%h%BY______Retail_Education -84N%h%GF-MH%h%BT6-FXB%h%X8-Q%h%WJK7-DRR%h%8H______Retail_EducationN -NK9%h%6Y-D9%h%CD8-W44%h%CQ-R%h%8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 -FWN%h%7H-PF%h%93Q-4GG%h%P8-M%h%8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH -2DB%h%W3-N2%h%PJG-MVH%h%W3-G%h%7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 -NTX%h%6B-BR%h%YC2-K67%h%86-F%h%6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH -G3K%h%NM-CH%h%G6T-R36%h%X3-9%h%QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage -HNG%h%CC-Y3%h%8KG-QVK%h%8D-W%h%MWRK-X86%h%VK______Retail_ProfessionalCountrySpecific -DXG%h%7C-N3%h%6C4-C4H%h%TG-X%h%4T3X-2YV%h%77______Retail_ProfessionalWorkstation -WYP%h%NQ-8C%h%467-V2W%h%6J-T%h%X4WX-WT2%h%RQ______Retail_ProfessionalWorkstationN -8PT%h%T6-RN%h%W4C-6V7%h%J2-C%h%2D3X-MHB%h%PB______Retail_ProfessionalEducation -GJT%h%YN-HD%h%MQY-FRR%h%76-H%h%VGC7-QPF%h%8P______Retail_ProfessionalEducationN -C4N%h%TJ-CX%h%6Q2-VXD%h%MR-X%h%VKGM-F9D%h%JC__Volume:MAK_EnterpriseG -46P%h%N6-R9%h%BK9-CVH%h%KB-H%h%WQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN -NJC%h%F7-PW%h%8QT-332%h%4D-6%h%88JX-2YV%h%66______Retail_ServerRdsh -V3W%h%VW-N2%h%PV2-CGW%h%C3-3%h%4QGF-VMJ%h%2C______Retail_Cloud -NH9%h%J3-68%h%WK7-6FB%h%93-4%h%K3DF-DJ4%h%F6______Retail_CloudN -2HN%h%6V-HG%h%TM8-6C9%h%7C-R%h%K67V-JQP%h%FD______Retail_CloudE -WC2%h%BQ-8N%h%RM3-FDD%h%YY-2%h%BFGV-KHK%h%QY_Volume:GVLK_ServerStandard%Cor%_RS1 -CB7%h%KF-BW%h%N84-R7R%h%2Y-7%h%93K2-8XD%h%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1 -JCK%h%RF-N3%h%7P4-C2D%h%82-9%h%YXRT-4M6%h%3B_Volume:GVLK_ServerSolution_RS1 -QN4%h%C6-GB%h%JD2-FB4%h%22-G%h%HWJK-GJG%h%2R_Volume:GVLK_ServerCloudStorage_RS1 -VP3%h%4G-4N%h%PPG-79J%h%TQ-8%h%64T4-R3M%h%QX_Volume:GVLK_ServerAzureCor_RS1 -9JQ%h%NQ-V8%h%HQ6-PKB%h%8H-G%h%GHRY-R62%h%H6______Retail_ServerAzureNano_RS1 -VN8%h%D3-PR%h%82H-DB6%h%BJ-J%h%9P4M-92F%h%6J______Retail_ServerStorageStandard_RS1 -48T%h%QX-NV%h%K3R-D8Q%h%R3-G%h%THHM-8FH%h%XC______Retail_ServerStorageWorkgroup_RS1 -2HX%h%DN-KR%h%XHB-GPY%h%C7-Y%h%CKFJ-7FV%h%DG_Volume:GVLK_ServerDatacenterACor_RS3 -PTX%h%N8-JF%h%HJM-4WC%h%78-M%h%PCBR-9W4%h%KR_Volume:GVLK_ServerStandardACor_RS3 +XGVPP-NMH47-7TTHJ-W3FW7-8HV%h%2C__OEM:NONSLP_Enterprise +D6RD9-D4N8T-RT9QX-YW6YT-FCW%h%WJ______Retail_Starter +3V6Q6-NQXCX-V8YXR-9QCYV-QPF%h%CT__Volume:MAK_EnterpriseN +3NFXW-2T27M-2BDW6-4GHRV-68X%h%RX______Retail_StarterN +VK7JG-NPHTM-C97JM-9MPGT-3V6%h%6T______Retail_Professional +2B87N-8KFHP-DKV6R-Y2C8J-PKC%h%KT______Retail_ProfessionalN +4CPRK-NM3K3-X6XXQ-RXX86-WXC%h%HW______Retail_CoreN +N2434-X9D7W-8PF6X-8DV9T-8TY%h%MD______Retail_CoreCountrySpecific +BT79Q-G7N6G-PGBYW-4YWX6-6F4%h%BT______Retail_CoreSingleLanguage +YTMG3-N6DKC-DKB77-7M9GH-8HV%h%X7______Retail_Core +XKCNC-J26Q9-KFHD2-FKTHY-KD7%h%2Y__OEM:NONSLP_PPIPro +YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%h%BY______Retail_Education +84NGF-MHBT6-FXBX8-QWJK7-DRR%h%8H______Retail_EducationN +NK96Y-D9CD8-W44CQ-R8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 +FWN7H-PF93Q-4GGP8-M8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH +2DBW3-N2PJG-MVHW3-G7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 +NTX6B-BRYC2-K6786-F6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH +G3KNM-CHG6T-R36X3-9QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage +HNGCC-Y38KG-QVK8D-WMWRK-X86%h%VK______Retail_ProfessionalCountrySpecific +DXG7C-N36C4-C4HTG-X4T3X-2YV%h%77______Retail_ProfessionalWorkstation +WYPNQ-8C467-V2W6J-TX4WX-WT2%h%RQ______Retail_ProfessionalWorkstationN +8PTT6-RNW4C-6V7J2-C2D3X-MHB%h%PB______Retail_ProfessionalEducation +GJTYN-HDMQY-FRR76-HVGC7-QPF%h%8P______Retail_ProfessionalEducationN +C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%h%JC__Volume:MAK_EnterpriseG +46PN6-R9BK9-CVHKB-HWQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN +NJCF7-PW8QT-3324D-688JX-2YV%h%66______Retail_ServerRdsh +V3WVW-N2PV2-CGWC3-34QGF-VMJ%h%2C______Retail_Cloud +NH9J3-68WK7-6FB93-4K3DF-DJ4%h%F6______Retail_CloudN +2HN6V-HGTM8-6C97C-RK67V-JQP%h%FD______Retail_CloudE +WC2BQ-8NRM3-FDDYY-2BFGV-KHK%h%QY_Volume:GVLK_ServerStandard%Cor%_RS1 +CB7KF-BWN84-R7R2Y-793K2-8XD%h%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1 +JCKRF-N37P4-C2D82-9YXRT-4M6%h%3B_Volume:GVLK_ServerSolution_RS1 +QN4C6-GBJD2-FB422-GHWJK-GJG%h%2R_Volume:GVLK_ServerCloudStorage_RS1 +VP34G-4NPPG-79JTQ-864T4-R3M%h%QX_Volume:GVLK_ServerAzureCor_RS1 +9JQNQ-V8HQ6-PKB8H-GGHRY-R62%h%H6______Retail_ServerAzureNano_RS1 +VN8D3-PR82H-DB6BJ-J9P4M-92F%h%6J______Retail_ServerStorageStandard_RS1 +48TQX-NVK3R-D8QR3-GTHHM-8FH%h%XC______Retail_ServerStorageWorkgroup_RS1 +2HXDN-KRXHB-GPYC7-YCKFJ-7FV%h%DG_Volume:GVLK_ServerDatacenterACor_RS3 +PTXN8-JFHJM-4WC78-MPCBR-9W4%h%KR_Volume:GVLK_ServerStandardACor_RS3 ) do ( for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C ( diff --git a/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd b/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd deleted file mode 100644 index c0d7507..0000000 --- a/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd +++ /dev/null @@ -1,259 +0,0 @@ -@setlocal DisableDelayedExpansion -@echo off -@cls - - -:: -:: Check-Activation-Status -:: Written by @abbodi1406 -:: forums.mydigitallife.net/posts/838808 - - - -set _args= -set _args=%* -for %%A in (%_args%) do ( -if /i "%%A"=="-wow" set _rel1=1 -if /i "%%A"=="-arm" set _rel2=1 -) -set "_cmdf=%~f0" -if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 ( -setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow" -exit /b -) -if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 ( -setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm" -exit /b -) -color 07 -title Check Activation Status [vbs] -set "SysPath=%SystemRoot%\System32" -set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "SysPath=%SystemRoot%\Sysnative" -set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" -) - -:: Check LF line ending - -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: -ping 127.0.0.1 -n 6 >nul -popd -exit /b -) -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 "_wow=1" -if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32" -set "_utemp=%TEMP%" -set "line2=************************************************************" -set "line3=____________________________________________________________" -set _sO16vbs=0 -set _sO15vbs=0 -if exist "%ProgramFiles%\Microsoft Office\Office15\ospp.vbs" ( - set _sO15vbs=1 -) else if exist "%ProgramW6432%\Microsoft Office\Office15\ospp.vbs" ( - set _sO15vbs=1 -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office15\ospp.vbs" ( - set _sO15vbs=1 -) -setlocal EnableDelayedExpansion -echo %line2% -echo *** Windows Status *** -echo %line2% -pushd "!_utemp!" -copy /y %SystemRoot%\System32\slmgr.vbs . >nul 2>&1 -net start sppsvc /y >nul 2>&1 -cscript //nologo slmgr.vbs /dli || (echo Error executing slmgr.vbs&del /f /q slmgr.vbs&popd&goto :casVend) -cscript //nologo slmgr.vbs /xpr -del /f /q slmgr.vbs >nul 2>&1 -popd -echo %line3% - -if defined ohook ( -echo. -echo. -echo %line2% -echo *** Office Ohook Activation Status *** -echo %line2% -echo. -powershell "write-host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'" -echo. -) - -:casVo16 -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") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016 %_bit%-bit Status *** -) else ( -echo *** Office 2013/2016 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVo13 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016 32-bit Status *** -) else ( -echo *** Office 2013/2016 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVo13 -if %_sO16vbs% EQU 1 goto :casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 %_bit%-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 32-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVo10 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 %_bit%-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVc16 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Common\InstallRoot /v Path" 2^>nul') do (set "office=%%b") -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 32-bit Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc16 -reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 || ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath >nul 2>&1 || goto :casVc13 -) -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (set "office=%%b\Office16") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016-2021 C2R Status *** -) else ( -echo *** Office 2013-2021 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) -if %_wow%==0 goto :casVc13 -set office= -for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (set "office=%%b\Office16") -if exist "!office!\ospp.vbs" ( -set _sO16vbs=1 -echo. -echo %line2% -if %_sO15vbs% EQU 0 ( -echo *** Office 2016-2021 C2R Status *** -) else ( -echo *** Office 2013-2021 Status *** -) -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc13 -if %_sO16vbs% EQU 1 goto :casVc10 -reg query HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun /v InstallPath >nul 2>&1 || ( -reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\ClickToRun /v InstallPath >nul 2>&1 || goto :casVc10 -) -set office= -if exist "%ProgramFiles%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramFiles%\Microsoft Office\Office15" -) else if exist "%ProgramW6432%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramW6432%\Microsoft Office\Office15" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office15\ospp.vbs" ( - set "office=%ProgramFiles(x86)%\Microsoft Office\Office15" -) -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2013 C2R Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVc10 -if %_wow%==0 reg query HKLM\SOFTWARE\Microsoft\Office\14.0\CVH /f Click2run /k >nul 2>&1 || goto :casVend -if %_wow%==1 reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\CVH /f Click2run /k >nul 2>&1 || goto :casVend -set office= -if exist "%ProgramFiles%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramFiles%\Microsoft Office\Office14" -) else if exist "%ProgramW6432%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramW6432%\Microsoft Office\Office14" -) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office14\ospp.vbs" ( - set "office=%ProgramFiles(x86)%\Microsoft Office\Office14" -) -if exist "!office!\ospp.vbs" ( -echo. -echo %line2% -echo *** Office 2010 C2R Status *** -echo %line2% -cscript //nologo "!office!\ospp.vbs" /dstatus -) - -:casVend -echo. -echo Press any key to exit. -pause >nul -exit /b -:: Leave empty line below diff --git a/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd b/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd deleted file mode 100644 index ce735bb..0000000 --- a/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd +++ /dev/null @@ -1,564 +0,0 @@ -@setlocal DisableDelayedExpansion -@echo off - - - -:: Check-Activation-Status -:: Written by @abbodi1406 -:: forums.mydigitallife.net/posts/838808 - - - - -set WMI_VBS=0 -@cls -set _args= -set _args=%* -for %%A in (%_args%) do ( -if /i "%%A"=="-wow" set _rel1=1 -if /i "%%A"=="-arm" set _rel2=1 -) -set "_cmdf=%~f0" -if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 ( -setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow" -exit /b -) -if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 ( -setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm" -exit /b -) -color 07 -title Check Activation Status [wmi] -set wspp=SoftwareLicensingProduct -set wsps=SoftwareLicensingService -set ospp=OfficeSoftwareProtectionProduct -set osps=OfficeSoftwareProtectionService -set winApp=55c92734-d682-4d71-983e-d6ec3f16059f -set o14App=59a52881-a989-479d-af46-f275c6370663 -set o15App=0ff1ce15-a989-479d-af46-f275c6370663 -for %%# in (spp_get,ospp_get,cW1nd0ws,sppw,c0ff1ce15,sppo,osppsvc,ospp14,ospp15) do set "%%#=" -for /f "tokens=6 delims=[]. " %%# in ('ver') do set winbuild=%%# -set "spp_get=Description, DiscoveredKeyManagementServiceMachineName, DiscoveredKeyManagementServiceMachinePort, EvaluationEndDate, GracePeriodRemaining, ID, KeyManagementServiceMachine, KeyManagementServicePort, KeyManagementServiceProductKeyID, LicenseStatus, LicenseStatusReason, Name, PartialProductKey, ProductKeyID, VLActivationInterval, VLRenewalInterval" -set "ospp_get=%spp_get%" -if %winbuild% GEQ 9200 set "spp_get=%spp_get%, KeyManagementServiceLookupDomain, VLActivationTypeEnabled" -if %winbuild% GEQ 9600 set "spp_get=%spp_get%, DiscoveredKeyManagementServiceMachineIpAddress, ProductKeyChannel" -set "_work=%~dp0" -set "_batf=%~f0" -set "_batp=%_batf:'=''%" -set "_Local=%LocalAppData%" -set _Identity=0 -setlocal EnableDelayedExpansion -dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 -dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 -pushd "!_work!" -setlocal DisableDelayedExpansion -if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" set _Identity=0 - -set "SysPath=%SystemRoot%\System32" -set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "SysPath=%SystemRoot%\Sysnative" -set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" -) - -:: Check LF line ending - -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: -ping 127.0.0.1 -n 6 >nul -popd -exit /b -) -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 -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 -) - -if %_cwmi% EQU 0 ( -echo: -echo Error: WMI is not responding in the system. -echo: -echo In MAS, Goto Troubleshoot and run Fix WMI option. -echo: -echo Press any key to exit... -pause >nul -exit /b -) - -set "line2=************************************************************" -set "line3=____________________________________________________________" -set "_psc=powershell" - -set _prsh=1 -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _prsh=0 -set "_csg=cscript.exe //NoLogo //Job:WmiMulti "%~nx0?.wsf"" -set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf"" -set "_csx=cscript.exe //NoLogo //Job:XPDT "%~nx0?.wsf"" -if %_cwmi% EQU 0 set WMI_VBS=1 -if %WMI_VBS% EQU 0 ( -set "_zz1=wmic path" -set "_zz2=where" -set "_zz3=get" -set "_zz4=/value" -set "_zz5=(" -set "_zz6=)" -set "_zz7="wmic path" -set "_zz8=/value"" -) else ( -set "_zz1=%_csq%" -set "_zz2=" -set "_zz3=" -set "_zz4=" -set "_zz5="" -set "_zz6="" -set "_zz7=%_csq%" -set "_zz8=" -) -set _WSH=0 -set OsppHook=1 -sc query osppsvc >nul 2>&1 -if %errorlevel% EQU 1060 set OsppHook=0 - -net start sppsvc /y >nul 2>&1 -call :casWpkey %wspp% %winApp% cW1nd0ws sppw -if %winbuild% GEQ 9200 call :casWpkey %wspp% %o15App% c0ff1ce15 sppo -if %OsppHook% NEQ 0 ( -net start osppsvc /y >nul 2>&1 -call :casWpkey %ospp% %o14App% osppsvc ospp14 -if %winbuild% LSS 9200 call :casWpkey %ospp% %o15App% osppsvc ospp15 -) - -echo %line2% -echo *** Windows Status *** -echo %line2% -if not defined cW1nd0ws ( -echo. -echo Error: product key not found. -goto :casWcon -) -set winID=1 -set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%winApp%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%wspp%" "%wsps%" "%spp_get%" - call :casWout - echo %line3% - echo. -) - -if defined ohook ( -echo. -echo. -echo %line2% -echo *** Office Ohook Activation Status *** -echo %line2% -echo. -powershell "write-host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.'; write-host -back 'Black' -fore 'Yellow' 'You can ignore below Office activation status.'" -echo. -) - -:casWcon -set winID=0 -set verbose=1 -if not defined c0ff1ce15 ( -if defined osppsvc goto :casWospp -goto :casWend -) -echo %line2% -echo *** Office Status *** -echo %line2% -set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%wspp%" "%wsps%" "%spp_get%" - call :casWout - echo %line3% - echo. -) -set verbose=0 -if defined osppsvc goto :casWospp -goto :casWend - -:casWospp -if %verbose% EQU 1 ( -echo %line2% -echo *** Office Status *** -echo %line2% -) -set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -if defined ospp15 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%ospp%" "%osps%" "%ospp_get%" - call :casWout - echo %line3% - echo. -) -set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o14App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" -if defined ospp14 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( - set "chkID=%%#" - call :casWdet "%ospp%" "%osps%" "%ospp_get%" - call :casWout - echo %line3% - echo. -) -goto :casWend - -:casWpkey -set "_qr=%_zz1% %1 %_zz2% %_zz5%ApplicationID='%2' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz4%" -%_qr% 2>nul | findstr /i ID 1>nul && (set %3=1&set %4=1) -exit /b - -:casWdet -for %%# in (%~3) do set "%%#=" -if /i %~1==%ospp% for %%# in (DiscoveredKeyManagementServiceMachineIpAddress, KeyManagementServiceLookupDomain, ProductKeyChannel, VLActivationTypeEnabled) do set "%%#=" -set "cKmsClient=" -set "cTblClient=" -set "cAvmClient=" -set "ExpireMsg=" -set "_xpr=" -set "_qr="wmic path %~1 where ID='%chkID%' get %~3 /value" ^| findstr ^=" -if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~1 "ID='%chkID%'" "%~3"" -for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" - -set /a _gpr=(GracePeriodRemaining+1440-1)/1440 -echo %Description%| findstr /i VOLUME_KMSCLIENT 1>nul && (set cKmsClient=1&set _mTag=Volume) -echo %Description%| findstr /i TIMEBASED_ 1>nul && (set cTblClient=1&set _mTag=Timebased) -echo %Description%| findstr /i VIRTUAL_MACHINE_ACTIVATION 1>nul && (set cAvmClient=1&set _mTag=Automatic VM) -cmd /c exit /b %LicenseStatusReason% -set "LicenseReason=%=ExitCode%" -set "LicenseMsg=Time remaining: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" -if %_gpr% GEQ 1 if %_WSH% EQU 1 ( -for /f "tokens=* delims=" %%# in ('%_csx% %GracePeriodRemaining%') do set "_xpr=%%#" -) -if %_gpr% GEQ 1 if %_prsh% EQU 1 if not defined _xpr ( -for /f "tokens=* delims=" %%# in ('%_psc% "$([DateTime]::Now.addMinutes(%GracePeriodRemaining%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "_xpr=%%#" -title Check Activation Status [wmi] -) - -if %LicenseStatus% EQU 0 ( -set "License=Unlicensed" -set "LicenseMsg=" -) -if %LicenseStatus% EQU 1 ( -set "License=Licensed" -set "LicenseMsg=" -if %GracePeriodRemaining% EQU 0 ( - if %winID% EQU 1 (set "ExpireMsg=The machine is permanently activated.") else (set "ExpireMsg=The product is permanently activated.") - ) else ( - set "LicenseMsg=%_mTag% activation expiration: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" - if defined _xpr set "ExpireMsg=%_mTag% activation will expire %_xpr%" - ) -) -if %LicenseStatus% EQU 2 ( -set "License=Initial grace period" -if defined _xpr set "ExpireMsg=Initial grace period ends %_xpr%" -) -if %LicenseStatus% EQU 3 ( -set "License=Additional grace period (KMS license expired or hardware out of tolerance)" -if defined _xpr set "ExpireMsg=Additional grace period ends %_xpr%" -) -if %LicenseStatus% EQU 4 ( -set "License=Non-genuine grace period." -if defined _xpr set "ExpireMsg=Non-genuine grace period ends %_xpr%" -) -if %LicenseStatus% EQU 6 ( -set "License=Extended grace period" -if defined _xpr set "ExpireMsg=Extended grace period ends %_xpr%" -) -if %LicenseStatus% EQU 5 ( -set "License=Notification" - if "%LicenseReason%"=="C004F200" (set "LicenseMsg=Notification Reason: 0xC004F200 (non-genuine)." - ) else if "%LicenseReason%"=="C004F009" (set "LicenseMsg=Notification Reason: 0xC004F009 (grace time expired)." - ) else (set "LicenseMsg=Notification Reason: 0x%LicenseReason%" - ) -) -if %LicenseStatus% GTR 6 ( -set "License=Unknown" -set "LicenseMsg=" -) -if not defined cKmsClient exit /b - -if %KeyManagementServicePort%==0 set KeyManagementServicePort=1688 -set "KmsReg=Registered KMS machine name: %KeyManagementServiceMachine%:%KeyManagementServicePort%" -if "%KeyManagementServiceMachine%"=="" set "KmsReg=Registered KMS machine name: KMS name not available" - -if %DiscoveredKeyManagementServiceMachinePort%==0 set DiscoveredKeyManagementServiceMachinePort=1688 -set "KmsDns=KMS machine name from DNS: %DiscoveredKeyManagementServiceMachineName%:%DiscoveredKeyManagementServiceMachinePort%" -if "%DiscoveredKeyManagementServiceMachineName%"=="" set "KmsDns=DNS auto-discovery: KMS name not available" - -set "_qr="wmic path %~2 get ClientMachineID, KeyManagementServiceHostCaching /value" ^| findstr ^=" -if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~2 "ClientMachineID, KeyManagementServiceHostCaching"" -for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" -if /i %KeyManagementServiceHostCaching%==True (set KeyManagementServiceHostCaching=Enabled) else (set KeyManagementServiceHostCaching=Disabled) - -if %winbuild% LSS 9200 exit /b -if /i %~1==%ospp% exit /b - -if "%KeyManagementServiceLookupDomain%"=="" set "KeyManagementServiceLookupDomain=" - -if %VLActivationTypeEnabled% EQU 3 ( -set VLActivationType=Token -) else if %VLActivationTypeEnabled% EQU 2 ( -set VLActivationType=KMS -) else if %VLActivationTypeEnabled% EQU 1 ( -set VLActivationType=AD -) else ( -set VLActivationType=All -) - -if %winbuild% LSS 9600 exit /b -if "%DiscoveredKeyManagementServiceMachineIpAddress%"=="" set "DiscoveredKeyManagementServiceMachineIpAddress=not available" -exit /b - -:casWout -echo. -echo Name: %Name% -echo Description: %Description% -echo Activation ID: %ID% -echo Extended PID: %ProductKeyID% -if defined ProductKeyChannel echo Product Key Channel: %ProductKeyChannel% -echo Partial Product Key: %PartialProductKey% -echo License Status: %License% -if defined LicenseMsg echo %LicenseMsg% -if not %LicenseStatus%==0 if not %EvaluationEndDate:~0,8%==16010101 echo Evaluation End Date: %EvaluationEndDate:~0,4%-%EvaluationEndDate:~4,2%-%EvaluationEndDate:~6,2% %EvaluationEndDate:~8,2%:%EvaluationEndDate:~10,2% UTC -if not defined cKmsClient ( -if defined ExpireMsg echo.&echo. %ExpireMsg% -exit /b -) -if defined VLActivationTypeEnabled echo Configured Activation Type: %VLActivationType% -echo. -if not %LicenseStatus%==1 ( -echo Please activate the product in order to update KMS client information values. -exit /b -) -echo Most recent activation information: -echo Key Management Service client information -echo. Client Machine ID (CMID): %ClientMachineID% -echo. %KmsDns% -echo. %KmsReg% -if defined DiscoveredKeyManagementServiceMachineIpAddress echo. KMS machine IP address: %DiscoveredKeyManagementServiceMachineIpAddress% -echo. KMS machine extended PID: %KeyManagementServiceProductKeyID% -echo. Activation interval: %VLActivationInterval% minutes -echo. Renewal interval: %VLRenewalInterval% minutes -echo. K.M.S host caching: %KeyManagementServiceHostCaching% -if defined KeyManagementServiceLookupDomain echo. KMS SRV record lookup domain: %KeyManagementServiceLookupDomain% -if defined ExpireMsg echo.&echo. %ExpireMsg% -exit /b - -:casWend -if %_Identity% EQU 1 if %_prsh% EQU 1 ( -echo %line2% -echo *** Office vNext Status *** -echo %line2% -setlocal EnableDelayedExpansion -%_psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':vNextDiag\:.*';iex ($f[1])" -title Check Activation Status [wmi] -echo %line3% -echo. -) -echo. -echo Press any key to exit. -pause >nul -exit /b - -:vNextDiag: -function PrintModePerPridFromRegistry -{ - $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" - $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} - If ($vNextPrids -Eq $null) - { - Write-Host "No registry keys found." - Return - } - $vNextPrids | ForEach ` - { - $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ - Switch ($mode) - { - 2 { $mode = "vNext"; Break } - 3 { $mode = "Device"; Break } - Default { $mode = "Legacy"; Break } - } - Write-Host $_ = $mode - } -} -function PrintSharedComputerLicensing -{ - $scaRegKey = "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" - $scaValue = Get-ItemProperty -Path $scaRegKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - $scaRegKey2 = "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" - $scaValue2 = Get-ItemProperty -Path $scaRegKey2 -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - $scaPolicyKey = "HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\Licensing" - $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore - If ($scaValue -Eq $null -And $scaValue2 -Eq $null -And $scaPolicyValue -Eq $null) - { - Write-Host "No registry keys found." - Return - } - $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue - If ($scaModeValue -Eq 0) - { - $scaMode = "Disabled" - } - If ($scaModeValue -Eq 1) - { - $scaMode = "Enabled" - } - Write-Host "SharedComputerLicensing" = $scaMode - Write-Host - $tokenFiles = $null - $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" - If (Test-Path $tokenPath) - { - $tokenFiles = Get-ChildItem -Path $tokenPath -Recurse -File -Filter "*authString*" - } - If ($tokenFiles.length -Eq 0) - { - Write-Host "No tokens found." - Return - } - $tokenFiles | ForEach ` - { - $tokenParts = (Get-Content -Encoding Unicode -Path $_.FullName).Split('_') - $output = [PSCustomObject] ` - @{ - ACID = $tokenParts[0]; - User = $tokenParts[3] - NotBefore = $tokenParts[4]; - NotAfter = $tokenParts[5]; - } | ConvertTo-Json - Write-Host $output - } -} -function PrintLicensesInformation -{ - Param( - [ValidateSet("NUL", "Device")] - [String]$mode - ) - If ($mode -Eq "NUL") - { - $licensePath = "${env:LOCALAPPDATA}\Microsoft\Office\Licenses" - } - ElseIf ($mode -Eq "Device") - { - $licensePath = "${env:PROGRAMDATA}\Microsoft\Office\Licenses" - } - $licenseFiles = $null - If (Test-Path $licensePath) - { - $licenseFiles = Get-ChildItem -Path $licensePath -Recurse -File - } - If ($licenseFiles.length -Eq 0) - { - Write-Host "No licenses found." - Return - } - $licenseFiles | ForEach ` - { - $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License - $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json - $licenseType = $decodedLicense.LicenseType - If ($null -Ne $decodedLicense.ExpiresOn) - { - $expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48) - } - Else - { - $expiry = New-Object DateTime - } - $licenseState = $null - If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter)) - { - $licenseState = "RFM" - } - ElseIf ((Get-Date) -Lt (Get-Date $expiry)) - { - $licenseState = "Licensed" - } - Else - { - $licenseState = "Grace" - } - if ($mode -Eq "NUL") - { - $output = [PSCustomObject] ` - @{ - Version = $_.Directory.Name - Type = "User|${licenseType}"; - Product = $decodedLicense.ProductReleaseId; - Acid = $decodedLicense.Acid; - LicenseState = $licenseState; - EntitlementStatus = $decodedLicense.Status; - EntitlementExpiration = $decodedLicense.ExpiresOn; - ReasonCode = $decodedLicense.ReasonCode; - NotBefore = $decodedLicense.Metadata.NotBefore; - NotAfter = $decodedLicense.Metadata.NotAfter; - NextRenewal = $decodedLicense.Metadata.RenewAfter; - TenantId = $decodedLicense.Metadata.TenantId; - } | ConvertTo-Json - } - ElseIf ($mode -Eq "Device") - { - $output = [PSCustomObject] ` - @{ - Version = $_.Directory.Name - Type = "Device|${licenseType}"; - Product = $decodedLicense.ProductReleaseId; - Acid = $decodedLicense.Acid; - DeviceId = $decodedLicense.Metadata.DeviceId; - LicenseState = $licenseState; - EntitlementStatus = $decodedLicense.Status; - EntitlementExpiration = $decodedLicense.ExpiresOn; - ReasonCode = $decodedLicense.ReasonCode; - NotBefore = $decodedLicense.Metadata.NotBefore; - NotAfter = $decodedLicense.Metadata.NotAfter; - NextRenewal = $decodedLicense.Metadata.RenewAfter; - TenantId = $decodedLicense.Metadata.TenantId; - } | ConvertTo-Json - } - Write-Output $output - } -} - Write-Host - Write-Host "========== Mode per ProductReleaseId ==========" - Write-Host -PrintModePerPridFromRegistry - Write-Host - Write-Host "========== Shared Computer Licensing ==========" - Write-Host -PrintSharedComputerLicensing - Write-Host - Write-Host "========== vNext licenses ==========" - Write-Host -PrintLicensesInformation -Mode "NUL" - Write-Host - Write-Host "========== Device licenses ==========" - Write-Host -PrintLicensesInformation -Mode "Device" -:vNextDiag: -::=================================================== -:: Leave empty line below diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd new file mode 100644 index 0000000..a9ba6a4 --- /dev/null +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -0,0 +1,1038 @@ +@echo off + + +:: Check-Activation-Status +:: Written by @abbodi1406 +:: https://gravesoft.dev/cas + + +:: 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 "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) + +set "ComSpec=%SysPath%\cmd.exe" +set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" + +set "_psc=powershell -nop -c" +set "_err===== ERROR ====" +set _pwsh=1 +for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _pwsh=0 +cmd /c "%_psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" 1>nul || (set _pwsh=0) +if %_pwsh% equ 0 ( +echo %_err% +cmd /c "%_psc% "$ExecutionContext.SessionState.LanguageMode"" +echo Windows PowerShell is not working correctly. +echo It is required for this script to work. +goto :E_Exit +) +set "_batf=%~f0" +set "_batp=%_batf:'=''%" +setlocal EnableDelayedExpansion +%_psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';iex ($f[1])" + +:E_Exit +echo. +echo Press 0 key to exit. +choice /c 0 /n +exit /b + +:sppmgr: +function ExitScript($ExitCode = 0) +{ + Exit $ExitCode +} + +if (-Not $PSVersionTable) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Windows PowerShell 1.0 is not supported by this script.' + ExitScript 1 +} + +if ($ExecutionContext.SessionState.LanguageMode.value__ -NE 0) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Windows PowerShell is not running in Full Language Mode.' + ExitScript 1 +} + +$winbuild = 1 +try { + $winbuild = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$env:SystemRoot\System32\kernel32.dll").FileBuildPart +} catch { + $winbuild = [int](Get-WmiObject Win32_OperatingSystem).BuildNumber +} + +if ($winbuild -EQ 1) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'Could not detect Windows build.' + ExitScript 1 +} + +if ($winbuild -LT 2600) { + Write-Host "==== ERROR ====`r`n" + Write-Host 'This build of Windows is not supported by this script.' + ExitScript 1 +} + +$NT6 = $winbuild -GE 6000 +$NT7 = $winbuild -GE 7600 +$NT9 = $winbuild -GE 9600 + +$Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) + +$line2 = "============================================================" +$line3 = "____________________________________________________________" + +function echoWindows +{ + Write-Host "$line2" + Write-Host "=== Windows Status ===" + Write-Host "$line2" + if (!$All.IsPresent) {Write-Host} +} + +function echoOffice +{ + if ($doMSG -EQ 0) { + return + } + + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office Status ===" + Write-Host "$line2" + if (!$All.IsPresent) {Write-Host} + + $script:doMSG = 0 +} + +function strGetRegistry($strKey, $strName) +{ +Get-ItemProperty -EA 0 $strKey | select -EA 0 -Expand $strName +} + +function CheckOhook +{ + $ohook = 0 + $paths = "${env:ProgramFiles}", "${env:ProgramW6432}", "${env:ProgramFiles(x86)}" + + 15, 16 | foreach ` + { + $A = $_; $paths | foreach ` + { + if (Test-Path "$($_)$('\Microsoft Office\Office')$($A)$('\sppc*dll')") {$ohook = 1} + } + } + + "System", "SystemX86" | foreach ` + { + $A = $_; "Office 15", "Office" | foreach ` + { + $B = $_; $paths | foreach ` + { + if (Test-Path "$($_)$('\Microsoft ')$($B)$('\root\vfs\')$($A)$('\sppc*dll')") {$ohook = 1} + } + } + } + + if ($ohook -EQ 0) { + return + } + + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office Ohook Status ===" + Write-Host "$line2" + Write-Host + Write-Host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.' + Write-Host -back 'Black' -fore 'Yellow' 'You can ignore the below mentioned Office activation status.' + if (!$All.IsPresent) {Write-Host} +} + +#region WMI +function DetectID($strSLP, $strAppId, [ref]$strAppVar) +{ + $fltr = "ApplicationID='$strAppId'" + if (!$All.IsPresent) { + $fltr = $fltr + " AND PartialProductKey <> NULL" + } + Get-WmiObject $strSLP ID -Filter $fltr -EA 0 | select ID -EA 0 | foreach { + $strAppVar.Value = 1 + } +} + +function GetID($strSLP, $strAppId, $strProperty = "ID") +{ + $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $IDs = [Collections.ArrayList]@() + + if ($All.IsPresent) { + $fltr = "ApplicationID='$strAppId' AND PartialProductKey IS NULL" + $clause = $fltr + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn <> NULL" + } + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn IS NULL" + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + } + } + + $fltr = "ApplicationID='$strAppId' AND PartialProductKey <> NULL" + $clause = $fltr + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn <> NULL" + } + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + if (-Not $NT5) { + $clause = $fltr + " AND LicenseDependsOn IS NULL" + Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + } + + return $IDs +} + +function DetectSubscription { + if ($null -EQ $objSvc.SubscriptionType -Or $objSvc.SubscriptionType -EQ 120) { + return + } + + if ($objSvc.SubscriptionType -EQ 1) { + $SubMsgType = "Device based" + } else { + $SubMsgType = "User based" + } + + if ($objSvc.SubscriptionStatus -EQ 120) { + $SubMsgStatus = "Expired" + } elseif ($objSvc.SubscriptionStatus -EQ 100) { + $SubMsgStatus = "Disabled" + } elseif ($objSvc.SubscriptionStatus -EQ 1) { + $SubMsgStatus = "Active" + } else { + $SubMsgStatus = "Not active" + } + + $SubMsgExpiry = "Unknown" + if ($objSvc.SubscriptionExpiry) { + if ($objSvc.SubscriptionExpiry.Contains("unspecified") -EQ $false) {$SubMsgExpiry = $objSvc.SubscriptionExpiry} + } + + $SubMsgEdition = "Unknown" + if ($objSvc.SubscriptionEdition) { + if ($objSvc.SubscriptionEdition.Contains("UNKNOWN") -EQ $false) {$SubMsgEdition = $objSvc.SubscriptionEdition} + } + + Write-Host + Write-Host "Subscription information:" + Write-Host " Edition: $SubMsgEdition" + Write-Host " Type : $SubMsgType" + Write-Host " Status : $SubMsgStatus" + Write-Host " Expiry : $SubMsgExpiry" +} + +function DetectAvmClient +{ + Write-Host + Write-Host "Automatic VM Activation client information:" + if (-Not [String]::IsNullOrEmpty($IAID)) { + Write-Host " Guest IAID: $IAID" + } else { + Write-Host " Guest IAID: Not Available" + } + if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { + Write-Host " Host machine name: $AutomaticVMActivationHostMachineName" + } else { + Write-Host " Host machine name: Not Available" + } + if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { + $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + Write-Host " Activation time: $EED UTC" + } else { + Write-Host " Activation time: Not Available" + } + if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { + Write-Host " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + } else { + Write-Host " Host Digital PID2: Not Available" + } +} + +function DetectKmsHost +{ + if ($Vista -Or $NT5) { + $KeyManagementServiceListeningPort = strGetRegistry $SLKeyPath "KeyManagementServiceListeningPort" + $KeyManagementServiceDnsPublishing = strGetRegistry $SLKeyPath "DisableDnsPublishing" + $KeyManagementServiceLowPriority = strGetRegistry $SLKeyPath "EnableKmsLowPriority" + if (-Not $KeyManagementServiceDnsPublishing) {$KeyManagementServiceDnsPublishing = "TRUE"} + if (-Not $KeyManagementServiceLowPriority) {$KeyManagementServiceLowPriority = "FALSE"} + } else { + $KeyManagementServiceListeningPort = $objSvc.KeyManagementServiceListeningPort + $KeyManagementServiceDnsPublishing = $objSvc.KeyManagementServiceDnsPublishing + $KeyManagementServiceLowPriority = $objSvc.KeyManagementServiceLowPriority + } + + if (-Not $KeyManagementServiceListeningPort) {$KeyManagementServiceListeningPort = 1688} + if ($KeyManagementServiceDnsPublishing -EQ "TRUE") { + $KeyManagementServiceDnsPublishing = "Enabled" + } else { + $KeyManagementServiceDnsPublishing = "Disabled" + } + if ($KeyManagementServiceLowPriority -EQ "TRUE") { + $KeyManagementServiceLowPriority = "Low" + } else { + $KeyManagementServiceLowPriority = "Normal" + } + + Write-Host + Write-Host "Key Management Service host information:" + Write-Host " Current count: $KeyManagementServiceCurrentCount" + Write-Host " Listening on Port: $KeyManagementServiceListeningPort" + Write-Host " DNS publishing: $KeyManagementServiceDnsPublishing" + Write-Host " KMS priority: $KeyManagementServiceLowPriority" + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { + Write-Host + Write-Host "Key Management Service cumulative requests received from clients:" + Write-Host " Total: $KeyManagementServiceTotalRequests" + Write-Host " Failed: $KeyManagementServiceFailedRequests" + Write-Host " Unlicensed: $KeyManagementServiceUnlicensedRequests" + Write-Host " Licensed: $KeyManagementServiceLicensedRequests" + Write-Host " Initial grace period: $KeyManagementServiceOOBGraceRequests" + Write-Host " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + Write-Host " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + Write-Host " Notification: $KeyManagementServiceNotificationRequests" + } +} + +function DetectKmsClient +{ + if ($null -NE $VLActivationTypeEnabled) {Write-Host "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + Write-Host + if ($LicenseStatus -NE 1) { + Write-Host "Please activate the product in order to update KMS client information values." + return + } + + if ($Vista) { + $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" + $DiscoveredKeyManagementServiceMachineName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" + $DiscoveredKeyManagementServiceMachinePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + } + + if ([String]::IsNullOrEmpty($KeyManagementServiceMachine)) { + $KmsReg = $null + } else { + if (-Not $KeyManagementServicePort) {$KeyManagementServicePort = 1688} + $KmsReg = "Registered KMS machine name: ${KeyManagementServiceMachine}:${KeyManagementServicePort}" + } + + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineName)) { + $KmsDns = "DNS auto-discovery: KMS name not available" + if ($Vista -And -Not $Admin) {$KmsDns = "DNS auto-discovery: Run the script as administrator to retrieve info"} + } else { + if (-Not $DiscoveredKeyManagementServiceMachinePort) {$DiscoveredKeyManagementServiceMachinePort = 1688} + $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceMachineName}:${DiscoveredKeyManagementServiceMachinePort}" + } + + if ($null -NE $objSvc.KeyManagementServiceHostCaching) { + if ($objSvc.KeyManagementServiceHostCaching -EQ "TRUE") { + $KeyManagementServiceHostCaching = "Enabled" + } else { + $KeyManagementServiceHostCaching = "Disabled" + } + } + + Write-Host "Key Management Service client information:" + Write-Host " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + if ($null -EQ $KmsReg) { + Write-Host " $KmsDns" + Write-Host " Registered KMS machine name: KMS name not available" + } else { + Write-Host " $KmsReg" + } + if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {Write-Host " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} + Write-Host " KMS machine extended PID: $KeyManagementServiceProductKeyID" + Write-Host " Activation interval: $VLActivationInterval minutes" + Write-Host " Renewal interval: $VLRenewalInterval minutes" + if ($null -NE $KeyManagementServiceHostCaching) {Write-Host " KMS host caching: $KeyManagementServiceHostCaching"} + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {Write-Host " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} +} + +function GetResult($strSLP, $strSLS, $strID) +{ + try {$objPrd = Get-WmiObject $strSLP -Filter "ID='$strID'" -EA 1} catch {return} + $objPrd | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + } + + $winID = ($ApplicationID -EQ $winApp) + $winPR = ($winID -And -Not $LicenseIsAddon) + $Vista = ($winID -And $NT6 -And -Not $NT7) + $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + + if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} + if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} + if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} + if ($null -EQ $cKmsClient) { + if ($Description | Select-String "VOLUME_KMS") {$cKmsHost = 1} + } + + $_gpr = [Math]::Round($GracePeriodRemaining/1440) + if ($_gpr -GT 0) { + $_xpr = [DateTime]::Now.addMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') + } + + if ($null -EQ $LicenseStatusReason) {$LicenseStatusReason = -1} + $LicenseReason = '0x{0:X}' -f $LicenseStatusReason + $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" + if ($LicenseStatus -EQ 0) { + $LicenseInf = "Unlicensed" + $LicenseMsg = $null + } + if ($LicenseStatus -EQ 1) { + $LicenseInf = "Licensed" + $LicenseMsg = $null + if ($GracePeriodRemaining -EQ 0) { + if ($winPR) {$ExpireMsg = "The machine is permanently activated."} else {$ExpireMsg = "The product is permanently activated."} + } else { + $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" + if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} + } + } + if ($LicenseStatus -EQ 2) { + $LicenseInf = "Initial grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Initial grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 3) { + $LicenseInf = "Additional grace period (KMS license expired or hardware out of tolerance)" + if ($null -NE $_xpr) {$ExpireMsg = "Additional grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 4) { + $LicenseInf = "Non-genuine grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Non-genuine grace period ends $_xpr"} + } + if ($LicenseStatus -EQ 5 -And -Not $NT5) { + $LicenseInf = "Notification" + $LicenseMsg = "Notification Reason: $LicenseReason" + if ($LicenseReason -EQ "0xC004F200") {$LicenseMsg = $LicenseMsg + " (non-genuine)."} + if ($LicenseReason -EQ "0xC004F009") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} + } + if ($LicenseStatus -GT 5 -Or ($LicenseStatus -GT 4 -And $NT5)) { + $LicenseInf = "Unknown" + $LicenseMsg = $null + } + if ($LicenseStatus -EQ 6 -And -Not $Vista -And -Not $NT5) { + $LicenseInf = "Extended grace period" + if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} + } + + if ($winPR -And $PartialProductKey -And -Not $NT9) { + $dp4 = Get-ItemProperty -EA 0 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | select -EA 0 -Expand DigitalProductId4 + if ($null -NE $dp4) { + $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) + } + } + + if ($All.IsPresent) {Write-Host} + Write-Host "Name: $Name" + Write-Host "Description: $Description" + Write-Host "Activation ID: $ID" + if ($null -NE $ProductKeyID) {Write-Host "Extended PID: $ProductKeyID"} + if ($null -NE $OfflineInstallationId -And $IID.IsPresent) {Write-Host "Installation ID: $OfflineInstallationId"} + if ($null -NE $ProductKeyChannel) {Write-Host "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $PartialProductKey) {Write-Host "Partial Product Key: $PartialProductKey"} else {Write-Host "Product Key: Not installed"} + Write-Host "License Status: $LicenseInf" + if ($null -NE $LicenseMsg) {Write-Host "$LicenseMsg"} + if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { + $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + Write-Host "Evaluation End Date: $EED UTC" + } + + if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { + DetectAvmClient + } + + $chkSub = ($winPR -And $cSub) + + $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) + + if (!$chkSLS) { + if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + return + } + + $objSvc = Get-WmiObject $strSLS -EA 0 + + if ($Vista) { + $objSvc | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + } + } + + if ($strSLS -EQ $wsls -And $NT9) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineIpAddress)) { + $DiscoveredKeyManagementServiceMachineIpAddress = "not available" + } + } + + if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { + DetectKmsHost + } + + if ($null -NE $cKmsClient) { + DetectKmsClient + } + + if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + + if ($chkSub) { + DetectSubscription + } + +} +#endregion + +#region vNextDiag +if ($PSVersionTable.PSVersion.Major -Lt 3) +{ + function ConvertFrom-Json + { + [CmdletBinding()] + Param( + [Parameter(ValueFromPipeline=$true)][Object]$item + ) + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") + $psjs = New-Object System.Web.Script.Serialization.JavaScriptSerializer + Return ,$psjs.DeserializeObject($item) + } + function ConvertTo-Json + { + [CmdletBinding()] + Param( + [Parameter(ValueFromPipeline=$true)][Object]$item + ) + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") + $psjs = New-Object System.Web.Script.Serialization.JavaScriptSerializer + Return $psjs.Serialize($item) + } +} + +function PrintModePerPridFromRegistry +{ + $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" + $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty 'property' -ErrorAction SilentlyContinue | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} + If ($null -Eq $vNextPrids) + { + Write-Host + Write-Host "No registry keys found." + Return + } + Write-Host + $vNextPrids | ForEach ` + { + $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ + Switch ($mode) + { + 2 { $mode = "vNext"; Break } + 3 { $mode = "Device"; Break } + Default { $mode = "Legacy"; Break } + } + Write-Host $_ = $mode + } +} + +function PrintSharedComputerLicensing +{ + $scaRegKey = "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" + $scaValue = Get-ItemProperty -Path $scaRegKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + $scaRegKey2 = "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" + $scaValue2 = Get-ItemProperty -Path $scaRegKey2 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + $scaPolicyKey = "HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\Licensing" + $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue + If ($null -Eq $scaValue -And $null -Eq $scaValue2 -And $null -Eq $scaPolicyValue) + { + Write-Host + Write-Host "No registry keys found." + Return + } + $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue + If ($scaModeValue -Eq 0) + { + $scaMode = "Disabled" + } + If ($scaModeValue -Eq 1) + { + $scaMode = "Enabled" + } + Write-Host + Write-Host "Status:" $scaMode + Write-Host + $tokenFiles = $null + $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" + If (Test-Path $tokenPath) + { + $tokenFiles = Get-ChildItem -Path $tokenPath -Filter "*authString*" -Recurse | Where-Object { !$_.PSIsContainer } + } + If ($null -Eq $tokenFiles) + { + Write-Host "No tokens found." + Return + } + If ($tokenFiles.Length -Eq 0) + { + Write-Host "No tokens found." + Return + } + $tokenFiles | ForEach ` + { + $tokenParts = (Get-Content -Encoding Unicode -Path $_.FullName).Split('_') + $output = New-Object PSObject + $output | Add-Member 8 'ACID' $tokenParts[0]; + $output | Add-Member 8 'User' $tokenParts[3]; + $output | Add-Member 8 'NotBefore' $tokenParts[4]; + $output | Add-Member 8 'NotAfter' $tokenParts[5]; + Write-Output $output + } +} + +function PrintLicensesInformation +{ + Param( + [ValidateSet("NUL", "Device")] + [String]$mode + ) + If ($mode -Eq "NUL") + { + $licensePath = "${env:LOCALAPPDATA}\Microsoft\Office\Licenses" + } + ElseIf ($mode -Eq "Device") + { + $licensePath = "${env:PROGRAMDATA}\Microsoft\Office\Licenses" + } + $licenseFiles = $null + If (Test-Path $licensePath) + { + $licenseFiles = Get-ChildItem -Path $licensePath -Recurse | Where-Object { !$_.PSIsContainer } + } + If ($null -Eq $licenseFiles) + { + Write-Host + Write-Host "No licenses found." + Return + } + If ($licenseFiles.Length -Eq 0) + { + Write-Host + Write-Host "No licenses found." + Return + } + $licenseFiles | ForEach ` + { + $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License + $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json + $licenseType = $decodedLicense.LicenseType + If ($null -Ne $decodedLicense.ExpiresOn) + { + $expiry = [System.DateTime]::Parse($decodedLicense.ExpiresOn, $null, 'AdjustToUniversal') + } + Else + { + $expiry = New-Object System.DateTime + } + $licenseState = "Grace" + If ((Get-Date) -Gt (Get-Date $decodedLicense.Metadata.NotAfter)) + { + $licenseState = "RFM" + } + ElseIf ((Get-Date) -Lt (Get-Date $expiry)) + { + $licenseState = "Licensed" + } + $output = New-Object PSObject + $output | Add-Member 8 'File' $_.PSChildName; + $output | Add-Member 8 'Version' $_.Directory.Name; + $output | Add-Member 8 'Type' "User|${licenseType}"; + $output | Add-Member 8 'Product' $decodedLicense.ProductReleaseId; + $output | Add-Member 8 'Acid' $decodedLicense.Acid; + If ($mode -Eq "Device") { $output | Add-Member 8 'DeviceId' $decodedLicense.Metadata.DeviceId; } + $output | Add-Member 8 'LicenseState' $licenseState; + $output | Add-Member 8 'EntitlementStatus' $decodedLicense.Status; + $output | Add-Member 8 'EntitlementExpiration' ("N/A", $decodedLicense.ExpiresOn)[!($null -eq $decodedLicense.ExpiresOn)]; + $output | Add-Member 8 'ReasonCode' ("N/A", $decodedLicense.ReasonCode)[!($null -eq $decodedLicense.ReasonCode)]; + $output | Add-Member 8 'NotBefore' $decodedLicense.Metadata.NotBefore; + $output | Add-Member 8 'NotAfter' $decodedLicense.Metadata.NotAfter; + $output | Add-Member 8 'NextRenewal' $decodedLicense.Metadata.RenewAfter; + $output | Add-Member 8 'TenantId' ("N/A", $decodedLicense.Metadata.TenantId)[!($null -eq $decodedLicense.Metadata.TenantId)]; + #$output.PSObject.Properties | foreach { $ht = @{} } { $ht[$_.Name] = $_.Value } { $output = $ht | ConvertTo-Json } + Write-Output $output + } +} + +function vNextDiagRun +{ + $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $rPID = $null -NE (GP "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" -EA 0 | select -Expand 'property' -EA 0 | where -Filter {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}) + $rSCA = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) + $rSCL = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) + + if (($fNUL -Or $fDev -Or $rPID -Or $rSCA -Or $rSCL) -EQ $false) { + Return + } + + if ($All.IsPresent) {Write-Host} + Write-Host "$line2" + Write-Host "=== Office vNext Status ===" + Write-Host "$line2" + Write-Host + Write-Host "========== Mode per ProductReleaseId ==========" + PrintModePerPridFromRegistry + Write-Host + Write-Host "========== Shared Computer Licensing ==========" + PrintSharedComputerLicensing + Write-Host + Write-Host "========== vNext licenses ===========" + PrintLicensesInformation -Mode "NUL" + Write-Host + Write-Host "========== Device licenses ==========" + PrintLicensesInformation -Mode "Device" + Write-Host "$line3" + Write-Host +} +#endregion + +#region clic + +<# +;;; Source: https://github.com/asdcorp/clic +;;; Powershell port: abbodi1406 + +Copyright 2023 asdcorp + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#> + +function BoolToWStr($bVal) { + ("TRUE", "FALSE")[!$bVal] +} + +function InitializePInvoke { + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random)) + + $Class = $Module.DefineType('NativeMethods', 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') + $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + + if ($DllSubscription) { + $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) + [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') + [void]$Struct.DefineField('dwSku', [UInt32], 6) + [void]$Struct.DefineField('dwState', [UInt32], 6) + $SubStatus = $Struct.CreateType() + } + + $Win32 = $Class.CreateType() +} + +function InitializeDigitalLicenseCheck { + $CAB = [System.Reflection.Emit.CustomAttributeBuilder] + + $ICom = $Module.DefineType('EUM.IEUM', 'Public, Interface, Abstract, Import') + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.ComImportAttribute].GetConstructor(@()), @())) + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.GuidAttribute].GetConstructor(@([String])), @('F2DCB80D-0670-44BC-9002-CD18688730AF'))) + $ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.InterfaceTypeAttribute].GetConstructor(@([Int16])), @([Int16]1))) + + 1..4 | % { [void]$ICom.DefineMethod('VF'+$_, 'Public, Virtual, HideBySig, NewSlot, Abstract', 'Standard, HasThis', [Void], @()) } + [void]$ICom.DefineMethod('AcquireModernLicenseForWindows', 1478, 33, [Int32], @([Int32], [Int32].MakeByRefType())) + + $IEUM = $ICom.CreateType() +} + +function PrintStateData { + $pwszStateData = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-Action-StateData", + [ref]$null, + [ref]$cbSize, + [ref]$pwszStateData + )) { + return $FALSE + } + + [string[]]$pwszStateString = $Marshal::PtrToStringUni($pwszStateData) -replace ";", "`n " + Write-Host " $pwszStateString" + + $Marshal::FreeHGlobal($pwszStateData) + return $TRUE +} + +function PrintLastActivationHRresult { + $pdwLastHResult = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-LastWindowsActivationHResult", + [ref]$null, + [ref]$cbSize, + [ref]$pdwLastHResult + )) { + return $FALSE + } + + Write-Host (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) + + $Marshal::FreeHGlobal($pdwLastHResult) + return $TRUE +} + +function PrintIsWindowsGenuine { + $dwGenuine = 0 + $ppwszGenuineStates = @( + "SL_GEN_STATE_IS_GENUINE", + "SL_GEN_STATE_INVALID_LICENSE", + "SL_GEN_STATE_TAMPERED", + "SL_GEN_STATE_OFFLINE", + "SL_GEN_STATE_LAST" + ) + + if ($Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine)) { + return $FALSE + } + + if ($dwGenuine -lt 5) { + Write-Host (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) + } else { + Write-Host (" IsWindowsGenuine={0}" -f $dwGenuine) + } + + return $TRUE +} + +function PrintDigitalLicenseStatus { + try { + . InitializeDigitalLicenseCheck + $ComObj = New-Object -Com EditionUpgradeManagerObj.EditionUpgradeManager + } catch { + return $FALSE + } + + $parameters = 1, $null + + if ([EUM.IEUM].GetMethod("AcquireModernLicenseForWindows").Invoke($ComObj, $parameters)) { + return $FALSE + } + + $dwReturnCode = $parameters[1] + [bool]$bDigitalLicense = $FALSE + + $bDigitalLicense = (($dwReturnCode -ge 0) -and ($dwReturnCode -ne 1)) + Write-Host (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) + + return $TRUE +} + +function PrintSubscriptionStatus { + $dwSupported = 0 + + if ($winbuild -ge 15063) { + $pwszPolicy = "ConsumeAddonPolicySet" + } else { + $pwszPolicy = "Allow-WindowsSubscription" + } + + if ($Win32::SLGetWindowsInformationDWORD($pwszPolicy, [ref]$dwSupported)) { + return $FALSE + } + + Write-Host (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) + + $pStatus = $Marshal::AllocHGlobal($Marshal::SizeOf([Type]$SubStatus)) + if ($Win32::ClipGetSubscriptionStatus([ref]$pStatus)) { + return $FALSE + } + + $sStatus = [Activator]::CreateInstance($SubStatus) + $sStatus = $Marshal::PtrToStructure($pStatus, [Type]$SubStatus) + $Marshal::FreeHGlobal($pStatus) + + Write-Host (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) + + if ($sStatus.dwEnabled -eq 0) { + return $TRUE + } + + Write-Host (" SubscriptionSku={0}" -f $sStatus.dwSku) + Write-Host (" SubscriptionState={0}" -f $sStatus.dwState) + + return $TRUE +} + +function ClicRun +{ + if ($All.IsPresent) {Write-Host} + Write-Host "Client Licensing Check information:" + + $null = PrintStateData + $null = PrintLastActivationHRresult + $null = PrintIsWindowsGenuine + + if ($DllDigital) { + $null = PrintDigitalLicenseStatus + } + + if ($DllSubscription) { + $null = PrintSubscriptionStatus + } + + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} +} +#endregion + +$Host.UI.RawUI.WindowTitle = "Check Activation Status" + +if ($All.IsPresent) { + $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B;clear; +} + +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + +$wslp = "SoftwareLicensingProduct" +$wsls = "SoftwareLicensingService" +$oslp = "OfficeSoftwareProtectionProduct" +$osls = "OfficeSoftwareProtectionService" +$winApp = "55c92734-d682-4d71-983e-d6ec3f16059f" +$o14App = "59a52881-a989-479d-af46-f275c6370663" +$o15App = "0ff1ce15-a989-479d-af46-f275c6370663" +$cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") +$DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") +$DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") +$VLActTypes = @("All", "AD", "KMS", "Token") +$SLKeyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$NSKeyPath = "Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" + +'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $null} + +$OsppHook = 1 +try {gsv osppsvc -EA 1 | Out-Null} catch {$OsppHook = 0} + +if ($NT7 -Or -Not $NT6) { + try {sasv sppsvc -EA 1} catch {} +} +else +{ + try {sasv slsvc -EA 1} catch {} +} + +DetectID $wslp $winApp ([ref]$cW1nd0ws) +DetectID $wslp $o15App ([ref]$c0ff1ce15) +DetectID $wslp $o14App ([ref]$c0ff1ce14) + +if ($OsppHook -NE 0) { + try {sasv osppsvc -EA 1} catch {} + DetectID $oslp $o15App ([ref]$ospp15) + DetectID $oslp $o14App ([ref]$ospp14) +} + +if ($null -NE $cW1nd0ws) +{ + echoWindows + GetID $wslp $winApp | foreach -EA 1 { + GetResult $wslp $wsls $_ + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} + } +} +elseif ($NT6) +{ + echoWindows + Write-Host + Write-Host "Error: product key not found." +} + +if ($winbuild -GE 9200) { + . InitializePInvoke + ClicRun +} + +if ($c0ff1ce15 -Or $ospp15) { + CheckOhook +} + +$doMSG = 1 + +if ($null -NE $c0ff1ce15) { + echoOffice + GetID $wslp $o15App | foreach -EA 1 { + GetResult $wslp $wsls $_ + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} + } +} + +if ($null -NE $c0ff1ce14) { + echoOffice + GetID $wslp $o14App | foreach -EA 1 { + GetResult $wslp $wsls $_ + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} + } +} + +if ($null -NE $ospp15) { + echoOffice + GetID $oslp $o15App | foreach -EA 1 { + GetResult $oslp $osls $_ + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} + } +} + +if ($null -NE $ospp14) { + echoOffice + GetID $oslp $o14App | foreach -EA 1 { + GetResult $oslp $osls $_ + Write-Host "$line3" + if (!$All.IsPresent) {Write-Host} + } +} + +if ($NT7) { + vNextDiagRun +} + +ExitScript 0 +:sppmgr: diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index aa61f66..53f68cd 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 @@ ::======================================================================================================================================== -:: 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: 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 10 +ping 127.0.0.1 -n 20 ) 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 ) @@ -88,10 +95,11 @@ popd cls color 07 -title Extract $OEM$ Folder %masver% +title Extract $OEM$ Folder %masver% set _args= set _elev= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% @@ -106,54 +114,20 @@ 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 ::======================================================================================================================================== if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. -goto done2 -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. goto done2 ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -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 @@ -171,8 +147,8 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( 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 The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. goto done2 @@ -181,30 +157,83 @@ 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'. +echo Right click on this script and select 'Run as administrator'. 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 @@ -213,24 +242,25 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] 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% "Choose a menu option using your 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 +) ::======================================================================================================================================== @@ -247,7 +277,7 @@ set "_dir=%desktop%\$OEM$\$$\Setup\Scripts" if exist "!desktop!\" ( %eline% -echo Desktop location was not detected, aborting... +echo Unable to detect Desktop location, aborting... goto done2 ) @@ -255,12 +285,12 @@ setlocal EnableDelayedExpansion ::======================================================================================================================================== -mode con cols=78 lines=30 +if not defined terminal mode 78, 30 if exist "!desktop!\$OEM$\" ( echo _____________________________________________________ %eline% -echo $OEM$ folder already exists on the Desktop. +echo The $OEM$ folder already exists on your Desktop. echo _____________________________________________________ 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^) 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% "Choose a menu option using your 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 fltmc >nul || exit /b -call "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-WindowsOffice +call "%~dp0Online_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 endlocal setlocal -call "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Office +call "%~dp0Online_KMS_Activation.cmd" /K-Office endlocal cd \ @@ -601,7 +631,7 @@ call "%~dp0KMS38_Activation.cmd" /KMS38 endlocal setlocal -call "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Office +call "%~dp0Online_KMS_Activation.cmd" /K-Office endlocal cd \ @@ -635,7 +665,7 @@ goto done fltmc >nul || exit /b setlocal -call "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Windows +call "%~dp0Online_KMS_Activation.cmd" /K-Windows endlocal setlocal @@ -651,15 +681,15 @@ cd \ :errorfound %eline% -echo $OEM$ Folder was not created successfully... +echo The script failed to create the $OEM$ folder. goto :done2 :done 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 was successfully created on your Desktop." echo "%oem%" | find /i "38" %nul% && ( echo: echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), @@ -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,21 +772,21 @@ exit /b ::======================================================================================================================================== -:ex_color +:dk_color if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m ) else ( -if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3') +%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 ) else ( -if not exist %psc% (echo %~3%~6) else (%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6') +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' ) exit /b diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 1317df5..46021c3 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,15 +1,12 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion +@set masver=2.7 @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 @@ ::======================================================================================================================================== -:: 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: 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 10 +ping 127.0.0.1 -n 20 ) 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 Troubleshoot %masver% set _args= set _elev= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% @@ -106,39 +114,21 @@ 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) - -call :_colorprep - -set "nceline=echo: &echo ==== ERROR ==== &echo:" -set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" +call :dk_setvar set "line=_________________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. -goto at_done -) - -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. -goto at_done +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done ) ::======================================================================================================================================== -:: Fix special characters limitation in path name +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -147,6 +137,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -156,13 +147,39 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( -%nceline% -echo Script is launched from the temp folder, -echo Most likely you are running the script directly from the archive file. +%eline% +echo The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. -goto at_done +goto dk_done +) +) + +::======================================================================================================================================== + +:: 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 dk_done ) ::======================================================================================================================================== @@ -170,27 +187,54 @@ goto at_done :: 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 -%nceline% +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'. -goto at_done +echo Right click on this script and select 'Run as administrator'. +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 +:: 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 @@ -199,24 +243,25 @@ set -= set old= for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) ) if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Your version of MAS [%masver%] is outdated. echo ________________________________________________ echo: +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Choose a menu option using your 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 +) ::======================================================================================================================================== @@ -230,8 +275,8 @@ if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environ if not defined desktop ( %eline% -echo Desktop location was not detected, aborting... -goto at_done +echo Unable to detect Desktop location, aborting... +goto dk_done ) setlocal EnableDelayedExpansion @@ -243,7 +288,7 @@ setlocal EnableDelayedExpansion cls color 07 title Troubleshoot %masver% -mode con cols=77 lines=30 +if not defined terminal mode 77, 30 echo: echo: @@ -251,7 +296,7 @@ echo: echo: echo: _______________________________________________________________ echo: -call :_color2 %_White% " [1] " %_Green% "Help" +call :dk_color2 %_White% " [1] " %_Green% "Help" echo: ___________________________________________________ echo: echo: [2] Dism RestoreHealth @@ -265,12 +310,12 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :" choice /C:1234560 /N set _erl=%errorlevel% if %_erl%==7 exit /b -if %_erl%==6 start %mas%fix-wpa-registry.html &goto at_menu +if %_erl%==6 start %mas%fix-wpa-registry &goto at_menu if %_erl%==5 goto:retokens if %_erl%==4 goto:fixwmi if %_erl%==3 goto:sfcscan @@ -283,38 +328,38 @@ goto :at_menu :dism_rest cls -mode 98, 30 +if not defined terminal mode 98, 30 title Dism /English /Online /Cleanup-Image /RestoreHealth if %winbuild% LSS 9200 ( %eline% -echo Unsupported OS version Detected. -echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent. +echo Unsupported OS version detected. +echo This command only works on Windows 8/8.1/10/11 and their Server equivalents. goto :at_back ) set _int= for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _int=1) +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) ) echo: if defined _int ( echo Checking Internet Connection [Connected] ) else ( -call :_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" +call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" ) echo %line% echo: -echo Dism uses Windows Update to provide the files required to fix corruption. +echo DISM uses Windows Update to provide replacement files required to fix corruption. echo This will take 5-15 minutes or more.. echo %line% echo: echo Notes: echo: -call :_color2 %_White% " - " %Gray% "Make sure the Internet is connected." -call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working." +call :dk_color2 %_White% " - " %Gray% "Make sure the internet is connected." +call :dk_color2 %_White% " - " %Gray% "Make sure that Windows update is properly working." echo: echo %line% echo: @@ -322,22 +367,29 @@ choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls -mode 110, 30 +if not defined terminal mode 110, 30 + +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + %psc% Stop-Service TrustedInstaller -force %nul% -set _time= -for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul% +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% +del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul% + echo: -echo Applying the command, +echo Applying the command... echo dism /english /online /cleanup-image /restorehealth dism /english /online /cleanup-image /restorehealth -%psc% Stop-Service TrustedInstaller -force %nul% +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul% if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% - -call :compresslog cbs\CBS.log RHealth_CBS %nul% -call :compresslog DISM\dism.log RHealth_DISM %nul% +call :compresslog cbs\cbs_%_time%.log AT_Logs\RHealth_CBS %nul% +call :compresslog DISM\dism_%_time%.log AT_Logs\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% @@ -348,7 +400,7 @@ copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_t ) echo: -call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop." +call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on your desktop." goto :at_back ::======================================================================================================================================== @@ -356,13 +408,14 @@ goto :at_back :sfcscan cls -mode 98, 30 +if not defined terminal mode 98, 30 title sfc /scannow echo: echo %line% echo: -echo System File Checker will repair missing or corrupted system files. +echo SFC will repair missing or corrupted system files. +echo It is recommended you run the DISM option first before this one. echo This will take 10-15 minutes or more.. echo: echo If SFC could not fix something, then run the command again to see if it may be able @@ -375,27 +428,30 @@ choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + %psc% Stop-Service TrustedInstaller -force %nul% -set _time= -for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul% +del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% + echo: -echo Applying the command, +echo Applying the command... echo sfc /scannow sfc /scannow -%psc% Stop-Service TrustedInstaller -force %nul% +timeout /t 5 %nul1% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul% if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% - -call :compresslog cbs\CBS.log SFC_CBS %nul% +call :compresslog cbs\cbs_%_time%.log AT_Logs\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: -call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." +call :dk_color %Gray% "The CBS log was copied to the AT_Logs folder on your Desktop." goto :at_back ::======================================================================================================================================== @@ -403,26 +459,29 @@ goto :at_back :retokens cls -mode con cols=125 lines=32 +if not defined terminal ( +mode 125, 32 %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 ^+ SPP ^+ OSPP^) echo: echo %line% echo: echo Notes: echo: -echo - It helps in troubleshooting activation issues. +echo - This option helps in troubleshooting activation issues. echo: -echo - This option will, -echo - Deactivate Windows and Office, you may need to reactivate -echo If Windows is activated with motherboard / OEM / Digital license then don't worry +echo - This option will: +echo - Deactivate Windows and Office, you may need to reactivate. +echo If Windows is activated with motherboard / OEM / Digital license +echo then Windows will activate itself again. echo: -echo - Clear ClipSVC, Office vNext, SPP and OSPP licenses -echo - Fix SPP permissions of tokens folder and registries +echo - Clear ClipSVC, SPP and OSPP licenses. +echo - Fix permissions of SPP tokens folder and registries. echo - Trigger the repair option for Office. echo: -call :_color2 %_White% " - " %Red% "Apply it only when it is necessary." +call :dk_color2 %_White% " - " %Red% "Apply this option only when it is necessary." echo: echo %line% echo: @@ -439,19 +498,19 @@ cls echo: echo %line% echo: -call :_color %Blue% "Rebuilding ClipSVC Licences" +call :dk_color %Blue% "Rebuilding ClipSVC Licenses..." echo: if %winbuild% LSS 10240 ( -echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent. +echo ClipSVC license rebuilding is supported only on Windows 10/11 and their Server equivalents. echo Skipping... -goto :cleanvnext +goto :rebuildspptok ) -%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && ( +%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && ( echo Windows is permanently activated. -echo Skipping rebuilding ClipSVC licences... -goto :cleanvnext +echo Skipping... +goto :rebuildspptok ) echo Stopping ClipSVC service... @@ -459,7 +518,7 @@ echo Stopping ClipSVC service... timeout /t 2 %nul% echo: -echo Applying the command to Clean ClipSVC Licences... +echo Applying the command to clean ClipSVC Licenses... echo rundll32 clipc.dll,ClipCleanUpState rundll32 clipc.dll,ClipCleanUpState @@ -468,7 +527,7 @@ if %winbuild% LEQ 10240 ( echo [Successful] ) else ( if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) else ( echo [Successful] ) @@ -487,20 +546,20 @@ echo: echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( -call :_color %Red% "[Failed]" -echo Restart the system, that will delete this registry key automatically. +call :dk_color %Red% "[Failed]" +echo Reboot your machine using the restart option, that will delete this registry key automatically. ) || ( echo [Successful] ) -:: Clear HWID token related registry to fix activation incase if there is any corruption +:: Clear HWID token related registry to fix activation incase there is any corruption echo: -echo Deleting a IdentityCRL Registry Key... +echo Deleting IdentityCRL Registry Key... echo [%_ident%] reg delete "%_ident%" /f %nul% reg query "%_ident%" %nul% && ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) || ( echo [Successful] ) @@ -511,160 +570,74 @@ echo [Successful] echo: if %winbuild% GTR 10240 ( -echo Deleting Folder %ProgramData%\Microsoft\Windows\ClipSVC\ +echo Deleting folder %ProgramData%\Microsoft\Windows\ClipSVC\ rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul% if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) else ( echo [Successful] ) echo: -echo Rebuilding Folder %ProgramData%\Microsoft\Windows\ClipSVC\ +echo Rebuilding the %ProgramData%\Microsoft\Windows\ClipSVC\ folder... %psc% Start-Service ClipSVC %nul% timeout /t 3 %nul% if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul% if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) else ( echo [Successful] ) ) echo: -echo Restarting [wlidsvc LicenseManager] services... -for %%# in (wlidsvc LicenseManager) do (%psc% Restart-Service %%# %nul%) - -::======================================================================================================================================== - -:: Find remnants of Office vNext license block and remove it because it stops non vNext licenses from appearing -:: https://learn.microsoft.com/en-us/office/troubleshoot/activation/reset-office-365-proplus-activation-state - -:cleanvnext - -echo: -echo %line% -echo: -call :_color %Blue% "Clearing Office vNext License" -echo: - -setlocal DisableDelayedExpansion -set "_Local=%LocalAppData%" -setlocal EnableDelayedExpansion - -attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul% -attrib -R "!_Local!\Microsoft\Office\Licenses" %nul% - -if exist "!ProgramData!\Microsoft\Office\Licenses\" ( -rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul% -if exist "!ProgramData!\Microsoft\Office\Licenses\" ( -echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\ -) else ( -echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\ -) -) else ( -echo Not Found - !ProgramData!\Microsoft\Office\Licenses\ -) - -if exist "!_Local!\Microsoft\Office\Licenses\" ( -rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul% -if exist "!_Local!\Microsoft\Office\Licenses\" ( -echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\ -) else ( -echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\ -) -) else ( -echo Not Found - !_Local!\Microsoft\Office\Licenses\ -) - - -echo: -for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! HKU\%%a") else (set "_sid=HKU\%%a")) - -set regfound= -for %%# in (HKCU !_sid!) do ( -for %%A in ( -%%#\Software\Microsoft\Office\16.0\Common\Licensing -%%#\Software\Microsoft\Office\16.0\Common\Identity -%%#\Software\Microsoft\Office\16.0\Registration -) do ( -reg query %%A %nul% && ( -set regfound=1 -reg delete %%A /f %nul% && ( -echo Deleted Registry - %%A -) || ( -echo Failed to Delete - %%A -) -) -) -) -if not defined regfound echo Not Found - Office vNext Registry Keys +echo Restarting wlidsvc ^& LicenseManager services... +for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") ::======================================================================================================================================== :: Rebuild SPP Tokens +:rebuildspptok + echo: echo %line% echo: -call :_color %Blue% "Rebuilding SPP Licensing Tokens" +call :dk_color %Blue% "Rebuilding SPP licensing tokens..." echo: call :scandat check if not defined token ( -call :_color %Red% "tokens.dat file not found." +call :dk_color %Red% "tokens.dat file not found." ) else ( echo tokens.dat file: [%token%] ) -echo: -set wpainfo= -for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a) -echo "%wpainfo%" | find /i "Error Found" %nul% && ( -call :_color %Red% "WPA Registry Error: %wpainfo%" -) || ( -echo WPA Registry Count: %wpainfo% -) - set tokenstore= +set badregistry= 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 %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set badregistry=1 +echo: +call :dk_color %Red% "Correct path not found in TokenStore Registry [%tokenstore%]" +) :: Check sppsvc permissions and apply fixes -if %winbuild% GEQ 10240 ( - +if %winbuild% GEQ 9200 if not defined badregistry ( echo: echo Checking SPP permission related issues... call :checkperms - if defined permerror ( - -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% - -for %%# in ( -"HKLM:\SYSTEM\WPA_QueryValues, EnumerateSubKeys, WriteKey" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform_SetValue" -) do for /f "tokens=1,2 delims=_" %%A in (%%#) do ( -set "d=$acl = Get-Acl '%%A';" -set "d=!d! $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', '%%B', 'ContainerInherit, ObjectInherit','None','Allow');" -set "d=!d! $acl.ResetAccessRule($rule);" -set "d=!d! $acl.SetAccessRule($rule);" -set "d=!d! Set-Acl -Path '%%A' -AclObject $acl" -%psc% "!d!" %nul% -) - +call :dk_color %Red% "[!permerror!]" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':fixsppperms\:.*';iex ($f[1])" %nul% call :checkperms if defined permerror ( -call :_color %Red% "[Failed To Fix]" +call :dk_color %Red% "[!permerror!] [Failed To Fix]" ) else ( -echo [Successfully Fixed] +call :dk_color %Green% "[Successfully Fixed]" ) ) else ( echo [No Error Found] @@ -675,35 +648,75 @@ echo: echo Stopping sppsvc service... %psc% Stop-Service sppsvc -force %nul% +set w= +set _sppint= +for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) +if defined _sppint ( +echo: +echo Removing SPP IFEO registry keys... +for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) +) + +if %winbuild% LSS 9200 ( +REM Fix issues caused by Update KB971033 in Windows 7 +REM https://support.microsoft.com/help/4487266 +echo: +echo Checking Update KB971033... +%psc% "if (Get-Hotfix -Id KB971033 -ErrorAction SilentlyContinue) {Exit 3}" %nul% +if !errorlevel!==3 ( +echo Found, uninstalling it... +wusa /uninstall /quiet /norestart /kb:971033 +) else ( +echo [Not Found] +) +%psc% Stop-Service sppuinotify -force %nul% +sc config sppuinotify start= disabled +del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0 /ah +) + +:: Delete registry keys that are not deleted by activation scripts + +echo: +echo Cleaning some licensing-related registry keys... +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "ServiceSessionId" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "LicStatusArray" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "PolicyValuesArray" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f + echo: call :scandat delete call :scandat check if defined token ( echo: -call :_color %Red% "Failed to delete .dat files." +call :dk_color %Red% "Failed to delete .dat files." echo: ) echo: -echo Reinstalling System Licenses [slmgr /rilc]... -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if %errorlevel% NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +echo Reinstalling system licenses... +%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% if %errorlevel% EQU 0 ( echo [Successful] ) else ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) call :scandat check echo: if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." +call :dk_color %Red% "Failed to rebuild tokens.dat file." ) else ( echo tokens.dat file was rebuilt successfully. ) +if %winbuild% LSS 9200 ( +sc config sppuinotify start= demand +) + ::======================================================================================================================================== :: Rebuild OSPP Tokens @@ -711,11 +724,11 @@ echo tokens.dat file was rebuilt successfully. echo: echo %line% echo: -call :_color %Blue% "Rebuilding OSPP Licensing Tokens" +call :dk_color %Blue% "Rebuilding OSPP licensing tokens..." echo: sc qc osppsvc %nul% || ( -echo OSPP based Office is not installed +echo OSPP-based Office is not installed. echo Skipping rebuilding OSPP tokens... goto :repairoffice ) @@ -723,7 +736,7 @@ goto :repairoffice call :scandatospp check if not defined token ( -call :_color %Red% "tokens.dat file not found." +call :dk_color %Red% "tokens.dat file not found." ) else ( echo tokens.dat file: [%token%] ) @@ -738,12 +751,12 @@ call :scandatospp check if defined token ( echo: -call :_color %Red% "Failed to delete .dat files." +call :dk_color %Red% "Failed to delete .dat files." echo: ) echo: -echo Starting osppsvc service to generate tokens.dat +echo Starting osppsvc service to generate tokens.dat... %psc% Start-Service osppsvc %nul% call :scandatospp check if not defined token ( @@ -756,7 +769,7 @@ call :scandatospp check echo: if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." +call :dk_color %Red% "Failed to rebuild tokens.dat file." ) else ( echo tokens.dat file was rebuilt successfully. ) @@ -768,20 +781,11 @@ echo tokens.dat file was rebuilt successfully. echo: echo %line% echo: -call :_color %Blue% "Repairing Office Licenses" +call :dk_color %Blue% "Repairing Office licenses..." 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 -if /i "%arch%"=="ARM64" ( -echo: -echo ARM64 Windows Found. -echo You need to use repair option in Windows settings for Office. -echo: -start ms-settings:appsfeatures -goto :repairend -) - if /i "%arch%"=="x86" ( set arch=X86 ) else ( @@ -798,12 +802,12 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=") reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & set "msi14repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & set "msi14repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE14\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & set "msi15repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & set "msi15repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE15\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & set "msi16repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & set "msi16repair68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") @@ -844,29 +848,33 @@ set /a counter+=1 if %counter% GTR 1 ( %eline% -echo Multiple office versions found. -echo It's recommended to install only one version of office. +echo Multiple Office versions found. +echo It is recommended to only install one version of Office. echo ________________________________________________________________ echo: ) if %counter% EQU 0 ( echo: -echo Installed Office is not found. +echo Office ^(2010 and later^) is not installed. goto :repairend echo: ) else ( echo: -call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." -call :_color %_Yellow% "Press any key to continue..." -echo: +call :dk_color %_Yellow% "A new window will appear, in that window you need to select [Quick Repair] option." +if defined terminal ( +call :dk_color %_Yellow% "Press [0] to continue..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to continue..." pause %nul1% ) +) if defined uwp16 ( echo: -echo Note: Skipping repair for Office 16.0 UWP. -echo You need to use reset option in Windows settings for it. +echo Note: Skipping repair for Office 16.0 UWP... +echo You need to use the Reset option in Windows Settings instead. echo ________________________________________________________________ echo: start ms-settings:appsfeatures @@ -878,8 +886,8 @@ if defined c2r14_86 set c2r14=1 if defined c2r14 ( echo: -echo Note: Skipping repair for Office 14.0 C2R -echo You need to use Repair option in Windows settings for it. +echo Note: Skipping repair for Office 14.0 C2R... +echo You need to use the Repair option in Windows Settings for it. echo ________________________________________________________________ echo: start appwiz.cpl @@ -902,28 +910,31 @@ echo: echo %line% echo: echo: -call :_color %Green% "Finished" +call :dk_color %Green% "Finished" goto :at_back +:getrepairsetup + +set "_common86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" +set "_common68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" + +if exist "%_common86%" set "%1=%_common86%" +if exist "%_common68%" set "%1=%_common68%" +exit /b + ::======================================================================================================================================== :fixwmi cls -mode 98, 34 +if not defined terminal mode 98, 34 title Fix WMI :: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484 if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% -echo WMI rebuild is not recommended on Windows Server. Aborting... -goto :at_back -) - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -%eline% -echo wmic.exe file is not found in the system. Aborting... +echo Rebuilding WMI is not recommended on Windows Server, aborting... goto :at_back ) @@ -941,11 +952,11 @@ call :checkwmi if not defined error ( echo [Working] -echo No need to apply this option. Aborting... +echo No need to apply this option, aborting... goto :at_back ) -call :_color %Red% "[Not Responding]" +call :dk_color %Red% "[Not Responding]" set _corrupt= sc start Winmgmt %nul% @@ -956,7 +967,7 @@ for %%G in (DependOnService Description DisplayName ErrorControl ImagePath Objec echo: if defined _corrupt ( %eline% -echo Winmgmt service is corrupted. Aborting... +echo Winmgmt service is corrupted, aborting... goto :at_back ) @@ -965,7 +976,7 @@ sc config Winmgmt start= disabled %nul% if %errorlevel% EQU 0 ( echo [Successful] ) else ( -call :_color %Red% "[Failed] Aborting..." +call :dk_color %Red% "[Failed] Aborting..." sc config Winmgmt start= auto %nul% goto :at_back ) @@ -978,9 +989,9 @@ echo Stopping Winmgmt service sc query Winmgmt | find /i "STOPPED" %nul% && ( echo [Successful] ) || ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" echo: -call :_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again." +call :dk_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again." echo %line% echo: choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :" @@ -993,9 +1004,9 @@ exit echo: echo Deleting WMI repository -rmdir /s /q "%windir%\System32\wbem\repository\" %nul% -if exist "%windir%\System32\wbem\repository\" ( -call :_color %Red% "[Failed]" +rmdir /s /q "%SysPath%\wbem\repository\" %nul% +if exist "%SysPath%\wbem\repository\" ( +call :dk_color %Red% "[Failed]" ) else ( echo [Successful] ) @@ -1006,14 +1017,14 @@ sc config Winmgmt start= auto %nul% if %errorlevel% EQU 0 ( echo [Successful] ) else ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) call :checkwmi if not defined error ( echo: echo Checking WMI -call :_color %Green% "[Working]" +call :dk_color %Green% "[Working]" goto :at_back ) @@ -1025,11 +1036,11 @@ echo: echo Checking WMI call :checkwmi if defined error ( -call :_color %Red% "[Not Responding]" +call :dk_color %Red% "[Not Responding]" echo: echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors. ) else ( -call :_color %Green% "[Working]" +call :dk_color %Green% "[Working]" ) goto :at_back @@ -1039,9 +1050,9 @@ goto :at_back :: https://eskonr.com/2012/01/how-to-fix-wmi-issues-automatically/ %psc% Stop-Service Winmgmt -force %nul% -cd /d %systemroot%\system32\wbem\ -regsvr32 /s %systemroot%\system32\scecli.dll -regsvr32 /s %systemroot%\system32\userenv.dll +cd /d %SysPath%\wbem\ +regsvr32 /s %SysPath%\scecli.dll +regsvr32 /s %SysPath%\userenv.dll mofcomp cimwin32.mof mofcomp cimwin32.mfl mofcomp rsop.mof @@ -1059,12 +1070,12 @@ exit /b :: 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% +%psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %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% +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM SoftwareLicensingService').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% cmd /c exit /b %errorlevel% echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440" %nul1% if %errorlevel% EQU 0 set error=1 @@ -1077,21 +1088,17 @@ exit /b echo: echo %line% echo: -call :_color %_Yellow% "Press any key to go back..." +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% +) goto :at_menu ::======================================================================================================================================== -:at_done - -echo: -echo Press any key to %_exitmsg%... -pause %nul1% -exit /b - -::======================================================================================================================================== - :compresslog :: https://stackoverflow.com/a/46268232 @@ -1118,64 +1125,172 @@ 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" +makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\%2_%_time%.cab" del /q /f %ddf% exit /b ::======================================================================================================================================== -:: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems +:checkperms + +:: This code checks if SPP has permission access to tokens folder and required registry keys. Incorrect permissions are often set by gaming spoofers. + +set permerror= +if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" + +for %%# in ( +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) +) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) +) +exit /b + +::======================================================================================================================================== + +:: Fix SPP related registry and folder permissions -:wpatest: -$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA") -$count = $wpaKey.SubKeyCount +:fixsppperms: +# Fix perms for Token Folder -$osVersion = [System.Environment]::OSVersion.Version -$minBuildNumber = 14393 +if ($env:permerror -eq 'Error Found In Token Folder') { + New-Item -Path $env:tokenstore -ItemType Directory -Force + $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)' + $AclObject = New-Object System.Security.AccessControl.DirectorySecurity + $AclObject.SetSecurityDescriptorSddlForm($sddl) + Set-Acl -Path $env:tokenstore -AclObject $AclObject + exit +} + +# Fix perms for SPP registries + +if ($env:permerror -eq 'Error Found In SPP Registries') { + $acl = Get-Acl 'HKLM:\SYSTEM\WPA' + $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'QueryValues, EnumerateSubKeys, WriteKey', 'ContainerInherit, ObjectInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $acl.SetAccessRule($rule) + Set-Acl -Path 'HKLM:\SYSTEM\WPA' -AclObject $acl + + $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' + $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'SetValue', 'ContainerInherit, ObjectInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $acl.SetAccessRule($rule) + Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -AclObject $acl + exit +} + +# Fix perms for SPP in HKU\S-1-5-20 +# https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if ($env:permerror -ne 'Error Found In S-1-5-20 SPP') { + exit +} +if (-not (Test-Path 'Registry::HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform')) { + exit +} -if ($osVersion.Build -ge $minBuildNumber) { - $subkeyHashTable = @{} - foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $keyNumber = $subkeyName -replace '.*-', '' - $subkeyHashTable[$keyNumber] = $true +# https://stackoverflow.com/a/35843420 + +function Take-Permissions { + param($rootKey, $key, [System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-545', $recurse = $true) + + switch -regex ($rootKey) { + 'HKCU|HKEY_CURRENT_USER' { $rootKey = 'CurrentUser' } + 'HKLM|HKEY_LOCAL_MACHINE' { $rootKey = 'LocalMachine' } + 'HKCR|HKEY_CLASSES_ROOT' { $rootKey = 'ClassesRoot' } + 'HKCC|HKEY_CURRENT_CONFIG' { $rootKey = 'CurrentConfig' } + 'HKU|HKEY_USERS' { $rootKey = 'Users' } } - for ($i=1; $i -le $count; $i++) { - if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Host "Total Keys $count. Error Found- $i key does not exist" - $wpaKey.Close() - exit + + ### Step 1 - escalate current process's privilege + # get SeTakeOwnership, SeBackup and SeRestore privileges before executes next lines, script needs Admin privilege + $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) + $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) + $TypeBuilder = $ModuleBuilder.DefineType(0) + $TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null + 9, 17, 18 | ForEach-Object { $TypeBuilder.CreateType()::RtlAdjustPrivilege($_, $true, $false, [ref]$false) | Out-Null } + + function Take-KeyPermissions { + param($rootKey, $key, $sid, $recurse, $recurseLevel = 0) + + ### Step 2 - get ownerships of key - it works only for current key + $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership') + $acl = New-Object System.Security.AccessControl.RegistrySecurity + $acl.SetOwner($sid) + $regKey.SetAccessControl($acl) + + ### Step 3 - enable inheritance of permissions (not ownership) for current key from parent + $acl.SetAccessRuleProtection($false, $false) + $regKey.SetAccessControl($acl) + + ### Step 4 - only for top-level key, change permissions for current key and propagate it for subkeys + # to enable propagations for subkeys, it needs to execute Steps 2-3 for each subkey (Step 5) + if ($recurseLevel -eq 0) { + $regKey = $regKey.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions') + $rule = New-Object System.Security.AccessControl.RegistryAccessRule($sid, 'FullControl', 'ContainerInherit', 'None', 'Allow') + $acl.ResetAccessRule($rule) + $regKey.SetAccessControl($acl) + } + + ### Step 5 - recursively repeat steps 2-5 for subkeys + if ($recurse) { + foreach ($subKey in $regKey.OpenSubKey('').GetSubKeyNames()) { + Take-KeyPermissions $rootKey ($key + '\' + $subKey) $sid $recurse ($recurseLevel + 1) + } } } + + Take-KeyPermissions $rootKey $key $sid $recurse } -$wpaKey.GetSubKeyNames() | ForEach-Object { - $subkey = $wpaKey.OpenSubKey($_) - $p = $subkey.GetValueNames() - if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { - Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" - $wpaKey.Close() - exit - } -} -$count -$wpaKey.Close() -:wpatest: -::======================================================================================================================================== +Take-Permissions "Users" "S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" "S-1-5-20" +:fixsppperms: -:checkperms +::======================================================================================================================================== -set permerror= -if not exist "%tokenstore%\" set permerror=1 +:: Install License files using Powershell/WMI instead of slmgr.vbs -for %%# in ( -"%tokenstore%" -"HKLM:\SYSTEM\WPA" -"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -) do if not defined permerror ( -%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul% -if !errorlevel!==2 set permerror=1 -) -exit /b +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: ::======================================================================================================================================== @@ -1183,9 +1298,9 @@ exit /b set token= for %%# in ( -%Systemdrive%\Windows\System32\spp\store_test\2.0\ -%Systemdrive%\Windows\System32\spp\store\ -%Systemdrive%\Windows\System32\spp\store\2.0\ +%SysPath%\spp\store_test\2.0\ +%SysPath%\spp\store\ +%SysPath%\spp\store\2.0\ %Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\ ) do ( @@ -1262,106 +1377,88 @@ $key.SetAccessControl($acl) ::======================================================================================================================================== -:_color +:dk_done + +echo: +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 + +::======================================================================================================================================== + +:dk_color if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m ) else ( -call :batcol %~1 "%~2" +%psc% write-host -back '%1' -fore '%2' '%3' ) exit /b -:_color2 +:dk_color2 if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m ) else ( -call :batcol %~1 "%~2" %~3 "%~4" +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' ) exit /b -::======================================= - -:: Colored text with pure batch method -:: Thanks to @dbenham and @jeb -:: stackoverflow.com/a/10407642 - -:batcol +::======================================================================================================================================== -pushd %_coltemp% -if not exist "'" ("'" set /p "=.") -setlocal -set "s=%~2" -set "t=%~4" -call :_batcol %1 s %3 t -del /f /q "'" -del /f /q "`.txt" -popd -exit /b +:: Set variables -:_batcol +:dk_setvar -setlocal EnableDelayedExpansion -set "s=!%~2!" -set "t=!%~4!" -for /f delims^=^ eol^= %%i in ("!s!") do ( - if "!" equ "" setlocal DisableDelayedExpansion - >`.txt (echo %%i\..\') - findstr /a:%~1 /f:`.txt "." - `.txt (echo %%i\..\') - findstr /a:%~3 /f:`.txt "." - ``` -Latest Version: 2.6 -Release date: 20-Apr-2024 +Latest Version: 2.7 +Release date: 6-Sep-2024 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot)