From 48fb5fc5fe9124554b2adac39bf498a6894ae26b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 13 Jul 2024 03:56:18 +0530 Subject: [PATCH 01/91] 2.7 Preview --- .../Activators/HWID_Activation.cmd | 1782 +++-- .../Activators/KMS38_Activation.cmd | 1037 ++- .../Activators/Ohook_Activation_AIO.cmd | 1780 +++-- .../Activators/Online_KMS_Activation.cmd | 6690 ++++++++--------- 4 files changed, 5878 insertions(+), 5411 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 0620cc9..36a6e22 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 @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: -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,10 +155,584 @@ 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" +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. +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 +) + +::======================================================================================================================================== + +:: 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 _PSarg=%_PSarg:'=''% + +set "_ttemp=%userprofile%\AppData\Local\Temp" + +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: +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 PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +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 To do so, 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 Version %masver% of MAS 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] :" +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 110, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) +title HWID Activation %masver% + +echo: +echo Initializing... + +for %%# in ( +sppsvc.exe +ClipUp.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 +) +) + +::======================================================================================================================================== + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue + +::======================================================================================================================================== + +:: Check if system is permanently activated or not + +call :dk_checkperm +if defined _perm ( +cls +echo ___________________________________________________________________________________________ +echo: +call :dk_color2 %_White% " " %Green% "Checking: %winos% is 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% : " +if errorlevel 2 exit /b +) +cls + +::======================================================================================================================================== + +:: Check Evaluation version + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +%eline% +echo [%winos% ^| %winbuild%] +echo: +echo Evaluation Editions cannot be activated outside of evaluation period. +echo: +set fixes=%fixes% %mas%evaluation-editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation-editions" +goto dk_done +) +) + +::======================================================================================================================================== + +set error= + +cls +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 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 ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for HWID Activation." +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt" + +:: Client License Service (ClipSVC) +:: Microsoft Account Sign-in Assistant +:: Software Protection +:: CNG Key Isolation +:: Windows License Manager Service +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + +:: Detect Key + +set key= +set altkey= +set skufound= +set changekey= +set altapplist= +set altedition= +set notworking= + +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) +if defined altapplist call :hwiddata key +) + +if defined notworking call :hwidfallback +if not defined key call :hwidfallback + +if defined altkey (set key=%altkey%&set changekey=1&set notworking=) + +if defined notworking if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]" +) + +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. +) else ( +echo Required License files not found in %SysPath%\spp\tokens\skus\ +) +echo Make sure you are using updated version of the script. +set fixes=%fixes% %mas% +echo %mas% +echo: +goto dk_done +) + +if defined notworking set error=1 + +::======================================================================================================================================== + +:: Install key + +echo: +if defined changekey ( +call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable HWID activation." +echo: +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. 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 + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b" +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b" + +set regionchange= +if not "%name%"=="US" ( +set regionchange=1 +%psc% "Set-WinHomeLocation -GeoId 244" %nul% +if !errorlevel! EQU 0 ( +echo Changing Windows Region To USA [Successful] +) else ( +call :dk_color %Red% "Changing Windows Region To USA [Failed]" +) +) + +::========================================================================================================================================== + +:: Generate GenuineTicket.xml and apply +:: 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) + +set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" +if not exist "%tdir%\" md "%tdir%\" %nul% + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% + +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]" +echo [%encoded%] +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +goto :dl_final +) else ( +echo Generating GenuineTicket.xml [Successful] +) + +set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" + +%_xmlexist% ( +%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...]" +) +) + +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% +clipup -v -o + +set rebuildinfo= + +if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" +) + +%_xmlexist% ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" +) + +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking Ticket Migration [Failed]" +) + +if not defined altapplist if not defined showfix if defined rebuildinfo ( +set showfix=1 +call :dk_color %Blue% "%_fixmsg%" +) + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% + +::========================================================================================================================================== + +call :dk_product + +echo: +echo Activating... + +call :dk_act +call :dk_checkperm +if defined _perm ( +echo: +call :dk_color %Green% "%winos% is permanently activated with a digital license." +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 an 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= +ipconfig /flushdns %nul% +set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" + +for %%# in ( +login.live.com/ppsecure/deviceaddcredential.srf +purchase.mp.microsoft.com/v7.0/users/me/orders +) do if not defined resfail ( +set "d1=Add-Type -AssemblyName System.Net.Http;" +set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" +set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" +set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" +%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 +) + +if not defined resfail ( +%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 +) + +if defined resfail ( +set error=1 +echo: +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" +) +) + +::========================================================================================================================================== + +if %keyerror% EQU 0 if not defined _perm if defined _int ( + +reg query "%_ident%" %nul% || ( +set error=1 +echo: +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" +) + +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]" + +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 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%" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +) +) +) + +::========================================================================================================================================== + +echo: +if defined _perm ( +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." +) else ( +if not defined error call :dk_color %Blue% "%_fixmsg%" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) + +::======================================================================================================================================== + +:dl_final + +echo: + +if defined regionchange ( +%psc% "Set-WinHomeLocation -GeoId %nation%" %nul% +if !errorlevel! EQU 0 ( +echo Restoring Windows Region [Successful] +) else ( +call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - %nation%]" +) +) + +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 @@ -159,349 +770,126 @@ set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing opt 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. -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. -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 - -::======================================================================================================================================== - -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: -echo Extract the archive file and launch the script from the extracted folder. -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 To do so, 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 - -if %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) - -reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit ( -reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1% -start cmd.exe /c ""!_batf!" %_args% -qedit" -rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases exit /b -) -::======================================================================================================================================== +:: Show OS info -:: Check for updates +:dk_showosinfo -set -= -set old= +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 "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 You are running outdated version MAS %masver% -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] :" -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 -mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 -title HWID Activation %masver% - -echo: -echo Initializing... - -:: 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 dk_done -) - -::======================================================================================================================================== - -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..." -echo: -) - -::======================================================================================================================================== - -:: Check if system is permanently activated or not - -call :dk_checkperm -if defined _perm ( -cls -echo ___________________________________________________________________________________________ -echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is 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% : " -if errorlevel 2 exit /b -) -cls - -::======================================================================================================================================== - -:: Check Evaluation version - -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( -%eline% -echo [%winos% ^| %winbuild%] -echo: -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% -echo: -echo Download it from here, -echo %mas%genuine-installation-media.html -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%] - -:: 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 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%] +for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( +set fullbuild=%%i.%%j ) else ( -set error=1 -call :dk_color %Red% "Checking Internet Connection [Not Connected]" +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 Windows Script Host +:: Check SKU value -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) +:dk_checksku -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_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% +) ) -::======================================================================================================================================== +if not defined osSKU set osSKU=%slcSKU% +if not defined osSKU set osSKU=%wmiSKU% +if not defined osSKU set osSKU=%regSKU% +exit /b -echo Initiating Diagnostic Tests... +:: Get Windows Subscription status -set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt DoSvc UsoSvc CryptSvc BITS TrustedInstaller wuauserv" -if %winbuild% GEQ 17134 set "_serv=%_serv% WaaSMedicSvc" +:winsubstatus: +$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2) +$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) -:: Client License Service (ClipSVC) -:: Microsoft Account Sign-in Assistant -:: Software Protection -:: 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 +('enabled#int', 'sku#int', 'state#int').ForEach({ + $i = $_ -split '#' + $n = $i[0] + $t = $i[1] -as [Type] + [void]$SB.DefineField($n, $t, 6) +}) -call :dk_errorcheck +$sub_status = $SB.CreateType() +$MB = $DM.DefineType('PInvoke') -:: Check Windows updates and store app blockers +[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) -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 +$Clipc = $MB.CreateType() +$s = [Activator]::CreateInstance($sub_status) +$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) +$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) -if defined updatesblock call :dk_color %Gray% "Checking Update Blocker In Registry [Found]" +if ($r -eq 0) { + $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) + if ($s.enabled -ne 0) { + if ($s.state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: -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." -) +:: Get Windows permanent activation status -reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( -call :dk_color %Gray% "Checking Store Blocker In Registry [Found]" -) +: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 -:: Detect Key +:: Refresh license status -set key= -set altkey= -set skufound= -set changekey= -set altapplist= -set altedition= -set notworking= +:dk_refresh -if defined applist 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) -if defined altapplist call :hwiddata key -) +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 -if defined notworking call :hwidfallback -if not defined key call :hwidfallback +:: Install Key -if defined altkey (set key=%altkey%&set changekey=1&set notworking=) +:dk_inskey -if defined notworking if defined notfoundaltactID ( -call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]" -) +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 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 %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Generic Product Key %~1 [Successful] ) else ( -echo Required License files not found in %SystemRoot%\System32\spp\tokens\skus\ -) -echo Make sure you are using updated version of the script. -echo %mas% -echo: -goto dk_done -) - -if defined notworking set error=1 - -::======================================================================================================================================== - -:: Install key - -echo: -if defined changekey ( -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%" +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%" @@ -510,257 +898,6 @@ set showfix=1 set error=1 ) -::======================================================================================================================================== - -:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries - -for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b" -for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b" - -set regionchange= -if not "%name%"=="US" ( -set regionchange=1 -%psc% "Set-WinHomeLocation -GeoId 244" %nul% -if !errorlevel! EQU 0 ( -echo Changing Windows Region To USA [Successful] -) else ( -call :dk_color %Red% "Changing Windows Region To USA [Failed]" -) -) - -::========================================================================================================================================== - -:: Generate GenuineTicket.xml and apply -:: 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% - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% - -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]" -echo [%encoded%] -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -goto :dl_final -) else ( -echo Generating GenuineTicket.xml [Successful] -) - -set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" - -%_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% -%_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...]" -) -) - -copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% -clipup -v -o - -set rebuildinfo= - -if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" -) - -%_xmlexist% ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" -) - -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking Ticket Migration [Failed]" -) - -if defined applist if not defined showfix if defined rebuildinfo ( -set showfix=1 -call :dk_color %Blue% "%_fixmsg%" -) - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% - -::========================================================================================================================================== - -call :dk_product - -echo: -echo Activating... - -call :dk_act -call :dk_checkperm -if defined _perm ( -echo: -call :dk_color %Green% "%winos% is permanently activated with a digital license." -goto :dl_final -) - -::========================================================================================================================================== - -:: Extended licensing servers tests incase error not found and activation failed - -set resfail= -if not defined error ( - -ipconfig /flushdns %nul% -set "tls=$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072); [System.Net.ServicePointManager]::SecurityProtocol = $Tls12;" - -for %%# in ( -login.live.com/ppsecure/deviceaddcredential.srf -purchase.mp.microsoft.com/v7.0/users/me/orders -) do if not defined resfail ( -set "d1=Add-Type -AssemblyName System.Net.Http;" -set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" -set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" -set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" -%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 -) - -if not defined resfail ( -%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 -) - -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" -) -) - -::========================================================================================================================================== - -:: Clear store ID related registry to fix activation incase error not found - -if not defined error ( -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!] -) - -REM Refresh some services and license status - -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% Restart-Service %%# %nul%) -call :dk_refresh -call :dk_act -call :dk_checkperm -) - -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: -call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" -) -) - -::========================================================================================================================================== - -echo: -if defined _perm ( -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." -) else ( -if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -) -) - -::======================================================================================================================================== - -:dl_final - -echo: - -if defined regionchange ( -%psc% "Set-WinHomeLocation -GeoId %nation%" %nul% -if !errorlevel! EQU 0 ( -echo Restoring Windows Region [Successful] -) else ( -call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - %nation%]" -) -) - -if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." - -goto :dk_done - -::======================================================================================================================================== - -:: Check SKU value - -:dk_checksku - -set osSKU= -set slcSKU= -set wmiSKU= -set regSKU= - -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= - -for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn %nul6%') do set "regSKU=%%a" -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" -if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" - -set osSKU=%slcSKU% -if not defined osSKU set osSKU=%wmiSKU% -if not defined osSKU set osSKU=%regSKU% -exit /b - -:: 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= -exit /b - -:: Refresh license status - -:dk_refresh - -if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call RefreshLicenseStatus %nul% -if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul% exit /b :: Activation command @@ -768,28 +905,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,6 +966,31 @@ $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 @@ -814,12 +1001,35 @@ wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "co ) exit /b +:: Show info for potential script stuck scenario + +:dk_sppissue + +set w= +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo "%spperror%" | findstr "577 225" %nul% && ( +echo: +echo Your system is most likely infected with Mal%w%ware. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) + +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 +1041,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 @@ -846,8 +1072,45 @@ exit /b :dk_errorcheck +set w= set showfix= +:: 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 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=[AV 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%[WU registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && 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 %results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) + +::======================================================================================================================================== + :: Check corrupt services set serv_cor= @@ -858,7 +1121,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=%%#")) @@ -892,12 +1154,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 +1180,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 ) @@ -974,7 +1230,7 @@ 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 @@ -984,22 +1240,13 @@ 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" +) ) @@ -1008,15 +1255,17 @@ for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\ :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if defined osedition ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( if not defined osedition ( 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 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1029,41 +1278,45 @@ call :dk_color %Red% "Checking Package File [Not Found] [%osed ) -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]" +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 +1332,50 @@ 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" %nul% && ( +if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( +set error=1 +call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +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% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo Checking SPP Interference 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% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1097,29 +1383,48 @@ 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 +) ) -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,10 +1435,13 @@ 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!]" +) ) @@ -1141,30 +1449,33 @@ call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" set permerror= if not exist "%tokenstore%\" set permerror=1 - -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 %winbuild% GEQ 9200 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 set permerror=1 ) -if defined permerror ( + +if %winbuild% GEQ 9200 if defined permerror ( set error=1 -set showfix=1 call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 ) -:: 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 +1487,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 +1562,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 +1585,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,42 +1597,42 @@ 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 +837766ff-61c5-427d-87c3-a2acbd44767a_XFC77-XNRXM-2Q36W-FCM9T-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_RQFNW-9TPM3-JQ73T-QV4VQ-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_M33WV-NHY3C-R7FPM-BQGPT-23%f%9PG_126_X21-83264_Fl7tjifybEI9hArxMVFKqIqmI6mrCZy4EtJyVjpo2eSfeMTBli55+E0i2AaPfE2FJknUig7HuiNC1Pu2IWZcj5ShVFQEKPY6K//RucX8oPQfh0zK5r1aNJNvV4gMlqvOyGD8sXttLBZv8wg1w/++cNk/z38DE2shiDf7LYnK4w0_1_Volume:MAK_EnterpriseSN_RS5 +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 ( @@ -1300,7 +1640,7 @@ 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 +1679,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..23fefb4 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 @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 -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" @@ -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: -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 ) @@ -122,53 +159,10 @@ 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%]. @@ -176,12 +170,6 @@ echo KMS38 Activation is supported for Windows 10/11/Server, build 14393 and lat goto dk_done ) -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 @@ -193,6 +181,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -213,10 +202,33 @@ 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 PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +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'. @@ -225,19 +237,45 @@ 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 %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) - -reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit ( -reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1% -start cmd.exe /c ""!_batf!" %_args% -qedit" -rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases -exit /b +if %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 @@ -252,7 +290,7 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: if not %_unattended%==1 ( @@ -275,7 +313,7 @@ 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: @@ -306,40 +344,37 @@ 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... -:: 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 [%_fmiss%] 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 +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + 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..." -echo: -) +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -378,13 +413,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 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,54 +428,25 @@ 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 +set fixes=%fixes% %mas%kms38 +echo %mas%kms38 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%] - -::======================================================================================================================================== - -:: 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,9 +465,7 @@ 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 @@ -473,15 +476,16 @@ 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 +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% 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." ) @@ -497,9 +501,10 @@ echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if not defined skufound ( echo Unable to find this product in the supported product list. ) else ( -echo Required License files not installed. +echo Required License files not found in %SysPath%\spp\tokens\skus\ ) echo Make sure you are using updated version of the script. +set fixes=%fixes% %mas% echo %mas% echo: goto dk_done @@ -515,33 +520,20 @@ call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable echo: ) +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate 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 +541,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 +561,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 +600,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 +609,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" @@ -642,7 +629,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,7 +638,7 @@ 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% @@ -685,7 +672,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 +695,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,7 +714,8 @@ 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" ::======================================================================================================================================== @@ -749,7 +737,7 @@ 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] @@ -770,10 +758,15 @@ 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 +774,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 +826,135 @@ $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 "_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." +) +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(4, 1).DefineDynamicModule(2) +$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) + +('enabled#int', 'sku#int', 'state#int').ForEach({ + $i = $_ -split '#' + $n = $i[0] + $t = $i[1] -as [Type] + [void]$SB.DefineField($n, $t, 6) +}) + +$sub_status = $SB.CreateType() +$MB = $DM.DefineType('PInvoke') + +[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + +$Clipc = $MB.CreateType() +$s = [Activator]::CreateInstance($sub_status) +$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) +$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) + +if ($r -eq 0) { + $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) + if ($s.enabled -ne 0) { + if ($s.state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: + :: Check KMS activation status :k_actinfo @@ -872,8 +969,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,36 +978,113 @@ 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 @@ -921,12 +1095,35 @@ wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "co ) exit /b +:: Show info for potential script stuck scenario + +:dk_sppissue + +set w= +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo "%spperror%" | findstr "577 225" %nul% && ( +echo: +echo Your system is most likely infected with Mal%w%ware. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) + +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 +1135,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 +1167,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 +1180,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,12 +1194,12 @@ 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! +call :k_pkey %osSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! if /i [!pkeychannel!]==[%%#] ( set key=!pkey! exit /b @@ -998,8 +1211,45 @@ exit /b :dk_errorcheck +set w= set showfix= +:: 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 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=[AV 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%[WU registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && 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 %results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) + +::======================================================================================================================================== + :: Check corrupt services set serv_cor= @@ -1010,7 +1260,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=%%#")) @@ -1044,12 +1293,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 +1319,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 ) @@ -1126,7 +1369,7 @@ 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 @@ -1136,22 +1379,13 @@ 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" +) ) @@ -1160,15 +1394,17 @@ for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\ :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if defined osedition ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( if not defined osedition ( 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 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1181,41 +1417,45 @@ call :dk_color %Red% "Checking Package File [Not Found] [%osed ) -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]" +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 +1471,50 @@ 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" %nul% && ( +if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( +set error=1 +call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +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% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo Checking SPP Interference 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% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1249,29 +1522,48 @@ 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 +) ) -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,10 +1574,13 @@ 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!]" +) ) @@ -1293,30 +1588,33 @@ call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" set permerror= if not exist "%tokenstore%\" set permerror=1 - -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 %winbuild% GEQ 9200 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 set permerror=1 ) -if defined permerror ( + +if %winbuild% GEQ 9200 if defined permerror ( set error=1 -set showfix=1 call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 ) -:: 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 +1626,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 +1701,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 +1731,65 @@ 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 +1813,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..431a936 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 @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 -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: -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,49 +155,7 @@ 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% @@ -169,12 +164,6 @@ echo Ohook Activation is supported on Windows 8 and later and their server equiv goto dk_done ) -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 @@ -186,9 +175,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 ::======================================================================================================================================== @@ -206,10 +196,33 @@ 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 PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +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'. @@ -218,19 +231,45 @@ 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 %_unattended%==1 set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) - -reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit ( -reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1% -start cmd.exe /c ""!_batf!" %_args% -qedit" -rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases -exit /b +if %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 @@ -245,7 +284,7 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: if not %_unattended%==1 ( @@ -268,13 +307,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 @@ -291,7 +331,7 @@ call :dk_color2 %_White% " " %_Green% "Enter a menu option in the K 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 +342,34 @@ 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... -:: 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 +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_reflection 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..." -echo: -) +call :dk_product +call :dk_sppissue ::======================================================================================================================================== @@ -344,30 +377,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 +411,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 +448,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: call :dk_color %Blue% "Download and install Office from below URL and 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 ) @@ -445,17 +470,41 @@ call :dk_color %Gray% "Checking Multiple Office Install [Found. Its best ::======================================================================================================================================== +:: 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 ( @@ -475,7 +524,7 @@ 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 +532,7 @@ set error=1 goto :starto16c2r ) +call :oh_fixprids call :oh_process call :oh_hookinstall @@ -495,17 +545,21 @@ 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" @@ -520,7 +574,7 @@ 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,75 +582,37 @@ 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 +:: 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. -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]" +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.]" ) - -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 - -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% -) -) -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% +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% +reg delete "%kmskey%" /f %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% echo Adding a Reg To Prevent Banner [Successful] ) ) @@ -610,51 +626,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." +REM if defined ohub call :dk_color %Gray% "Office apps such as Word, Excel are activated. Ignore 'Buy Microsoft 365' 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 +652,7 @@ goto :dk_done :oh_uninstall cls -mode 99, 28 +if not defined terminal mode 99, 32 title Uninstall Ohook Activation %masver% set _present= @@ -704,24 +692,37 @@ 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 to skip license check from all ^& future new useraccounts -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 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 + +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 +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 __________________________________________________________________________________________ @@ -732,7 +733,13 @@ 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 its still not resolved then restart system and try again." +) else ( +call :dk_color %Blue% "Restart system and try again." +) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." ) @@ -745,6 +752,7 @@ goto :dk_done :oh_reset +set key= set _oRoot= set _oArch= set _oIds= @@ -752,11 +760,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 +797,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] -) 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 +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 ( +reg add %_prids% /t REG_SZ /d "%%#" /f %nul1% ) -set error=1 ) exit /b @@ -815,18 +834,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 +859,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 +889,51 @@ 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] +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 :dk_color %Blue% "Close ALL Office apps including Outlook and try again." +call :oh_checkapps +if defined checknames ( +call :dk_color %Blue% "Close [!checknames!] and try again." call :dk_color %Blue% "If its still not resolved then restart system and try again." +) else ( +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart system and try again." +) +echo: ) -if not defined ierror ( +if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 @@ -914,7 +950,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 +969,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." +set fixes=%fixes% %mas% +call :dk_color %_Yellow% "%mas%" +) ) ) -exit /b +:: 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 -::======================================================================================================================================== - -: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% - -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,10 +1002,11 @@ 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 @@ -982,10 +1022,23 @@ if [%_oArch%]==[x86] set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" 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 @@ -1000,34 +1053,390 @@ exit /b ::======================================================================================================================================== +: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: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 _FsortIds=!_sortIds! !_FsortIds! +) + +call :ohookdata findactivated %2 +exit /b + +:: Preview VL is not checked for permanent activation +set _sortIds=!_sortIds:PreviewVL_=Volume_! + +::======================================================================================================================================== + +:oh_clearblock + +:: 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 _sidlist= +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)) + +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%]" +) + +::========================== + +:: 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 %%# in (%_o16c2rIds%) do ( +reg delete %o16c2r_reg%\Configuration /v %%#.DeviceBasedLicensing /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% + +echo Clearing Office License Blocks [Successfully Cleared From All %counter% Useraccounts] + +::========================== + +:: 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 Useraccounts] +) + +::========================== + +:: 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 Useraccounts]" +call :dk_color %Blue% "Restart the system and try again." +) + +if defined failedtounload ( +set error=1 +call :dk_color %Red% "Unloading loaded accounts Registry [Failed For Some Useraccounts]" +call :dk_color %Blue% "Restart the system 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 "_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." +) +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 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 +:: 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 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 Office Activation IDs +:: Get installed products Activation IDs -:oh_actids +:dk_actid -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")) +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 @@ -1038,12 +1447,35 @@ wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "co ) exit /b +:: Show info for potential script stuck scenario + +:dk_sppissue + +set w= +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo "%spperror%" | findstr "577 225" %nul% && ( +echo: +echo Your system is most likely infected with Mal%w%ware. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) + +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%%') @@ -1070,8 +1502,45 @@ exit /b :dk_errorcheck +set w= set showfix= +:: 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 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=[AV 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%[WU registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && 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 %results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) + +::======================================================================================================================================== + :: Check corrupt services set serv_cor= @@ -1082,7 +1551,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=%%#")) @@ -1116,12 +1584,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 +1610,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 ) @@ -1198,7 +1660,7 @@ 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 @@ -1208,22 +1670,13 @@ 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" +) ) @@ -1232,15 +1685,17 @@ for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\ :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional +if defined osedition ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) if not defined officeact ( if not defined osedition ( 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 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1253,41 +1708,45 @@ call :dk_color %Red% "Checking Package File [Not Found] [%osed ) -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]" +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 +1762,50 @@ 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" %nul% && ( +if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( +set error=1 +call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +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% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo Checking SPP Interference 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% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1321,29 +1813,48 @@ 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 +) ) -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,10 +1865,13 @@ 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!]" +) ) @@ -1365,30 +1879,33 @@ call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" set permerror= if not exist "%tokenstore%\" set permerror=1 - -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 %winbuild% GEQ 9200 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 set permerror=1 ) -if defined permerror ( + +if %winbuild% GEQ 9200 if defined permerror ( set error=1 -set showfix=1 call :dk_color %Red% "Checking SPP Permissions [Error Found]" -call :dk_color %Blue% "%_fixmsg%" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 ) -:: 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 +1917,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 +1992,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 +2022,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 +2235,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 +2339,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 @@ -1792,27 +2356,28 @@ $MemoryStream.Close() :: ::======================================================================================================================================== -:: 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 :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 +2412,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 +2426,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 +2485,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..22954d4 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 @echo off + +::============================================================================ :: -::================================================================================================= +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com :: -:: This is a fork of @abbodi1406's KVA forums.mydigitallife.net/posts/838808 -::_____________________________________ -:: -:: 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" + +:: If value is changed in above lines or any 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" @@ -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: -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 ) @@ -89,83 +160,39 @@ popd cls color 07 -title Online KMS Activation %masver% +set KS=K%blank%MS +title Online %KS% 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 _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 +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%%") +) -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 -) -) -) +for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) 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) - -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 - -::======================================================================================================================================== +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 +goto dk_done ) ::======================================================================================================================================== @@ -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,42 +216,91 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( -%nceline% +%eline% echo Script is launched from the temp folder, echo Most likely you are running the script directly from the archive file. -echo. +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 PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +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 -%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 +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) - -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 %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 @@ -239,25 +315,22 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: -if not 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% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) ) ) -cls ::======================================================================================================================================== -if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") - :: Check not x86 Windows set notx86= @@ -266,2971 +339,1532 @@ if /i not "%arch%"=="x86" set notx86=1 ::======================================================================================================================================== -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find wmic.exe in the system. -if %winbuild% GEQ 22621 echo Make sure WMIC is enabled in optional features. -goto Done -) +if %_uni%==1 goto :ks_uninstall + +:ks_menu + +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% -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 In MAS, Goto Troubleshoot and run Fix WMI option. -goto Done +echo: +echo: +echo: +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: +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% "Enter a menu option in the 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... + +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") -:_KMS_Menu +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService -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 _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 _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 -) -) - -if defined _unattended ( -call :Activation_Start -timeout /t 2 -goto Done -) - -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 %vNextOverride% EQU 1 ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Red% "[Yes]" -) else ( -echo [7] Override Office vNext [Yes] -) -) else ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Yellow% "[No]" -) else ( -echo [7] Override Office vNext [No] -) -) -echo. _______________________________________________ -echo. -echo. [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 +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue ::======================================================================================================================================== -:Done +set error= -if defined _unattended exit /b +cls +echo: +call :dk_showosinfo -echo. -echo Press any key to exit... -pause >nul +:: 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 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 ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Online %KS% Activation." +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + +call :_taskclear-cache +call :_tasksetserv + +if not %_actwin%==1 goto :ks_office + +:: Process Windows +:: Check if system is permanently activated or not + +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 +) + +:: Check Evaluation version + +set _eval= +set _evalserv= + +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 _eval ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +call :dk_color %Red% "Checking Eval Edition [Evaluation Editions cannot be activated outside of evaluation period.]" + +if defined _evalserv ( +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." +) else ( +set fixes=%fixes% %mas%evaluation-editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation-editions" +) + +goto :ks_office +) +) + +::======================================================================================================================================== + +:: Check if GVLK is already installed or not + +call :k_channel + +:: Detect Key + +set key= +set pkey= +set altkey= +set skufound= +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% GEQ 19044 if !UBR! LSS 2788 ( +call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." +) +) + +if not defined key if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For KMS [%altedition% Activation ID Not Found]" +) + +if not defined key if not defined _gvlk ( +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +if not defined skufound ( +call :dk_color %Red% "Unable to find this product in the supported product list." +echo: +set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" +) else ( +echo Required License files not found in %SysPath%\spp\tokens\skus\ +) +goto :ks_office +) + +::======================================================================================================================================== + +:: Install key + +if defined changekey ( +call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable %KS% activation." +echo: +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: +) + +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 defined key ( +call :dk_inskey "[%key%]" +) + +::======================================================================================================================================== + +:ks_office + +if not %_actoff%==1 goto :ks_activate + +call :ks_setspp + +:: Check unsupported office versions + +set o14c2r= +set o16uwp= + +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 + +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%]" +) + +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + +::======================================================================================================================================== + +:: 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 +) + +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 "%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 defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. +) +echo: +call :dk_color %Blue% "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 :ks_activate +) + +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. Its best to install only one version]" +) + +::======================================================================================================================================== + +:: Process Office 15.0 C2R + +if not defined o15c2r goto :ks_starto16c2r + +call :ks_reset +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") +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 ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) + +set "_oLPath=%_oRoot%\Licenses" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto16c2r +) + +call :oh_fixprids +call :ks_process + +::======================================================================================================================================== + +: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 ") +) +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 +) + +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] +) + +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." +) +call :_taskgetserv +call :_taskregserv +) + +call :_taskact +if not defined showfix if defined _tserror (call :dk_color %Blue% "%_fixmsg%" & set showfix=1) + +if %_norentsk%==0 ( +call :ks_renewal +) else ( +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. +) +) +) + +:: https://learn.microsoft.com/azure/virtual-desktop/windows-10-multisession-faq + +if %_actwin%==1 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 + +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 + +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 -:========================================================================================================================================= +::======================================================================================================================================== -:Activation_Start +:ks_getpath -@setlocal DisableDelayedExpansion +set o16c2r= +set o15c2r= +set o16msi= +set o15msi= +set o14msi= -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%) +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 + +::======================================================================================================================================== + +:: 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 ) -call :Clear-KMS-Cache %nul% +set _pridsR= +set _pridsE= +for /f "skip=2 tokens=2*" %%a in ('"reg query %_prids%" %nul6%') do (set "_pridsR=%%b") -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" +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 add %_prids% /t REG_SZ /d "%%#" /f %nul1% +) +) + +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%" +) + +reg add %_osppready% /f /v %_altoffid%.OSPPReady /t %_osppt% /d 1 %nul1% +exit /b + +::======================================================================================================================================== + +:ks_setspp + +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 + +::======================================================================================================================================== + +:ks_process + +for %%# in (%_oIds%) do ( + +set skipprocess= +if %_NoEditionChange%==1 if not defined _oBranding ( +echo %%# | findstr /i "Retail" %nul% && ( +set skipprocess=1 +echo Skipping Because NoEditionChange Mode [%%#] +) +) + + +if "%_actprojvis%"=="1" if not defined skipprocess ( +echo %%# | findstr /i "Project Visio" %nul% || ( +set skipprocess=1 +echo Skipping Because Project/Visio Mode [%%#] +) +) + +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 [%%#] +) +) + +if not defined skipprocess ( +set key= +set _actid= +set _preview= +set _License=%%# +set _altoffid= + +echo %%# | find /i "2024" %nul% && ( +if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview +) +set _prod=%%#!_preview! + +call :ksdata getinfo !_prod! + +if defined _altoffid ( +set _License=!_altoffid! +echo Converting Retail To Volume [!_prod! To !_altoffid!] +set _prod=!_altoffid! +call :ks_osppready +) + +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" +) +) +) + +exit /b + +::======================================================================================================================================== + +:ks_processmsi + +:: Process Office MSI Version + +call :ks_reset + +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( +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 + +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 :ksdata getmsiprod %2 +call :ks_msiretaildata getmsiret %2 + +echo: +echo Processing 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...]" +exit /b +) + +call :ks_process +exit /b + +::======================================================================================================================================== + +:oh_installlic + +if not defined _oLPath exit /b + +if %oVer%==16 ( +"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% +) else ( +"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% +) + +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b + +:: Fallback to manual method to install licenses incase integrator.exe is not working + +set _License=%_License:XVolume=XC2RVL_% + +set _License=%_License:O365EduCloudRetail=O365EduCloudEDUR_% + +set _License=%_License:ProjectProRetail=ProjectProO365R_% +set _License=%_License:ProjectStdRetail=ProjectStdO365R_% +set _License=%_License:VisioProRetail=VisioProO365R_% +set _License=%_License:VisioStdRetail=VisioStdO365R_% + +if defined _preview set _License=%_License:Volume=PreviewVL_% + +set _License=%_License:Retail=R_% +set _License=%_License:Volume=VL_% + +for %%# in ("!_oLPath!\client-issuance-*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) + +for %%# in ("!_oLPath!\%_License%*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) + +%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]" +) + +exit /b + +::======================================================================================================================================== + +:oh_clearblock + +:: 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 _sidlist= +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)) + +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%]" +) + +::========================== + +:: 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 %%# in (%_o16c2rIds%) do ( +reg delete %o16c2r_reg%\Configuration /v %%#.DeviceBasedLicensing /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% + +echo Clearing Office License Blocks [Successfully Cleared From All %counter% Useraccounts] + +::========================== + +:: 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 Useraccounts] +) + +::========================== + +:: 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 Useraccounts]" +call :dk_color %Blue% "Restart the system and try again." +) + +if defined failedtounload ( +set error=1 +call :dk_color %Red% "Unloading loaded accounts Registry [Failed For Some Useraccounts]" +call :dk_color %Blue% "Restart the system 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 + +::======================================================================================================================================== + +:ks_uninstall + +cls +if not defined terminal mode 91, 30 +title Online %KS% Complete Uninstall %masver% + +set "uline=__________________________________________________________________________________________" + +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% +) + +echo: +set error_= +call :_taskclear-cache +call :ks_clearstuff + +:: check KMS38 lock + +%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. +) + +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% +) + +goto :dk_done + +:ks_clearstuff + +set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" + +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && ( +echo Deleting [Task] Activation-Renewal +schtasks /delete /tn Activation-Renewal /f %nul% +) + +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% +) + +If exist "%ProgramFiles%\Activation-Renewal\" ( +echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ +rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% +) + +:: Stuff from old MAS versions + +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% + +:: Check if all is removed + +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 + +::======================================================================================================================================== + +:_extracttask: +@echo off + +:: Renew K-M-S activation with Online servers via scheduled task + +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ + + +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 +) + +:: 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%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +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%\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 +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" ) -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" -) +set "ComSpec=%SysPath%\cmd.exe" +set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" + +>nul fltmc || 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 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=" +set psc=powershell.exe + +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 +) + +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 ) setlocal EnableDelayedExpansion -pushd "!_work!" - -if not defined _unattended ( -mode con cols=98 lines=31 -%psc% "&%_buf%" -title %_title% -) else ( -title Online KMS Activation %masver% -) - -if defined _gui if %_Debug%==1 mode con cols=98 lines=30 - -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) -) 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 -) -@exit /b - -:Begin +if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" +exit ::======================================================================================================================================== -set act_failed=0 -set /a act_attempt=0 +:_taskstart -echo. -echo Initializing... +echo: +echo %date%, %time% -:: Check Internet connection. Works even if ICMP echo is disabled. +set /a loop=1 +set /a max_loop=4 + +call :_tasksetserv + +:_intrepeat + +:: Check Internet connection. Works even if ICMP echo is disabled. -call :setserv for %%a in (%srvlist%) do ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto IntConnected +if not [%%#]==[] goto _taskIntConnected ) ) nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto IntConnected +if [%errorlevel%]==[0] goto _taskIntConnected -cls -if %_Debug%==1 ( -echo Error: Internet is not connected. -exit /b +if %loop%==%max_loop% ( +set _tserror=1 +goto _taskend ) -if defined _unattended ( -echo. -call :_color %_Red% "Internet is not connected, continuing the process anyway." -) else ( -%eline% -echo Internet is not connected. echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b -) +echo Error: Internet is not connected +echo Waiting 30 seconds -:IntConnected +timeout /t 30 >nul +set /a loop=%loop%+1 +goto _intrepeat -call :getserv +:_taskIntConnected ::======================================================================================================================================== +:: Check not x86 Windows + +set notx86= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b +if /i not "%arch%"=="x86" set notx86=1 + +call :_taskclear-cache + +::======================================================================================================================================== + +:: Check WMI and sppsvc Errors + +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 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: +) + +::======================================================================================================================================== + +:: Check installed volume products activation ID's + +call :_taskgetids sppwid %slp% windows +call :_taskgetids sppoid %slp% office +call :_taskgetids osppid %ospp% office + +::======================================================================================================================================== + +echo: +echo Renewing K-M-S activation for all installed Volume products + +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 +) + +::======================================================================================================================================== + +call :_taskact + +:_skipact + +::======================================================================================================================================== + +if defined run_once ( +echo: +echo Deleting Scheduled Task Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) + +::======================================================================================================================================== + +:_taskend + +echo: +echo Exiting +echo ______________________________________________________________________ + +if defined _tserror (exit /b 123456789) else (exit /b 0) + +::======================================================================================================================================== + +:_act + +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" + +set _taskskip= +if "%_actprojvis%"=="1" ( +echo: %prodname% | find /i "Office" %nul% && ( +echo: %prodname% | findstr /i "Project Visio" %nul% || (set _taskskip=1& exit /b) +) +) + +if defined t_name Activating: %prodname% + +set errorcode=12345 +set /a act_attempt=0 + +:_act2 + +if %act_attempt% GTR 4 exit /b + +if not [%act_ok%]==[1] ( +if not defined _server call :_taskgetserv +call :_taskregserv +) + +if not !server_num! GTR %max_servers% ( + +if [%1]==[act_win] if %_kms38% EQU 1 ( +set act_ok=1 +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 }" + +call set errorcode=!errorlevel! + +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 +if not defined _server goto _act2 +) +exit /b + +::======================================================================================================================================== + +:_actinfo + +if [%1]==[act_win] if not defined t_name (set prodname=%winos%) + +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 +) + +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 +) + +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 showfix=1 +exit /b +) + +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 +) + + +set gpr=0 +set gpr2=0 +call :_taskgetgrace +set /a "gpr2=(%gpr%+1440-1)/1440" + +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 +) + +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 :dk_color %Green% "%prodname% is successfully activated for %gpr2% days." +) +exit /b +) + +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 + +::======================================================================================================================================== + +:_taskact + +:: Check KMS38 activation + +set gpr=0 +set _kms38=0 +if defined sppwid if %winbuild% GEQ 14393 ( +set _path=%slp% +set _actid=%sppwid% +call :_taskgetgrace +) + +if %gpr% NEQ 0 if %gpr% GTR 259200 ( +set _kms38=1 +call :_taskchkEnterpriseG _kms38 +) + +:: Set specific K-M-S 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 %_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" +) + +echo: +if defined sppwid ( +set _path=%slp% +set _actid=%sppwid% +call :_act act_win +call :_actinfo act_win +) else ( +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 +) +) + +if not defined sppoid if not defined osppid if defined t_name ( +echo: +echo Checking: Volume version of Office is not installed +) + +exit /b + +::======================================================================================================================================== + +:_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 + +:_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 + +:_taskchkEnterpriseG + +for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) +exit /b + +::======================================================================================================================================== + +:: Clean existing K-M-S cache from the registry + +:_taskclear-cache + +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% +) + +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 "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 - -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 %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 %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 "_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 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 - -sc start sppsvc trigger=timer;sessionid=0 %_Nul3% - -goto TheEnd - -: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 - -: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%) -) -if %loc_off19% EQU 1 if %vol_off19% EQU 0 ( -if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%) -) -if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( -if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) -) -if %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 - -: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 - -: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 - -: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 - -: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 - -:oppoff -set "_qr=%_zz1% %spp% %_zz3% Description %_zz4%" -%_qr% %_Nul2% | findstr /i KMSCLIENT %_Nul1% && ( -set Off1ce=1 -exit /b -) -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 - -: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 - -: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 - -: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 - -: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 -) -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 -) - -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 %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 %1 EQU 15 if defined _C15R ( -set loc_off%1=1 -exit /b -) - -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 - -: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% - -: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 - -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 -) - -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 -) -) - -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 - -: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% -) -goto :eof - -:CheckFR - -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 - -: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 - -: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 - -:: Windows 10 [RS5] -:32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee -set "_key=M7XTQ%yh%FN8P6%yh%TTKYV%yh%9D4CC%yh%J462D" &:: Enterprise LTSC 2019 -exit /b - -:7103a333-b8c8-49cc-93ce-d37c09687f92 -set "_key=92NFX%yh%8DJQP%yh%P6BBQ%yh%THF9C%yh%7CG2H" &:: Enterprise LTSC 2019 N -exit /b - -:ec868e65-fadf-4759-b23e-93fe37f2cc29 -set "_key=CPWHC%yh%NT2C7%yh%VYW78%yh%DHDB2%yh%PG3GK" &:: Enterprise for Virtual Desktops -exit /b - -:0df4f814-3f57-4b8b-9a9d-fddadcd69fac -set "_key=NBTWJ%yh%3DR69%yh%3C4V8%yh%C26MC%yh%GQ9M6" &:: Lean -exit /b - -:: 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 - -:e4db50ea-bda1-4566-b047-0ca50abc6f07 -set "_key=7NBT4%yh%WGBQX%yh%MP4H7%yh%QXFF8%yh%YP3KX" &:: Enterprise Remote Server -exit /b - -:: 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 - -:: 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 - -:3f1afc82-f8ac-4f6c-8005-1d233e606eee -set "_key=6TP4R%yh%GNPTD%yh%KYYHQ%yh%7B7DP%yh%J447Y" &:: Pro Education -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 - -:7b9e1751-a8da-4f75-9560-5fadfe3d8e38 -set "_key=3KHY7%yh%WNT83%yh%DGQKR%yh%F7HPR%yh%844BM" &:: Home N -exit /b - -:cd918a57-a41b-4c82-8dce-1a538e221a83 -set "_key=7HNRX%yh%D7KGG%yh%3K4RQ%yh%4WPJ4%yh%YTDFH" &:: Home Single Language -exit /b - -:a9107544-f4a0-4053-a96a-1479abdef912 -set "_key=PVMJN%yh%6DFY6%yh%9CCP6%yh%7BKTT%yh%D3WVR" &:: Home China -exit /b - -:2de67392-b7a7-462a-b1ca-108dd189f588 -set "_key=W269N%yh%WFGWX%yh%YVC9B%yh%4J6C9%yh%T83GX" &:: Pro -exit /b - -:a80b5abf-76ad-428b-b05d-a47d2dffeebf -set "_key=MH37W%yh%N47XK%yh%V7XM9%yh%C7227%yh%GCQG9" &:: Pro N -exit /b - -:e0c42288-980c-4788-a014-c080d2e1926e -set "_key=NW6C2%yh%QMPVW%yh%D7KKK%yh%3GKT6%yh%VCFB2" &:: Education -exit /b - -:3c102355-d027-42c6-ad23-2e7ef8a02585 -set "_key=2WH4N%yh%8QGBV%yh%H22JP%yh%CT43Q%yh%MDWWJ" &:: Education N -exit /b - -:73111121-5638-40f6-bc11-f1d7b0d64300 -set "_key=NPPR9%yh%FWDCX%yh%D2C8J%yh%H872K%yh%2YT43" &:: Enterprise -exit /b - -:e272e3e2-732f-4c65-a8f0-484747d0d947 -set "_key=DPH2V%yh%TTNVB%yh%4X9Q3%yh%TJR4H%yh%KHJW4" &:: Enterprise N -exit /b - -:7b51a46c-0c04-4e8f-9af4-8496cca90d5e -set "_key=WNMTR%yh%4C88C%yh%JK8YV%yh%HQ7T2%yh%76DF9" &:: Enterprise 2015 LTSB -exit /b - -:87b838b7-41b6-4590-8318-5797951d8529 -set "_key=2F77B%yh%TNFGY%yh%69QQF%yh%B8YKP%yh%D69TJ" &:: Enterprise 2015 LTSB N -exit /b - -:: Windows Server 2022 [Fe] -:9bd77860-9b31-4b7b-96ad-2564017315bf -set "_key=VDYBN%yh%27WPP%yh%V4HQT%yh%9VMD4%yh%VMK7H" &:: Standard -exit /b - -: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 - -: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 - -:: Windows Server 2019 [RS5] -:de32eafd-aaee-4662-9444-c1befb41bde2 -set "_key=N69G4%yh%B89J2%yh%4G8F4%yh%WWYCC%yh%J464C" &:: Standard -exit /b - -: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 - -:73e3957c-fc0c-400d-9184-5f7b6f2eb409 -set "_key=N2KJX%yh%J94YW%yh%TQVFB%yh%DG9YT%yh%724CC" &:: Standard ACor -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 - -:8de8eb62-bbe0-40ac-ac17-f75595071ea3 -set "_key=GRFBW%yh%QNDC4%yh%6QBHG%yh%CCK3B%yh%2PR88" &:: ServerARM64 -exit /b - -: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 - -: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 - -:f7e88590-dfc7-4c78-bccb-6f3865b99d1a -set "_key=VHXM3%yh%NR6FT%yh%RY6RT%yh%CK882%yh%KW2CJ" &:: Embedded Industry Automotive -exit /b - -:e9942b32-2e55-4197-b0bd-5ff58cba8860 -set "_key=3PY8R%yh%QHNP9%yh%W7XQD%yh%G6DPH%yh%3J2C9" &:: with Bing -exit /b - -: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 - -:e58d87b5-8126-4580-80fb-861b22f79296 -set "_key=MX3RK%yh%9HNGX%yh%K3QKC%yh%6PJ3F%yh%W8D7B" &:: Pro for Students -exit /b - -: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 - -:21db6ba4-9a7b-4a14-9e29-64a60c59301d -set "_key=KNC87%yh%3J2TX%yh%XB4WP%yh%VCPJV%yh%M4FWM" &:: Essentials -exit /b - -:b743a2be-68d4-4dd3-af32-92425b7bb623 -set "_key=3NPTF%yh%33KPT%yh%GGBPR%yh%YX76B%yh%39KDD" &:: Cloud Storage -exit /b - -:: Windows 8 -:c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60 -set "_key=BN3D2%yh%R7TKB%yh%3YPBD%yh%8DRP2%yh%27GG4" &:: Core -exit /b - -:197390a0-65f6-4a95-bdc4-55d58a3b0253 -set "_key=8N2M2%yh%HWPGY%yh%7PGT9%yh%HGDD8%yh%GVGGY" &:: Core N -exit /b - -: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 - -:af35d7b7-5035-4b63-8972-f0b747b9f4dc -set "_key=DXHJF%yh%N9KQX%yh%MFPVR%yh%GHGQK%yh%Y7RKV" &:: Core ARM -exit /b - -:a98bcd6d-5343-4603-8afe-5908e4611112 -set "_key=NG4HW%yh%VH26C%yh%733KW%yh%K6F98%yh%J8CK4" &:: Pro -exit /b - -: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 - -:458e1bec-837a-45f6-b9d5-925ed5d299de -set "_key=32JNW%yh%9KQ84%yh%P47T8%yh%D8GGY%yh%CWCK7" &:: Enterprise -exit /b - -:e14997e7-800a-4cf7-ad10-de4b45b578db -set "_key=JMNMF%yh%RHW7P%yh%DMY6X%yh%RF3DR%yh%X2BQT" &:: Enterprise N -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 - -:: 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 - -:7d5486c7-e120-4771-b7f1-7b56c6d3170c -set "_key=HM7DN%yh%YVMH3%yh%46JC3%yh%XYTG7%yh%CYQJJ" &:: MultiPoint Standard -exit /b - -:95fd1c83-7df5-494a-be8b-1300e1c9d1cd -set "_key=XNH6W%yh%2V9GX%yh%RGJ4K%yh%Y8X6F%yh%QGJ2G" &:: MultiPoint Premium -exit /b - -:: Windows 7 -:b92e9980-b9d5-4821-9c94-140f632f6312 -set "_key=FJ82H%yh%XT6CR%yh%J8D7P%yh%XQJJ2%yh%GPDD4" &:: Professional -exit /b - -:54a09a0d-d57b-4c10-8b69-a842d6590ad5 -set "_key=MRPKT%yh%YTG23%yh%K7D7T%yh%X2JMM%yh%QY7MG" &:: Professional N -exit /b - -:5a041529-fef8-4d07-b06f-b59b573b32d2 -set "_key=W82YF%yh%2Q76Y%yh%63HXB%yh%FGJG9%yh%GF7QX" &:: Professional E -exit /b - -:ae2ee509-1b34-41c0-acb7-6d4650168915 -set "_key=33PXH%yh%7Y6KF%yh%2VJC9%yh%XBBR8%yh%HVTHH" &:: Enterprise -exit /b - -:1cb6d605-11b3-4e14-bb30-da91c8e3983a -set "_key=YDRBP%yh%3D83W%yh%TY26F%yh%D46B2%yh%XCKRJ" &:: Enterprise N -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 - -:e1a8296a-db37-44d1-8cce-7bc961d59c54 -set "_key=XGY72%yh%BRBBT%yh%FF8MH%yh%2GG8H%yh%W7KCW" &:: Embedded Standard -exit /b - -:aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395 -set "_key=73KQT%yh%CD9G6%yh%K7TQG%yh%66MRP%yh%CQ22C" &:: Embedded ThinPC -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 - -:68531fb9-5511-4989-97be-d11a0f55633f -set "_key=YC6KT%yh%GKW9T%yh%YTKYR%yh%T4X34%yh%R7VHC" &:: Standard -exit /b - -:7482e61b-c589-4b7f-8ecc-46d455ac3b87 -set "_key=74YFP%yh%3QFB3%yh%KQT8W%yh%PMXWJ%yh%7M648" &:: Datacenter -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 - -:f772515c-0e87-48d5-a676-e6962c3e1195 -set "_key=736RG%yh%XDKJK%yh%V34PF%yh%BHK87%yh%J6X3K" &:: MultiPoint Server - ServerEmbeddedSolution -exit /b - -:: Office 2021 -:fbdb3e18-a8ef-4fb3-9183-dffd60bd0984 -set "_key=FXYTK%yh%NJJ8C%yh%GB6DW%yh%3DYQT%yh%6F7TH" &:: Professional Plus -exit /b - -: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 -exit /b - -:6dd72704-f752-4b71-94c7-11cec6bfc355 -set "_key=J2JDC%yh%NJCYY%yh%9RGQ4%yh%YXWMH%yh%T3D4T" &:: Project Standard -exit /b - -:fb61ac9a-1688-45d2-8f6b-0674dbffa33c -set "_key=KNH8D%yh%FGHT4%yh%T8RK3%yh%CTDYJ%yh%K2HT4" &:: Visio Professional -exit /b - -:72fce797-1884-48dd-a860-b2f6a5efd3ca -set "_key=MJVNY%yh%BYWPY%yh%CWV6J%yh%2RKRT%yh%4M8QG" &:: Visio Standard -exit /b - -:1fe429d8-3fa7-4a39-b6f0-03dded42fe14 -set "_key=WM8YG%yh%YNGDD%yh%4JHDC%yh%PG3F4%yh%FC4T4" &:: Access -exit /b - -:ea71effc-69f1-4925-9991-2f5e319bbc24 -set "_key=NWG3X%yh%87C9K%yh%TC7YY%yh%BC2G7%yh%G6RVC" &:: Excel -exit /b - -:a5799e4c-f83c-4c6e-9516-dfe9b696150b -set "_key=C9FM6%yh%3N72F%yh%HFJXB%yh%TM3V9%yh%T86R9" &:: Outlook -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 - -:1f32a9af-1274-48bd-ba1e-1ab7508a23e8 -set "_key=HWCXN%yh%K3WBT%yh%WJBKY%yh%R8BD9%yh%XK29P" &:: Skype for Business -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 - -: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 - -:9d3e4cca-e172-46f1-a2f4-1d2107051444 -set "_key=G2KWX%yh%3NW6P%yh%PY93R%yh%JXK2T%yh%C9Y9V" &:: Publisher -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 - -:0bc88885-718c-491d-921f-6f214349e79c -set "_key=VQ9DP%yh%NVHPH%yh%T9HJC%yh%J9PDT%yh%KTQRG" &:: Pro Plus 2019 Preview -exit /b - -:fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9 -set "_key=XM2V9%yh%DN9HH%yh%QB449%yh%XDGKC%yh%W2RMW" &:: Project Pro 2019 Preview -exit /b - -:500f6619-ef93-4b75-bcb4-82819998a3ca -set "_key=N2CG9%yh%YD3YK%yh%936X4%yh%3WR82%yh%Q3X4H" &:: Visio Pro 2019 Preview -exit /b - -: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 - -:a3b44174-2451-4cd6-b25f-66638bfb9046 -set "_key=2XYX7%yh%NXXBK%yh%9CK7W%yh%K2TKW%yh%JFJ7G" &:: Visio Pro 2021 Preview -exit /b - -:: Office 2016 -:829b8110-0e6f-4349-bca4-42803577788d -set "_key=WGT24%yh%HCNMF%yh%FQ7XH%yh%6M8K7%yh%DRTW9" &:: Project Professional C2R-P -exit /b - -:cbbaca45-556a-4416-ad03-bda598eaa7c8 -set "_key=D8NRQ%yh%JTYM3%yh%7J2DX%yh%646CT%yh%6836M" &:: Project Standard C2R-P -exit /b - -: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 - -:e914ea6e-a5fa-4439-a394-a9bb3293ca09 -set "_key=DMTCJ%yh%KNRKX%yh%26982%yh%JYCKT%yh%P7KB6" &:: MondoR -exit /b - -:9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce -set "_key=HFTND%yh%W9MK4%yh%8B7MJ%yh%B6C4G%yh%XQBR2" &:: Mondo -exit /b - -:d450596f-894d-49e0-966a-fd39ed4c4c64 -set "_key=XQNVK%yh%8JYDB%yh%WJ9W3%yh%YJ8YR%yh%WFG99" &:: Professional Plus -exit /b - -: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 - -:da7ddabc-3fbe-4447-9e01-6ab7440b4cd4 -set "_key=GNFHQ%yh%F6YQM%yh%KQDGJ%yh%327XX%yh%KQBVC" &:: Project Standard -exit /b - -: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 - -:67c0fc0c-deba-401b-bf8b-9c8ad8395804 -set "_key=GNH9Y%yh%D2J4T%yh%FJHGG%yh%QRVH7%yh%QPFDW" &:: Access -exit /b - -: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 - -: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 - -:041a06cb-c5b8-4772-809f-416d03d16654 -set "_key=F47MM%yh%N3XJP%yh%TQXJ9%yh%BP99D%yh%8K837" &:: Publisher -exit /b - -: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 - -:: Office 2013 -:dc981c6b-fc8e-420f-aa43-f8f33e5c0923 -set "_key=42QTK%yh%RN8M7%yh%J3C4G%yh%BBGYM%yh%88CYV" &:: Mondo -exit /b - -: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 - -:4a5d124a-e620-44ba-b6ff-658961b33b9a -set "_key=FN8TT%yh%7WMH6%yh%2D4X9%yh%M337T%yh%2342K" &:: Project Professional -exit /b - -: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 - -: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 - -:f7461d52-7c2b-43b2-8744-ea958e0bd09a -set "_key=VGPNG%yh%Y7HQW%yh%9RHP7%yh%TKPV3%yh%BG7GB" &:: Excel -exit /b - -:fb4875ec-0c6b-450f-b82b-ab57d8d1677f -set "_key=H7R7V%yh%WPNXQ%yh%WCYYC%yh%76BGV%yh%VT7GH" &:: Groove -exit /b - -: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 - -:efe1f3e6-aea2-4144-a208-32aa872b6545 -set "_key=TGN6P%yh%8MMBC%yh%37P2F%yh%XHXXK%yh%P34VW" &:: OneNote -exit /b - -:771c3afa-50c5-443f-b151-ff2546d863a0 -set "_key=QPN8Q%yh%BJBTJ%yh%334K3%yh%93TGY%yh%2PMBT" &:: Outlook -exit /b - -:8c762649-97d1-4953-ad27-b7e2c25b972e -set "_key=4NT99%yh%8RJFH%yh%Q2VDH%yh%KYG2C%yh%4RD4F" &:: Powerpoint -exit /b - -:00c79ff1-6850-443d-bf61-71cde0de305f -set "_key=PN2WF%yh%29XG2%yh%T9HJ7%yh%JQPJR%yh%FCXK4" &:: Publisher -exit /b - -:d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3 -set "_key=6Q7VD%yh%NX8JD%yh%WJ2VH%yh%88V73%yh%4GBJ7" &:: Word -exit /b - -:: Office 2010 -:09ed9640-f020-400a-acd8-d7d867dfd9c2 -set "_key=YBJTT%yh%JG6MD%yh%V9Q7P%yh%DBKXJ%yh%38W9R" &:: Mondo -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 - -:9da2a678-fb6b-4e67-ab84-60dd6a9c819a -set "_key=V7QKV%yh%4XVVR%yh%XYV4D%yh%F7DFM%yh%8R6BM" &:: Standard -exit /b - -:df133ff7-bf14-4f95-afe3-7b48e7e331ef -set "_key=YGX6F%yh%PGV49%yh%PGW3J%yh%9BTGG%yh%VHKC6" &:: Project Professional -exit /b - -:5dc7bf61-5ec9-4996-9ccb-df806a2d0efe -set "_key=4HP3K%yh%88W3F%yh%W2K3D%yh%6677X%yh%F9PGB" &:: Project Standard -exit /b - -:92236105-bb67-494f-94c7-7f7a607929bd -set "_key=D9DWC%yh%HPYVV%yh%JGF4P%yh%BTWQB%yh%WX8BJ" &:: Visio Premium -exit /b - -:e558389c-83c3-4b29-adfe-5e4d7f46c358 -set "_key=7MCW8%yh%VRQVK%yh%G677T%yh%PDJCM%yh%Q8TCP" &:: Visio Professional -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 - -:cee5d470-6e3b-4fcc-8c2b-d17428568a9f -set "_key=H62QG%yh%HXVKF%yh%PP4HP%yh%66KMR%yh%CW9BM" &:: Excel -exit /b - -:8947d0b8-c33b-43e1-8c56-9b674c052832 -set "_key=QYYW6%yh%QP4CB%yh%MBV6G%yh%HYMCJ%yh%4T3J4" &:: Groove - SharePoint Workspace -exit /b - -:ca6b6639-4ad6-40ae-a575-14dee07f6430 -set "_key=K96W8%yh%67RPQ%yh%62T9Y%yh%J8FQJ%yh%BT37T" &:: InfoPath -exit /b - -:ab586f5c-5256-4632-962f-fefd8b49e6f4 -set "_key=Q4Y4M%yh%RHWJM%yh%PY37F%yh%MTKWH%yh%D3XHX" &:: OneNote -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 - -: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 - -:ea509e87-07a1-4a45-9edc-eba5a39f36af -set "_key=D6QFG%yh%VBYP2%yh%XQHM7%yh%J97RH%yh%VVRCK" &:: Small Business Basics -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. -) else ( -call :Clear-KMS-Cache -) -) - -if not [%Act_OK%]==[1] ( -echo. -echo In case of any issues, check https://mass%-%grave.dev/troubleshoot -) - -if defined _unattended exit /b - -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) -) - -if not defined _intcon ( -call :_color %_Red% "Internet is not connected." -exit /b -) - -if [%ERRORCODE%]==[-1073418124] ( -echo Checking Port 1688 connection, it may take a while... -echo. - -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. -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" - -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 - -: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 - -:: 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. - -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 -) - -:========================================================================================================================================== - -:Clear-KMS-Cache - -set OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform -set SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform - -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 KeyManagementServicePort @@ -3256,180 +1890,85 @@ 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 +:_taskregserv + +if defined _server (set KMS_IP=%_server%) +if not defined _port set _port=1688 + +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" + +%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%" -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 +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServiceName /t REG_SZ /d "%KMS_IP%" +%nul% reg add "HKLM\%SPPk%\%_oApp%" /f /v KeyManagementServicePort /t REG_SZ /d "%_port%" +if defined notx86 ( +%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%" /reg:32 +%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%" /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% - -set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" - -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 __________________________________________________________________________________________ -) - -set error_= -echo. -call :Clear-KMS-Cache -call :clearstuff - -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 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% -) +:_tasksetserv -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% -) +:: Multi K-M-S servers integration and servers randomization -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% -) +set srvlist= +set -= -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=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 "%windir%\Online_KMS_Activation_Script\" ( -echo Deleting [Folder] %windir%\Online_KMS_Activation_Script\ -rmdir /s /q "%windir%\Online_KMS_Activation_Script\" %nul% -) - -if exist "%ProgramData%\Online_KMS_Activation.cmd" ( -echo Deleting [File] %ProgramData%\Online_KMS_Activation.cmd -del /f /q "%ProgramData%\Online_KMS_Activation.cmd" %nul% -) - -If exist "%ProgramData%\Online_KMS_Activation\" ( -echo Deleting [Folder] %ProgramData%\Online_KMS_Activation\ -rmdir /s /q "%ProgramData%\Online_KMS_Activation\" %nul% -) - -If exist "%ProgramData%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramData%\Activation-Renewal\ -rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% -) - -If exist "%ProgramFiles%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ -rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% -) - -reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && ( -echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office -Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% -) - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && (set error_=1) -reg query "%key%" /f Path /s | find /i "\Activation-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) +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 -:========================================================================================================================================= +:_taskgetserv -:RenTask +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 -cls -mode con cols=91 lines=30 -title Install Activation Auto-Renewal %masver% +:: 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 KMS 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 +) +:_extracttask: + +::======================================================================================================================================== + +: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% @@ -3438,85 +1977,52 @@ set "_temp=%SystemRoot%\Temp\_taskwork_%Random%" 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', '@REM MASver %masver%' + ' - Dummy%random%' + [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 +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 -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 __________________________________________________________________________________________ -) +:: Extract the text from batch script without character and file encoding issue -::======================================================================================================================================== +:ks_RenExport -:RenDone - -if defined _unattended exit /b - -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 +2037,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 +2169,1341 @@ 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 - -::======================================================================================================================================== - -:_extracttask: -@echo off - -:: Renew K-M-S activation with Online servers via scheduled task - -::============================================================================ -:: -:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project. -:: -:: Homepage: mass grave[.]dev -:: Email: windowsaddict@protonmail.com -:: -::============================================================================ - - -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 -) - -:: Set Path variable, it helps if it is misconfigured in the system - -set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%" -) - ->nul fltmc || 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 +set winbuild=1 +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -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 +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." +) +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= +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% +) +) + +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(4, 1).DefineDynamicModule(2) +$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) + +('enabled#int', 'sku#int', 'state#int').ForEach({ + $i = $_ -split '#' + $n = $i[0] + $t = $i[1] -as [Type] + [void]$SB.DefineField($n, $t, 6) +}) + +$sub_status = $SB.CreateType() +$MB = $DM.DefineType('PInvoke') + +[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + +$Clipc = $MB.CreateType() +$s = [Activator]::CreateInstance($sub_status) +$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) +$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) + +if ($r -eq 0) { + $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) + if ($s.enabled -ne 0) { + if ($s.state -eq 1) { + "Subscription_is_activated." + } + } +} +:winsubstatus: + +:: 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 +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 + +set w= +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] ) -setlocal EnableDelayedExpansion -if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" & exit +echo "%spperror%" | findstr "577 225" %nul% && ( +echo: +echo Your system is most likely infected with Mal%w%ware. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) -::======================================================================================================================================== +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 -:_taskstart +:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) -echo. -echo %date%, %time% +:dk_product -set /a loop=1 -set /a max_loop=4 +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%%') -call :_tasksetserv - -:_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 +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 -echo. -echo Error: Internet is not connected -echo Waiting 30 seconds +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 -timeout /t 30 >nul -set /a loop=%loop%+1 -goto _intrepeat - -:_taskIntConnected - -::======================================================================================================================================== - -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - -::======================================================================================================================================== - -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" - -::======================================================================================================================================== - -:: Clean existing KMS cache from the registry / Set port value to 1688 - -%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 - -::======================================================================================================================================== - -:: Check WMI and sppsvc Errors - -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 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. -) - -::======================================================================================================================================== - -:: Check installed volume products activation ID's - -call :_taskgetids sppwid %slp% windows -call :_taskgetids sppoid %slp% office -call :_taskgetids osppid %ospp% office - -::======================================================================================================================================== - -echo. -echo Renewing KMS activation for all installed Volume products - -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 -) - -::======================================================================================================================================== - -:: Check KMS38 activation - -set gpr=0 -set _kms38=0 -if defined sppwid if %winbuild% GEQ 14393 ( -set _path=%slp% -set _actid=%sppwid% -call :_taskgetgrace -) - -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set _kms38=1 -call :_taskchkEnterpriseG _kms38 -) - -:: 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 %_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" -) - -::======================================================================================================================================== - -echo. -if defined sppwid ( -set _path=%slp% -set _actid=%sppwid% -call :_actprod -call :_act act_win -call :_actinfo act_win +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a ) else ( -echo Checking: Volume version of Windows is not installed +set winos=Windows 10 %%a ) - -if defined sppoid ( -set _path=%slp% -for %%# in (%sppoid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) - -if defined osppid ( -set _path=%ospp% -for %%# in (%osppid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) - -if not defined sppoid if not defined osppid ( -echo. -echo Checking: Volume version of Office is not installed -) - -:_skipact - -::======================================================================================================================================== - -if defined run_once ( -echo. -echo Deleting Scheduled Task Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% -) - -::======================================================================================================================================== - -:_taskend - -echo. -echo Exiting -echo ______________________________________________________________________ - -if defined _tserror (exit /b 123456789) else (exit /b 0) - -::======================================================================================================================================== - -:_act - -set errorcode=12345 -set /a act_attempt=0 - -:_act2 - -if %act_attempt% GTR 4 exit /b - -if not [%act_ok%]==[1] ( -call :_taskgetserv -call :_taskregserv -) - -if not !server_num! GTR %max_servers% ( - -if [%1]==[act_win] if %_kms38% EQU 1 ( -set act_ok=1 -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 }" - -call set errorcode=!errorlevel! - -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 -:_actprod +:: Common lines used in PowerShell reflection code -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 +: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 ::======================================================================================================================================== -:_actinfo +:: Get Product Key from pkeyhelper.dll for future new editions +:: It works on Windows 10 1803 (17134) and later builds. -if [%1]==[act_win] if %_kms38% EQU 1 ( -echo Windows is activated with KMS38 +:k_pkey + +call :dk_reflection + +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 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 + +:k_pkeychannel + +set k=%1 +set m=[Runtime.InteropServices.Marshal] +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); +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 %errorcode% EQU 12345 ( -echo Product Activation Failed -echo Unable to test KMS servers due to restricted or no Internet -set _tserror=1 +) exit /b + +::======================================================================================================================================== + +:dk_errorcheck + +set w= +set showfix= + +:: 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 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=[AV 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%[WU registry is corrupt]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && 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 %results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: ) -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 +::======================================================================================================================================== + +:: Check corrupt services + +set serv_cor= +for %%# in (%_serv%) do ( +set _corrupt= +sc start %%# %nul% +if !errorlevel! EQU 1060 set _corrupt=1 +sc query %%# %nul% || set _corrupt=1 +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1 ) -if %errorcode% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -set _tserror=1 -exit /b +if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) ) -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 +if defined serv_cor ( +set error=1 +call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) -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 +:: Check disabled services + +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=%%#")) ) -cmd /c exit /b %errorcode% -if %errorcode% NEQ 0 ( -echo Product Activation Failed: 0x!=ExitCode! +:: 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 ( -echo Product Activation Failed +if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") +) +) +) + +if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" + +if defined serv_cste ( +set error=1 +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" ) -echo Remaining Period: %gpr2% days ^(%gpr% minutes^) -set _tserror=1 -exit /b ::======================================================================================================================================== -:_taskgetids +:: 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 -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 +set serv_e= +for %%# in (%_serv%) do ( +set errorcode= +set checkerror= -:_taskgetgrace +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 +) -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 +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!") +) -:_taskchkEnterpriseG - -for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) -exit /b +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." +set showfix=1 +) +) ::======================================================================================================================================== -:_taskregserv +:: Various error checks -%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 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.]" +) -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 /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." ) ) + + +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.]" +) + + +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 Error [%wpainfo%]" +) || ( +echo Checking WPA Registry Count [%wpainfo%] +) + + +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" +) +) + + +set osedition= +for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" + +:: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional + +if defined osedition ( +if "%osSKU%"=="164" set osedition=ProfessionalEducation +if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) + +if not defined officeact ( +if not defined osedition ( +call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" +) else ( + +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 +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%]" +) +) +) + + +%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%" +) + + +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 %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]" +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%]" +) +) +) + +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]" +) + + +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]" +) + + +:: 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" %nul% && ( +if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( +set error=1 +call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) || ( +set error=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Reg [Not Found]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +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% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo Checking SPP Interference 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% "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]" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +set error=1 +set showfix=1 +) + + +set tokenstore= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" +if %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" +) + + +:: 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% +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 +) +) + + +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!]" +) +) + + +if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +set error=1 +call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" +) + + +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!]" +) +) + + +:: This code checks if NT SERVICE\sppsvc 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%+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 set permerror=1 +) + +if %winbuild% GEQ 9200 if defined permerror ( +set error=1 +call :dk_color %Red% "Checking SPP Permissions [Error Found]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) + + +:: 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 +call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." +) + 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]::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: + ::======================================================================================================================================== -:_tasksetserv - -:: 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" - -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 - -:_taskgetserv - -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 - -:: 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. - -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: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 +:dk_done -:batcol +echo: +if %_unattended%==1 timeout /t 2 & exit /b -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 - -:_batcol - -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) +) +) +) -$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: +) +) +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 incase 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 ( +set skufound=1 +echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B +) + +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 +) +) +) + +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 + +::======================================================================================================================================== + +:: Below code is used to get alternate edition name and key if current edition doesn't support K-M-S activation + +:: 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 From b7c3f9a98a8c932b52d3658148b636031e98cd09 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 13 Jul 2024 04:18:44 +0530 Subject: [PATCH 02/91] Shorten the Windows Subscription check code --- .../Activators/HWID_Activation.cmd | 36 ++++++------------- .../Activators/KMS38_Activation.cmd | 36 ++++++------------- .../Activators/Online_KMS_Activation.cmd | 36 ++++++------------- 3 files changed, 33 insertions(+), 75 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 36a6e22..27bda52 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -829,33 +829,19 @@ exit /b :: Get Windows Subscription status :winsubstatus: -$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2) -$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) - -('enabled#int', 'sku#int', 'state#int').ForEach({ - $i = $_ -split '#' - $n = $i[0] - $t = $i[1] -as [Type] - [void]$SB.DefineField($n, $t, 6) -}) - -$sub_status = $SB.CreateType() -$MB = $DM.DefineType('PInvoke') - -[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - -$Clipc = $MB.CreateType() -$s = [Activator]::CreateInstance($sub_status) -$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) -$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) - +$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) { - $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) - if ($s.enabled -ne 0) { - if ($s.state -eq 1) { - "Subscription_is_activated." - } + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." } + } } :winsubstatus: diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 23fefb4..0bd1c1f 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -925,33 +925,19 @@ exit /b :: Get Windows Subscription status :winsubstatus: -$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2) -$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) - -('enabled#int', 'sku#int', 'state#int').ForEach({ - $i = $_ -split '#' - $n = $i[0] - $t = $i[1] -as [Type] - [void]$SB.DefineField($n, $t, 6) -}) - -$sub_status = $SB.CreateType() -$MB = $DM.DefineType('PInvoke') - -[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - -$Clipc = $MB.CreateType() -$s = [Activator]::CreateInstance($sub_status) -$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) -$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) - +$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) { - $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) - if ($s.enabled -ne 0) { - if ($s.state -eq 1) { - "Subscription_is_activated." - } + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." } + } } :winsubstatus: diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 22954d4..d1bf5c0 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2268,33 +2268,19 @@ exit /b :: Get Windows Subscription status :winsubstatus: -$DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2) -$SB = $DM.DefineType('sub_status', 9, [ValueType], 0) - -('enabled#int', 'sku#int', 'state#int').ForEach({ - $i = $_ -split '#' - $n = $i[0] - $t = $i[1] -as [Type] - [void]$SB.DefineField($n, $t, 6) -}) - -$sub_status = $SB.CreateType() -$MB = $DM.DefineType('PInvoke') - -[void]$MB.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [UInt32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - -$Clipc = $MB.CreateType() -$s = [Activator]::CreateInstance($sub_status) -$p = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf($s)) -$r = $Clipc::ClipGetSubscriptionStatus([ref]$p) - +$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) { - $s = [Runtime.InteropServices.Marshal]::PtrToStructure($p, [type]$sub_status) - if ($s.enabled -ne 0) { - if ($s.state -eq 1) { - "Subscription_is_activated." - } + $enabled = $m::ReadInt32($p) + if ($enabled -ge 1) { + $state = $m::ReadInt32($p, 8) + if ($state -eq 1) { + "Subscription_is_activated." } + } } :winsubstatus: From 5b694779be1da1d05a838f64ca083568fb9a7c9e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 13 Jul 2024 04:37:16 +0530 Subject: [PATCH 03/91] Remove notx86 check in KMS script and run /reg:32 regardless --- .../Activators/HWID_Activation.cmd | 4 +-- .../Activators/KMS38_Activation.cmd | 4 +-- .../Activators/Ohook_Activation_AIO.cmd | 4 +-- .../Activators/Online_KMS_Activation.cmd | 36 +++++-------------- 4 files changed, 14 insertions(+), 34 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 27bda52..1908299 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -87,8 +87,8 @@ 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" +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" @echo off @exit /b diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 0bd1c1f..6f330e2 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -90,8 +90,8 @@ 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" +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" @echo off @exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 431a936..35c0315 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -87,8 +87,8 @@ 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" +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" @echo off @exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d1bf5c0..3a203ee 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -112,8 +112,8 @@ 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" +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" @echo off @exit /b @@ -331,14 +331,6 @@ if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%v ::======================================================================================================================================== -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - -::======================================================================================================================================== - if %_uni%==1 goto :ks_uninstall :ks_menu @@ -1537,16 +1529,8 @@ goto _intrepeat ::======================================================================================================================================== -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - call :_taskclear-cache -::======================================================================================================================================== - :: Check WMI and sppsvc Errors set applist= @@ -1867,17 +1851,15 @@ 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 @@ -1900,21 +1882,19 @@ if defined _server (set KMS_IP=%_server%) if not defined _port set _port=1688 %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 %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 %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 KeyManagementServicePort /t REG_SZ /d "%_port%" -if defined notx86 ( -%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%" /reg:32 %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 ) -) exit /b ::======================================================================================================================================== From bdb9875a6baf64321fb6789faf13f648c2a7854a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 13 Jul 2024 04:46:38 +0530 Subject: [PATCH 04/91] Remove check activation status scripts and replace them with @abbodi1406's CAS https://gravesoft.dev/cas --- .../Check-Activation-Status-vbs.cmd | 259 ----- .../Check-Activation-Status-wmi.cmd | 564 --------- .../Check-Activation-Status.cmd | 1025 +++++++++++++++++ 3 files changed, 1025 insertions(+), 823 deletions(-) delete mode 100644 MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd delete mode 100644 MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd create mode 100644 MAS/Separate-Files-Version/Check-Activation-Status.cmd 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..02bedad --- /dev/null +++ b/MAS/Separate-Files-Version/Check-Activation-Status.cmd @@ -0,0 +1,1025 @@ +@echo off + + +:: Check-Activation-Status +:: Written by @abbodi1406 +:: https://gravesoft.dev/cas + + +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) +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 any key to exit. +pause >nul +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: From 211835666b600793330f7895471acb14d0c2f576 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 14 Jul 2024 02:29:11 +0530 Subject: [PATCH 05/91] Separate label for malware check To also call it at the start --- .../Activators/HWID_Activation.cmd | 14 +++++++---- .../Activators/KMS38_Activation.cmd | 16 +++++++++---- .../Activators/Ohook_Activation_AIO.cmd | 16 +++++++++---- .../Activators/Online_KMS_Activation.cmd | 24 ++++++++++++------- 4 files changed, 47 insertions(+), 23 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 1908299..c29d59a 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -317,6 +317,7 @@ title HWID Activation %masver% echo: echo Initializing... +call :dk_chkmal for %%# in ( sppsvc.exe @@ -1056,14 +1057,13 @@ exit /b ::======================================================================================================================================== -:dk_errorcheck - -set w= -set showfix= +: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 @@ -1094,9 +1094,15 @@ 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 corrupt services set serv_cor= diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 6f330e2..0465429 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -352,6 +352,7 @@ title KMS38 Activation %masver% echo: echo Initializing... +call :dk_chkmal 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) @@ -486,7 +487,7 @@ 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% GEQ 19044 if !UBR! LSS 2788 ( +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." ) ) @@ -1195,14 +1196,13 @@ exit /b ::======================================================================================================================================== -:dk_errorcheck - -set w= -set showfix= +: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 @@ -1233,9 +1233,15 @@ 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 corrupt services set serv_cor= diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 35c0315..54d0792 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -351,6 +351,7 @@ title Ohook Activation %masver% echo: echo Initializing... +call :dk_chkmal if not exist %SysPath%\sppsvc.exe ( %eline% @@ -465,7 +466,7 @@ 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. Recommended to install one version only]" ) ::======================================================================================================================================== @@ -1500,14 +1501,13 @@ exit /b ::======================================================================================================================================== -:dk_errorcheck - -set w= -set showfix= +: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 @@ -1538,9 +1538,15 @@ 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 corrupt services set serv_cor= diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3a203ee..7dbc021 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -408,6 +408,7 @@ title Online %KS% Activation %masver% echo: echo Initializing... +call :dk_chkmal if not exist %SysPath%\sppsvc.exe ( %eline% @@ -537,13 +538,13 @@ 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% GEQ 19044 if !UBR! LSS 2788 ( +if %winbuild% LSS 22598 if !UBR! LSS 2788 ( call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." ) ) if not defined key if defined notfoundaltactID ( -call :dk_color %Red% "Checking Alternate Edition For KMS [%altedition% Activation ID Not Found]" +call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Activation ID Not Found]" ) if not defined key if not defined _gvlk ( @@ -666,7 +667,7 @@ if not "%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( echo: -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. Recommended to install one version only]" ) ::======================================================================================================================================== @@ -1765,7 +1766,7 @@ set _kms38=1 call :_taskchkEnterpriseG _kms38 ) -:: Set specific K-M-S host to Local Host so that global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions. +:: 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 %_kms38% EQU 1 ( %nul% reg add "HKLM\%SPPk%\%_wApp%\%sppwid%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" @@ -1925,7 +1926,7 @@ set KMS_IP=!server%rand%! set !server%rand%!=1 :: 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 KMS server host name is directly used for the activation. +:: 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" @@ -2499,14 +2500,13 @@ exit /b ::======================================================================================================================================== -:dk_errorcheck - -set w= -set showfix= +: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 @@ -2537,9 +2537,15 @@ 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 corrupt services set serv_cor= From 53cda879c1772f0cd8f39fa2c6a7b885d79d672e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 14 Jul 2024 03:42:48 +0530 Subject: [PATCH 06/91] Add VL IDs in ProductReleaseIds in old Office builds --- .../Activators/Online_KMS_Activation.cmd | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 7dbc021..e05651c 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -705,7 +705,7 @@ set error=1 goto :ks_starto16c2r ) -call :oh_fixprids +if "%_actprojvis%"=="0" call :oh_fixprids call :ks_process ::======================================================================================================================================== @@ -745,7 +745,7 @@ set error=1 goto :ks_startmsi ) -call :oh_fixprids +if "%_actprojvis%"=="0" call :oh_fixprids call :ks_process ::======================================================================================================================================== @@ -949,6 +949,15 @@ set "_osppready=%_config%" ) 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% +) exit /b ::======================================================================================================================================== From e1b994222310dfa33fc78bd62f1d9d1416b6cdfc Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 15 Jul 2024 17:21:40 +0530 Subject: [PATCH 07/91] Remove unsupported EnterpriseSN keys --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index c29d59a..c683c7f 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1605,9 +1605,6 @@ cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F%f%7W2_125_X22-66 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 -837766ff-61c5-427d-87c3-a2acbd44767a_XFC77-XNRXM-2Q36W-FCM9T-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_RQFNW-9TPM3-JQ73T-QV4VQ-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_M33WV-NHY3C-R7FPM-BQGPT-23%f%9PG_126_X21-83264_Fl7tjifybEI9hArxMVFKqIqmI6mrCZy4EtJyVjpo2eSfeMTBli55+E0i2AaPfE2FJknUig7HuiNC1Pu2IWZcj5ShVFQEKPY6K//RucX8oPQfh0zK5r1aNJNvV4gMlqvOyGD8sXttLBZv8wg1w/++cNk/z38DE2shiDf7LYnK4w0_1_Volume:MAK_EnterpriseSN_RS5 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 From 3d16fc6a07952723cc7528f7b636927666d27659 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 16 Jul 2024 17:01:13 +0530 Subject: [PATCH 08/91] Improve/Fix error messages when key is not found --- .../Activators/HWID_Activation.cmd | 22 ++++++++++--------- .../Activators/KMS38_Activation.cmd | 21 +++++++++--------- .../Activators/Ohook_Activation_AIO.cmd | 7 +++--- .../Activators/Online_KMS_Activation.cmd | 21 +++++++++--------- 4 files changed, 37 insertions(+), 34 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index c683c7f..0d49786 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -428,7 +428,6 @@ call :dk_errorcheck set key= set altkey= -set skufound= set changekey= set altapplist= set altedition= @@ -453,14 +452,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. -) else ( -echo Required License files not found in %SysPath%\spp\tokens\skus\ -) +if not defined skunotfound ( +echo This product does not support HWID Activation. +echo Try KMS38 Activation option. echo Make sure you are using updated version of the script. set fixes=%fixes% %mas% echo %mas% +) else ( +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: goto dk_done ) @@ -1242,23 +1244,24 @@ 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 defined osedition ( +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 "%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%]" ) @@ -1628,7 +1631,6 @@ 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 "!allapps! !altapplist!" | find /i "%%A" %nul1% && ( if %%F==1 set notworking=1 set key=%%B diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 0465429..8cca37f 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -473,7 +473,6 @@ call :k_channel set key= set pkey= set altkey= -set skufound= set changekey= set altedition= @@ -499,14 +498,16 @@ call :dk_color %Red% "Checking Alternate Edition For KMS38 [%altedition% Acti 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. -) else ( -echo Required License files not found in %SysPath%\spp\tokens\skus\ -) +if not defined skunotfound ( +echo This product does not support KMS38 Activation. echo Make sure you are using updated version of the script. set fixes=%fixes% %mas% echo %mas% +) else ( +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: goto dk_done ) @@ -1381,23 +1382,24 @@ 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 defined osedition ( +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 "%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%]" ) @@ -1780,7 +1782,6 @@ c2e946d1-cfa2-4523-8c87-30bc696ee584_XGN3F-F394H-FD2MY-PP6FD-8M%f%CRC_407_Server 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==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 54d0792..92ecf98 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1686,23 +1686,24 @@ 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 defined osedition ( +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 "%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%]" ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e05651c..9749843 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -524,7 +524,6 @@ call :k_channel set key= set pkey= set altkey= -set skufound= set changekey= set altedition= @@ -539,7 +538,7 @@ 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 to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." +call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS %KS% activation." ) ) @@ -549,14 +548,16 @@ call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Act if not defined key if not defined _gvlk ( echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skufound ( -call :dk_color %Red% "Unable to find this product in the supported product list." -echo: +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 ( 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: goto :ks_office ) @@ -653,9 +654,7 @@ if defined ohub ( echo: echo You have only Office dashboard app installed, you need to install full Office version. ) -echo: call :dk_color %Blue% "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 :ks_activate @@ -2694,23 +2693,24 @@ 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 defined osedition ( +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 "%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%]" ) @@ -3407,7 +3407,6 @@ d0eded01-0881-4b37-9738-190400095098_MQ84N-7VYDM-FXV7C-6K7CC-VF%f%W9J__16_Word20 for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( if %1==winkey if %osSKU%==%%C if not defined key ( -set skufound=1 echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) From dd3d788bfac0af29ccca04e062d741aeb3f606b0 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 16 Jul 2024 20:03:19 +0530 Subject: [PATCH 09/91] Fix these bugs in checking activated products Issue when similar names products are installed, like O365ProPlusRetail and ProPlusRetail Issue in detecting SPDRetail 2013 because of different name in LicenseFamily --- .../Activators/Ohook_Activation_AIO.cmd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 92ecf98..794741c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -952,7 +952,7 @@ exit /b for %%# in (%_oIds%) do ( -echo: !actiProds%oVer%! | find /i "%%#" %nul1% && ( +echo: !actiProds%oVer%! | find /i "-%%#-" %nul1% && ( call :dk_color %Gray% "Checking Activation Status [%%# is already permanently activated]" ) || ( @@ -1066,6 +1066,7 @@ 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_! @@ -1075,14 +1076,21 @@ 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 -:: Preview VL is not checked for permanent activation +:: Below IDs are not checked for permanent activation set _sortIds=!_sortIds:PreviewVL_=Volume_! +set _sortIds=!_sortIds:PreInstallR_=Retail_! ::======================================================================================================================================== @@ -2253,8 +2261,8 @@ 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 +echo "!_FsortIds!" | find /i "-%%E-" %nul% && ( +set actiProds%oVer%=!actiProds%oVer%! -%%E- ) ) From 6f88a4bf9021f54678ba944757d327e8ae4f0078 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 17 Jul 2024 01:19:06 +0530 Subject: [PATCH 10/91] More accurate check for Office Products in NoEditionChange mode --- .../Activators/Online_KMS_Activation.cmd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 9749843..8209c99 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -984,7 +984,9 @@ for %%# in (%_oIds%) do ( set skipprocess= if %_NoEditionChange%==1 if not defined _oBranding ( -echo %%# | findstr /i "Retail" %nul% && ( +set foundprod= +call :ksdata chkprod %%# +if not defined foundprod ( set skipprocess=1 echo Skipping Because NoEditionChange Mode [%%#] ) @@ -3410,6 +3412,10 @@ if %1==winkey if %osSKU%==%%C if not defined key ( echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B ) +if %1==chkprod if "%oVer%"=="%%C" if not defined foundprod ( +echo "%%D" | findstr /I "\<%2.*" %nul% && set foundprod=1 +) + if %1==getinfo if not defined key if "%oVer%"=="%%C" ( if /i "%2"=="%%D" ( set key=%%B From 962f7e326afd53c1ac4e1d2bc1570c5fced07f8d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 17 Jul 2024 03:54:38 +0530 Subject: [PATCH 11/91] Remove duplicacy of file infector checks --- .../Activators/HWID_Activation.cmd | 9 --------- .../Activators/KMS38_Activation.cmd | 9 --------- .../Activators/Ohook_Activation_AIO.cmd | 9 --------- .../Activators/Online_KMS_Activation.cmd | 9 --------- 4 files changed, 36 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 0d49786..862099d 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -994,7 +994,6 @@ exit /b :dk_sppissue -set w= sc start sppsvc %nul% set spperror=%errorlevel% @@ -1003,14 +1002,6 @@ if %spperror% NEQ 1056 if %spperror% NEQ 0 ( echo sc start sppsvc [Error Code: %spperror%] ) -echo "%spperror%" | findstr "577 225" %nul% && ( -echo: -echo Your system is most likely infected with Mal%w%ware. -echo: -set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" -) - 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 diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 8cca37f..846e657 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1087,7 +1087,6 @@ exit /b :dk_sppissue -set w= sc start sppsvc %nul% set spperror=%errorlevel% @@ -1096,14 +1095,6 @@ if %spperror% NEQ 1056 if %spperror% NEQ 0 ( echo sc start sppsvc [Error Code: %spperror%] ) -echo "%spperror%" | findstr "577 225" %nul% && ( -echo: -echo Your system is most likely infected with Mal%w%ware. -echo: -set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" -) - 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 diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 794741c..b6843b3 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1460,7 +1460,6 @@ exit /b :dk_sppissue -set w= sc start sppsvc %nul% set spperror=%errorlevel% @@ -1469,14 +1468,6 @@ if %spperror% NEQ 1056 if %spperror% NEQ 0 ( echo sc start sppsvc [Error Code: %spperror%] ) -echo "%spperror%" | findstr "577 225" %nul% && ( -echo: -echo Your system is most likely infected with Mal%w%ware. -echo: -set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" -) - 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 diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8209c99..401d812 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2400,7 +2400,6 @@ exit /b :dk_sppissue -set w= sc start sppsvc %nul% set spperror=%errorlevel% @@ -2409,14 +2408,6 @@ if %spperror% NEQ 1056 if %spperror% NEQ 0 ( echo sc start sppsvc [Error Code: %spperror%] ) -echo "%spperror%" | findstr "577 225" %nul% && ( -echo: -echo Your system is most likely infected with Mal%w%ware. -echo: -set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" -) - 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 From 07c4fcdc7466aca2c3d62a9c3f741f5d89d1606b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 18 Jul 2024 04:36:50 +0530 Subject: [PATCH 12/91] Improve error check of SPP in HKU\S-1-5-20 --- .../Activators/HWID_Activation.cmd | 31 ++++++++++--------- .../Activators/KMS38_Activation.cmd | 31 ++++++++++--------- .../Activators/Ohook_Activation_AIO.cmd | 31 ++++++++++--------- .../Activators/Online_KMS_Activation.cmd | 31 ++++++++++--------- 4 files changed, 68 insertions(+), 56 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 862099d..71b0653 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1327,14 +1327,7 @@ echo Checking Eval WLMS Service [Found] ) -reg query "HKU\S-1-5-20" %nul% && ( -if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( -set error=1 -call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) -) || ( +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 Reg [Not Found]" set fixes=%fixes% %mas%troubleshoot @@ -1431,25 +1424,35 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!]" ) -:: 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 ( +if %winbuild% GEQ 9200 ( +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 set permerror=1 +if !errorlevel!==2 set permerror=Error_Found ) -if %winbuild% GEQ 9200 if defined permerror ( +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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE 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 [Error Found]" +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) +) :: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 846e657..d89e2b5 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1465,14 +1465,7 @@ echo Checking Eval WLMS Service [Found] ) -reg query "HKU\S-1-5-20" %nul% && ( -if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( -set error=1 -call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) -) || ( +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 Reg [Not Found]" set fixes=%fixes% %mas%troubleshoot @@ -1569,25 +1562,35 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!]" ) -:: 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 ( +if %winbuild% GEQ 9200 ( +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 set permerror=1 +if !errorlevel!==2 set permerror=Error_Found ) -if %winbuild% GEQ 9200 if defined permerror ( +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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE 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 [Error Found]" +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) +) :: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index b6843b3..2f090f5 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1777,14 +1777,7 @@ echo Checking Eval WLMS Service [Found] ) -reg query "HKU\S-1-5-20" %nul% && ( -if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( -set error=1 -call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) -) || ( +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 Reg [Not Found]" set fixes=%fixes% %mas%troubleshoot @@ -1881,25 +1874,35 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!]" ) -:: 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 ( +if %winbuild% GEQ 9200 ( +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 set permerror=1 +if !errorlevel!==2 set permerror=Error_Found ) -if %winbuild% GEQ 9200 if defined permerror ( +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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE 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 [Error Found]" +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) +) :: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 401d812..aae5e2a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2778,14 +2778,7 @@ echo Checking Eval WLMS Service [Found] ) -reg query "HKU\S-1-5-20" %nul% && ( -if %winbuild% GEQ 15063 reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" %nul% || ( -set error=1 -call :dk_color %Red% "Checking S-1-5-20 SPP Reg [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) -) || ( +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 Reg [Not Found]" set fixes=%fixes% %mas%troubleshoot @@ -2882,25 +2875,35 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!]" ) -:: 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 ( +if %winbuild% GEQ 9200 ( +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 set permerror=1 +if !errorlevel!==2 set permerror=Error_Found ) -if %winbuild% GEQ 9200 if defined permerror ( +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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE 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 [Error Found]" +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) +) :: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before From f6125eaa5bad6e38e0819e49f8b232b25c6f162d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 19 Jul 2024 20:06:52 +0530 Subject: [PATCH 13/91] Add comment about S-1-5-20 SPP registry issue --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 ++ 4 files changed, 8 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 71b0653..d4fea1f 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1437,6 +1437,8 @@ for %%# in ( if !errorlevel!==2 set permerror=Error_Found ) +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" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index d89e2b5..a055156 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1575,6 +1575,8 @@ for %%# in ( if !errorlevel!==2 set permerror=Error_Found ) +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" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 2f090f5..18502c5 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1887,6 +1887,8 @@ for %%# in ( if !errorlevel!==2 set permerror=Error_Found ) +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" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index aae5e2a..3744710 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2888,6 +2888,8 @@ for %%# in ( if !errorlevel!==2 set permerror=Error_Found ) +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" From 1567903b090343fa5802918a742d59fe0f46bae9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 19 Jul 2024 20:21:27 +0530 Subject: [PATCH 14/91] Improve device-based-licensing cleaning --- .../Activators/Ohook_Activation_AIO.cmd | 6 ++++-- .../Activators/Online_KMS_Activation.cmd | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 18502c5..b2b5de6 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1170,8 +1170,10 @@ reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v Share :: Clear device-based-licensing :: https://learn.microsoft.com/deployoffice/device-based-licensing -for %%# in (%_o16c2rIds%) do ( -reg delete %o16c2r_reg%\Configuration /v %%#.DeviceBasedLicensing /f %nul% +if defined _o16c2rIds ( +for /f "tokens=1 delims= " %%A in ('reg query "%o16c2r_reg%\Configuration" %nul6%') do ( +echo %%A | find /i ".DeviceBasedLicensing" %nul% && reg delete "%o16c2r_reg%\Configuration" /v "%%A" /f %nul% +) ) :: Remove OEM registry key diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3744710..c2fb55b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1226,8 +1226,10 @@ reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v Share :: Clear device-based-licensing :: https://learn.microsoft.com/deployoffice/device-based-licensing -for %%# in (%_o16c2rIds%) do ( -reg delete %o16c2r_reg%\Configuration /v %%#.DeviceBasedLicensing /f %nul% +if defined _o16c2rIds ( +for /f "tokens=1 delims= " %%A in ('reg query "%o16c2r_reg%\Configuration" %nul6%') do ( +echo %%A | find /i ".DeviceBasedLicensing" %nul% && reg delete "%o16c2r_reg%\Configuration" /v "%%A" /f %nul% +) ) :: Remove OEM registry key From ddccc4025ff648abb2046a55de0d2bfd19f065cf Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 19 Jul 2024 21:32:28 +0530 Subject: [PATCH 15/91] Optimize the code Thanks to abbodi1406 --- .../Activators/Ohook_Activation_AIO.cmd | 6 +----- .../Activators/Online_KMS_Activation.cmd | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index b2b5de6..71a4e7f 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1170,11 +1170,7 @@ reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v Share :: Clear device-based-licensing :: https://learn.microsoft.com/deployoffice/device-based-licensing -if defined _o16c2rIds ( -for /f "tokens=1 delims= " %%A in ('reg query "%o16c2r_reg%\Configuration" %nul6%') do ( -echo %%A | find /i ".DeviceBasedLicensing" %nul% && reg delete "%o16c2r_reg%\Configuration" /v "%%A" /f %nul% -) -) +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 diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index c2fb55b..3499be9 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1226,11 +1226,7 @@ reg delete HKLM\SOFTWARE\Microsoft\Office\15.0\ClickToRun\Configuration /v Share :: Clear device-based-licensing :: https://learn.microsoft.com/deployoffice/device-based-licensing -if defined _o16c2rIds ( -for /f "tokens=1 delims= " %%A in ('reg query "%o16c2r_reg%\Configuration" %nul6%') do ( -echo %%A | find /i ".DeviceBasedLicensing" %nul% && reg delete "%o16c2r_reg%\Configuration" /v "%%A" /f %nul% -) -) +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 From 5728ba26868a617b0fb8a7fb94c4821965544413 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 20 Jul 2024 03:13:45 +0530 Subject: [PATCH 16/91] Add check for NT SERVICE\sppsvc --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index d4fea1f..051dc8c 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1443,7 +1443,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Deny')) {Exit 3}" %nul% +%psc% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %nul% if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index a055156..32f09a0 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1581,7 +1581,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Deny')) {Exit 3}" %nul% +%psc% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %nul% if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 71a4e7f..da8b967 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1891,7 +1891,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Deny')) {Exit 3}" %nul% +%psc% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %nul% if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3499be9..318a4c2 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2892,7 +2892,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl') -or ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Deny')) {Exit 3}" %nul% +%psc% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %nul% if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) ) From 886745f103738e5d9456047461a1276f8371c9fe Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 21 Jul 2024 04:31:33 +0530 Subject: [PATCH 17/91] Detect sandboxing --- .../Activators/HWID_Activation.cmd | 14 +++++++++++++- .../Activators/KMS38_Activation.cmd | 14 +++++++++++++- .../Activators/Ohook_Activation_AIO.cmd | 14 +++++++++++++- .../Activators/Online_KMS_Activation.cmd | 14 +++++++++++++- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 051dc8c..2f94bff 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1096,6 +1096,18 @@ exit /b 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 set serv_cor= @@ -1283,7 +1295,7 @@ echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" -call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 32f09a0..94704d7 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1234,6 +1234,18 @@ exit /b 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 set serv_cor= @@ -1421,7 +1433,7 @@ echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" -call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index da8b967..4399c4d 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1544,6 +1544,18 @@ exit /b 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 set serv_cor= @@ -1731,7 +1743,7 @@ echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" -call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 318a4c2..664b362 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2545,6 +2545,18 @@ exit /b 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 set serv_cor= @@ -2732,7 +2744,7 @@ echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" -call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) From 4451a25e7f98e539ca6dd00718f8abf38cac4735 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 21 Jul 2024 05:02:51 +0530 Subject: [PATCH 18/91] Differentiate between new and old outlook detection --- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 4399c4d..1900fdc 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1284,7 +1284,7 @@ exit /b set checkapps= set checknames= -for /f "tokens=1" %%i in ('tasklist ^| findstr /I ".exe" %nul6%') do (set "checkapps=!checkapps! %%i") +for /f "tokens=1" %%i in ('tasklist ^| findstr /I ".exe" %nul6%') do (set "checkapps=!checkapps! -%%i-") for %%# in ( Access_msaccess.exe @@ -1301,7 +1301,7 @@ 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")) +echo !checkapps! | find /i "-%%B-" %nul1% && (if defined checknames (set "checknames=!checknames! %%A") else (set "checknames=%%A")) ) ) exit /b From 2b786e3037e1f09a10b303755ccd74c4f18dc29f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 23 Jul 2024 03:17:56 +0530 Subject: [PATCH 19/91] Correct a info line in KMS script --- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 664b362..55cadd5 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -46,7 +46,7 @@ set _port= :: To run the script in debug mode, change 0 to any parameter above that you want to run, in below line set "_debug=0" -:: If value is changed in above lines or any parameter is used then script will run in unattended mode +:: Script will run in unattended mode if parameters are used OR value is changed in above lines FOR activation or uninstall. From 5d47723d0711b9e477643e00f0088bd33268d5f0 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 23 Jul 2024 05:12:02 +0530 Subject: [PATCH 20/91] Show fix_powershell link --- .../Activators/HWID_Activation.cmd | 11 +++++++---- .../Activators/KMS38_Activation.cmd | 11 +++++++---- .../Activators/Ohook_Activation_AIO.cmd | 11 +++++++---- .../Activators/Online_KMS_Activation.cmd | 11 +++++++---- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2f94bff..97b8112 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -215,13 +215,16 @@ 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 PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -) 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 ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 94704d7..99e2b2e 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -213,13 +213,16 @@ 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 PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -) 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 ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 1900fdc..d721898 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -207,13 +207,16 @@ 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 PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -) 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 ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 55cadd5..2bafa70 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -238,13 +238,16 @@ 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 PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -) 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 ) From 8b586964557cc1001aacf7592ffcff9f65e548a8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 23 Jul 2024 06:54:47 +0530 Subject: [PATCH 21/91] Add a check for old renewal task detection --- .../Activators/Online_KMS_Activation.cmd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 2bafa70..3e8234e 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -350,6 +350,11 @@ 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 @@ -1945,6 +1950,7 @@ if [%KMS_IP%]==[!KMS_IP!] for /f "delims=[] tokens=2" %%# in ('pathping -4 -h 1 if not [%KMS_IP%]==[!KMS_IP!] exit /b goto :_taskgetserv ) +::Ver:2.7 :_extracttask: ::======================================================================================================================================== From 70b754657f5d396fd342d71c65bcef9f5c863520 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 23 Jul 2024 07:14:24 +0530 Subject: [PATCH 22/91] Use random GUID instead of %random% --- .../Activators/Online_KMS_Activation.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3e8234e..2a597c7 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1970,7 +1970,8 @@ 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% @@ -1982,7 +1983,7 @@ if not defined _int (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" / if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% call :ks_createInfo.txt -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@REM MASver %masver%' + ' - Dummy%random%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII)" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":_extracttask\:.*`r`n\"; [io.file]::WriteAllText('%_dest%\Activation_task.cmd', '@::%randguid%' + [Environment]::NewLine + $f[1].Trim(), [System.Text.Encoding]::ASCII)" ::======================================================================================================================================== From 29eb5bd60d3bdc892f20bb0458a9a4bf8b2af1bb Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 06:54:15 +0530 Subject: [PATCH 23/91] Generate clean logs on desktop on edition change failure and other fixes --- MAS/Separate-Files-Version/Change_Edition.cmd | 788 ++++++++++-------- 1 file changed, 461 insertions(+), 327 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 5622663..2e7b173 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -1,15 +1,12 @@ @set masver=2.6 -@setlocal DisableDelayedExpansion @echo off ::============================================================================ :: -:: This script is a part of 'Microsoft-Activation-Scripts' (MAS) project. -:: :: Homepage: mass grave[.]dev -:: Email: windowsaddict@protonmail.com +:: Email: mas.help@outlook.com :: ::============================================================================ @@ -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 -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 %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: -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 ) @@ -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,37 +119,8 @@ 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") ::======================================================================================================================================== @@ -149,13 +128,7 @@ 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 +goto dk_done ) ::======================================================================================================================================== @@ -169,6 +142,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" @@ -183,36 +157,89 @@ echo Script is launched from the temp folder, echo Most likely you are running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. -goto 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 +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) - -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 %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 @@ -227,9 +254,10 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: @@ -238,114 +266,109 @@ 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 Desktop location was not detected, 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 + +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 +) +) + +::======================================================================================================================================== + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_reflection call :dk_ckeckwmic +call :dk_sppissue -:: 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: +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 Activation IDs +:: Check Activation ID -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 ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( %eline% -echo Activation IDs not found. Aborting... +echo Either key is not insalled or failed to get installed key activation ID. 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 ) ::======================================================================================================================================== -call :dk_checksku +:: Check Windows Edition and branch -if not defined osSKU ( -%eline% -echo SKU value was not detected properly. Aborting... -goto ced_done -) - -::======================================================================================================================================== - -:: Check Windows Edition - -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 "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 @@ -361,20 +384,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 to any other may not remove "%osedition%" specific features. +echo: +call :dk_color %_Yellow% "Press 7 key to continue..." +choice /c 7 /n +cls ) for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" ( @@ -383,18 +411,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." +if defined dismnotworking call :dk_color %Red% "DISM.exe is not working." 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 +goto dk_done ) ::======================================================================================================================================== @@ -402,7 +430,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 +438,9 @@ 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." 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% @@ -442,17 +470,36 @@ 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 system may not be able to properly change edition to any other later. +echo: +echo [1] Continue +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter a menu option in the 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 -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" @@ -460,14 +507,19 @@ 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-3V6%h%6T +set _chan=Retail +) 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 +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done ) ::======================================================================================================================================== @@ -476,21 +528,16 @@ 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%] +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 ( @@ -510,22 +557,22 @@ if !errorlevel!==1 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% +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!]" -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 ( +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." ) 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" ) ) @@ -533,34 +580,33 @@ 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" + +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%] +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." echo: @@ -571,22 +617,25 @@ 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= @@ -602,97 +651,168 @@ if not defined key ( echo [%targetedition% ^| %winbuild%] echo Unable 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%] +if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working." +echo Changing the Current Edition [%osedition%] %fullbuild% to [%targetedition%] echo: + +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 ::======================================================================================================================================== -:ced_done +:ced_prep + +set _time= +set preperror= + +for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a + +if not defined _time ( +%eline% +echo Failed to get time with Powershell command. +set preperror=1 +exit /b +) + +%psc% Stop-Service TrustedInstaller -force %nul% +%psc% Stop-Service TrustedInstaller -force %nul% + +sc query TrustedInstaller | find /i "RUNNING" %nul% && ( +%eline% +echo Failed to stop TrustedInstaller service. +echo Try again or Restart your system and then 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% + +for %%# in (%SystemRoot%\logs\cbs\cbs.log %SystemRoot%\logs\DISM\dism.log) do if exist %%# ( +%eline% +echo Failed to backup and delete %%# +echo Try again or Restart your system and then try again. +set preperror=1 +exit /b +) + +:: 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% + +if not exist "!desktop!\ChangeEdition_Logs\" md "!desktop!\ChangeEdition_Logs\" %nul% +copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\ChangeEdition_Logs\CBS_%_time%.log" %nul% +copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\ChangeEdition_Logs\DISM_%_time%.log" %nul% echo: -call :dk_color %_Yellow% "Press any key to %_exitmsg%..." -pause %nul1% +echo Log files are copied to the ChangeEdition_Logs folder on the dekstop. +echo: +call :dk_color %Blue% "In case of errors, you must restart your system before trying again." +echo: +set fixes=%fixes% %mas%change_edition_issues +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" 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 @@ -705,23 +825,20 @@ wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "co ) exit /b -:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) +:: Show info for potential script stuck scenario -:dk_product +:dk_sppissue -call :dk_reflection +sc start sppsvc %nul% +set spperror=%errorlevel% -set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') - -set winos= -for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) -echo "%winos%" | find /i "Windows" %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 +854,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 +884,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=$env: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,8 +904,8 @@ 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! +call :k_pkey %targetSKU% '%%#' +if defined pkey call :k_pkeychannel !pkey! if /i [!pkeychannel!]==[%%#] ( set key=!pkey! exit /b @@ -841,6 +952,29 @@ 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 + +::======================================================================================================================================== + :: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition :cbsxml:[ @@ -1113,45 +1247,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 ( From ad45cf092677a4b9351e3da2940593fc318c63f9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 06:56:54 +0530 Subject: [PATCH 24/91] Add red color --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 ++ 4 files changed, 8 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 97b8112..18f4929 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -754,6 +754,7 @@ 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"" @@ -762,6 +763,7 @@ 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"" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 99e2b2e..02e5188 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -849,6 +849,7 @@ 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"" @@ -857,6 +858,7 @@ 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"" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d721898..c991663 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1327,6 +1327,7 @@ 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"" @@ -1335,6 +1336,7 @@ 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"" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 2a597c7..0a30645 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2186,6 +2186,7 @@ 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"" @@ -2194,6 +2195,7 @@ 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"" From 816925bfef9715ff730190ee704b4dcde64d0cfc Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 08:03:09 +0530 Subject: [PATCH 25/91] Ignore log deletion error --- MAS/Separate-Files-Version/Change_Edition.cmd | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 2e7b173..21681f7 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -683,13 +683,6 @@ set preperror= for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a -if not defined _time ( -%eline% -echo Failed to get time with Powershell command. -set preperror=1 -exit /b -) - %psc% Stop-Service TrustedInstaller -force %nul% %psc% Stop-Service TrustedInstaller -force %nul% @@ -707,14 +700,6 @@ copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul% -for %%# in (%SystemRoot%\logs\cbs\cbs.log %SystemRoot%\logs\DISM\dism.log) do if exist %%# ( -%eline% -echo Failed to backup and delete %%# -echo Try again or Restart your system and then try again. -set preperror=1 -exit /b -) - :: Initiate this to appear in fresh logs dism /online /english /Get-CurrentEdition %nul% From 7bf55fc6eefff3a165739c782cbea9f913ee3913 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 19:22:13 +0530 Subject: [PATCH 26/91] Fix bug where 'NETWORK SERVICE' translation is needed --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 18f4929..a2a8e5f 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1460,7 +1460,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %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" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 02e5188..9f9dbfc 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1598,7 +1598,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %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" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index c991663..d65031c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1908,7 +1908,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %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" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 0a30645..2bc541e 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2916,7 +2916,7 @@ 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% "$acl = (Get-Acl 'Registry::!pol!' | fl | Out-String); if (-not ($acl -match 'NT AUTHORITY\\NETWORK SERVICE Allow FullControl' -or $acl -match 'NT SERVICE\\sppsvc Allow FullControl') -or ($acl -match 'Deny')) {Exit 3}" %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" ) ) From 191121c3d48f445d2be7a7511bdf9bd51832fb3a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 22:25:36 +0530 Subject: [PATCH 27/91] Add more checks in checking user profile SID's --- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d65031c..0467fce 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1103,7 +1103,7 @@ set _sortIds=!_sortIds:PreInstallR_=Retail_! :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state 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 $('{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% "$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 not defined _sidlist ( set error=1 From 89bff68b285e2dfecbcef09ac84e3eb8e80d5582 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 22:33:18 +0530 Subject: [PATCH 28/91] Fix pkeyconfig path --- MAS/Separate-Files-Version/Change_Edition.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 21681f7..44ba387 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -875,7 +875,7 @@ exit /b set k=%1 set m=[Runtime.InteropServices.Marshal] -set p=$env:SysPath\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); From 2470963537c81b6a8887d11280805a01da1f11c4 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 28 Jul 2024 22:36:55 +0530 Subject: [PATCH 29/91] Inform to check antivirus block if dll extraction fails --- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 1 + 1 file changed, 1 insertion(+) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0467fce..cb28e14 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -933,6 +933,7 @@ call :dk_color %Blue% "Close [!checknames!] and try again." call :dk_color %Blue% "If its still not resolved then restart system and try again." ) else ( if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart system 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: ) From a46bb78e5e5c29edc3ce9b5d85ce2f2278d8734f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 29 Jul 2024 01:48:14 +0530 Subject: [PATCH 30/91] Show info about buy button in Office dashboard app for Zoomers --- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index cb28e14..02e9473 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -639,7 +639,7 @@ call :oh_licrefresh echo: if not defined error ( call :dk_color %Green% "Office is permanently activated." -REM if defined ohub call :dk_color %Gray% "Office apps such as Word, Excel are activated. Ignore 'Buy Microsoft 365' button in Office dashboard app." +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." From d06185d7f79b14dd3b4428dcd48bb3d973da53b2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 29 Jul 2024 20:31:28 +0530 Subject: [PATCH 31/91] Highlight skipping of Office activation --- .../Activators/Online_KMS_Activation.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 2bc541e..66fe53d 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -996,7 +996,7 @@ set foundprod= call :ksdata chkprod %%# if not defined foundprod ( set skipprocess=1 -echo Skipping Because NoEditionChange Mode [%%#] +call :dk_color %Gray% "Skipping Because NoEditionChange Mode [%%#]" ) ) @@ -1004,7 +1004,7 @@ echo Skipping Because NoEditionChange Mode [%%#] if "%_actprojvis%"=="1" if not defined skipprocess ( echo %%# | findstr /i "Project Visio" %nul% || ( set skipprocess=1 -echo Skipping Because Project/Visio Mode [%%#] +call :dk_color %Gray% "Skipping Because Project/Visio Mode [%%#]" ) ) From a421b12ae46df0e64d2c3a50aa7986f6a0df16b8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 29 Jul 2024 20:43:55 +0530 Subject: [PATCH 32/91] Add info about how to use a different sppc.dll file --- .../Activators/Ohook_Activation_AIO.cmd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 02e9473..f4b0f8c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2382,7 +2382,13 @@ $MemoryStream.Close() :: For any further question, feel free to contact us on mass grave[.]dev/contactus :: ::======================================================================================================================================== - +:: +:: 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 From be45752a216f20ba1d9766f35d752d49f7d1aaff Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 30 Jul 2024 06:21:01 +0530 Subject: [PATCH 33/91] Add info about edition ID difference --- MAS/Separate-Files-Version/Change_Edition.cmd | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 44ba387..e945d4e 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -363,6 +363,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) +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 @@ -439,6 +444,7 @@ set targetedition= %line% echo: 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." @@ -536,6 +542,7 @@ if defined rebootreq goto dk_done cls %line% echo: +%showeditionerror% if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not working." echo Changing the Current Edition [%osedition%] %fullbuild% to [%targetedition%] echo: @@ -605,6 +612,7 @@ call :ced_rebootflag if defined rebootreq goto dk_done 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: @@ -661,6 +669,7 @@ 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: From 98027af16deca9cc1183ba67031fa1eb0f94da72 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 30 Jul 2024 08:41:48 +0530 Subject: [PATCH 34/91] Compress generated logs --- MAS/Separate-Files-Version/Change_Edition.cmd | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index e945d4e..dcccf3a 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -693,7 +693,7 @@ set preperror= for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a %psc% Stop-Service TrustedInstaller -force %nul% -%psc% Stop-Service TrustedInstaller -force %nul% +timeout /t 5 %nul1% sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% @@ -719,14 +719,15 @@ 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% -copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\ChangeEdition_Logs\CBS_%_time%.log" %nul% -copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\ChangeEdition_Logs\DISM_%_time%.log" %nul% +call :compresslog cbs\cbs_%_time%.log ChangeEdition_Logs\CBS %nul% +call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul% echo: -echo Log files are copied to the ChangeEdition_Logs folder on the dekstop. +echo Log files are copied to the ChangeEdition_Logs folder on the desktop. echo: call :dk_color %Blue% "In case of errors, you must restart your system before trying again." echo: @@ -734,6 +735,36 @@ 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 + ::======================================================================================================================================== :: Set variables From 66e8cda508671778f478d5577969abe2c0f274ec Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 30 Jul 2024 08:43:48 +0530 Subject: [PATCH 35/91] Add timeout --- MAS/Separate-Files-Version/Change_Edition.cmd | 1 + 1 file changed, 1 insertion(+) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index dcccf3a..3bedfa8 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -719,6 +719,7 @@ 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% From 6c71e82ef338a37ed912b11e06ccffb11e4ee304 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 30 Jul 2024 08:56:25 +0530 Subject: [PATCH 36/91] Fig a bug in server section --- MAS/Separate-Files-Version/Change_Edition.cmd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 3bedfa8..634fe2e 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -682,6 +682,9 @@ echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula call :ced_postprep +%line% + +goto dk_done ::======================================================================================================================================== From b5a305a14e2d1597c9b316daf4ee1c82eb162648 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 31 Jul 2024 06:35:36 +0530 Subject: [PATCH 37/91] Highlight options if unsupported product is detected --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 5 +++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 ++++++ .../Activators/Ohook_Activation_AIO.cmd | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index a2a8e5f..7b01934 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -161,14 +161,15 @@ 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: +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. +call :dk_color %Blue% "Use KMS38 or Online KMS Activation option." goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 9f9dbfc..c22ae1a 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -167,6 +167,12 @@ 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: +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 ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f4b0f8c..37576bd 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -161,6 +161,8 @@ 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. +echo: +call :dk_color %Blue% "Use Online KMS Activation option." goto dk_done ) From f2e6e6e389a07ddb673933cba34b41bcbcabc07a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 31 Jul 2024 15:19:32 +0530 Subject: [PATCH 38/91] Fix SID code in KMS script --- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 66fe53d..6cc67f9 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1164,7 +1164,7 @@ exit /b :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state 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 $('{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% "$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 not defined _sidlist ( set error=1 From 62d5d5442e45a66889caa573c83bd33d5eaa9987 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 31 Jul 2024 15:52:49 +0530 Subject: [PATCH 39/91] Add old preview editions in KMS script --- .../Activators/Online_KMS_Activation.cmd | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 6cc67f9..03c9961 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3182,7 +3182,7 @@ exit /b :: 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 incase same Edition ID is used in different OS versions with different key (For reference only) +:: 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 = "_" @@ -3312,6 +3312,62 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server 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 +:: 16278 build Preview editions - generated keys +43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise +6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN +ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional +34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN +4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN +5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific +2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage +903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core +5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro +af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education +075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN +2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS +11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN +:: 10240 build Preview editions - generated keys +b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM +cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC +:: 10074 build Preview editions - generated keys +cde952c7-2f96-4d9d-8f2b-2d349f64fc51_VHF9H-NXBBB-63VJD-4V8GJ-2R%f%YK8___4_Enterprise +2a4403df-877f-4046-8271-db6fb6ec54c8_N896F-VG44B-HF8HC-XW23F-MW%f%8YB___4_Enterprise +d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard +ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter +e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb +c23947f3-3f2e-401f-a38c-f38fe0ecb0bd_NKX82-GPWWM-C2KPY-VG78C-FF%f%9R9__27_EnterpriseN +a4383e6b-dada-423d-a43d-f25678429676_Q8MK8-DNHMX-2XWHV-X66TM-CD%f%G33__48_Professional +64192251-81b0-4898-ac63-913cc3edf919_9CYB3-NFMRW-YFDG6-XRQFD-J4%f%YPJ__49_ProfessionalN +9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA +c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry +4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE +3a9a9414-24bf-4836-866d-ba13a298efb0_4K89N-FMV8W-B3F9T-HKF64-DJ%f%X27__97_CoreARM +c6e3410d-e48d-41eb-8ca9-848397f46d02_3TGHP-NHXHM-2PMXX-8KR9M-G2%f%782__98_CoreN +c7a8a09a-571c-4ea8-babc-0cbe4d48a89d_H76BG-QBNM2-QRWJY-67W73-BG%f%7CQ__99_CoreCountrySpecific +b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSingleLanguage +6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core +cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC +c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected +fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent +86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN +687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN +5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage +a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific +e8ced63e-420d-4ab6-8723-aaf165efb5eb_QBQ3Q-2NC74-MKH8F-DTQ34-QG%f%M3G_121_Education +3885bca5-11c1-4d4e-9395-df38f7f09a0e_7MFGN-34DMC-J8FCR-P4DKH-KH%f%J8F_122_EducationN +b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_ServerHI +75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS +4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN +aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS +9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN +:: 8102 build Preview editions - generated keys +8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise +2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC +2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease +bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard +bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium +631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM +::======================================================================================================================================== :: 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 From 31b55fd0e3d90999b63a330cfea27567cb165a75 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 31 Jul 2024 21:38:39 +0530 Subject: [PATCH 40/91] Add two more preview editions and sort all of them EmbeddedIndustryE_TAP-CTP EmbeddedIndustryE_Beta --- .../Activators/Online_KMS_Activation.cmd | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 03c9961..622356f 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3312,40 +3312,41 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server 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 -:: 16278 build Preview editions - generated keys +:: Old Preview editions - Generated keys 43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise -6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN -ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional -34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN -4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN -5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific -2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage -903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core -5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro -af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education -075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN -2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS -11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN -:: 10240 build Preview editions - generated keys -b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM -cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC -:: 10074 build Preview editions - generated keys cde952c7-2f96-4d9d-8f2b-2d349f64fc51_VHF9H-NXBBB-63VJD-4V8GJ-2R%f%YK8___4_Enterprise 2a4403df-877f-4046-8271-db6fb6ec54c8_N896F-VG44B-HF8HC-XW23F-MW%f%8YB___4_Enterprise d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter +8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb +2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC +6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN c23947f3-3f2e-401f-a38c-f38fe0ecb0bd_NKX82-GPWWM-C2KPY-VG78C-FF%f%9R9__27_EnterpriseN +ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional a4383e6b-dada-423d-a43d-f25678429676_Q8MK8-DNHMX-2XWHV-X66TM-CD%f%G33__48_Professional +34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN 64192251-81b0-4898-ac63-913cc3edf919_9CYB3-NFMRW-YFDG6-XRQFD-J4%f%YPJ__49_ProfessionalN +2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease +bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard +bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium +631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM 9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry 4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE +c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9_RNPX3-4GPFM-2DHXB-8WD8P-4R%f%DQX__91_EmbeddedIndustryE +5ca3e488-dbae-4fae-8282-a98fbcd21126_HM9NW-WY98Q-XDF7H-3QV6B-X4%f%QFF__91_EmbeddedIndustryE +b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM 3a9a9414-24bf-4836-866d-ba13a298efb0_4K89N-FMV8W-B3F9T-HKF64-DJ%f%X27__97_CoreARM +4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN c6e3410d-e48d-41eb-8ca9-848397f46d02_3TGHP-NHXHM-2PMXX-8KR9M-G2%f%782__98_CoreN +5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific c7a8a09a-571c-4ea8-babc-0cbe4d48a89d_H76BG-QBNM2-QRWJY-67W73-BG%f%7CQ__99_CoreCountrySpecific +2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSingleLanguage +903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core 6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core +cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent @@ -3353,20 +3354,18 @@ fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_Profes 687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN 5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific +5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro +af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education e8ced63e-420d-4ab6-8723-aaf165efb5eb_QBQ3Q-2NC74-MKH8F-DTQ34-QG%f%M3G_121_Education +075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN 3885bca5-11c1-4d4e-9395-df38f7f09a0e_7MFGN-34DMC-J8FCR-P4DKH-KH%f%J8F_122_EducationN b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_ServerHI +2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS 75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS +11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN 4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS 9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN -:: 8102 build Preview editions - generated keys -8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise -2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC -2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease -bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard -bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium -631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM ::======================================================================================================================================== :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL From 3a050f2da742f7b1ec347a3c563bde025094dc6b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 4 Aug 2024 14:06:08 +0530 Subject: [PATCH 41/91] Fix eval edition change and show .net 3.5 status --- MAS/Separate-Files-Version/Change_Edition.cmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 634fe2e..3657de0 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -507,14 +507,14 @@ 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-3V6%h%6T +set key=VK7JG-NPHTM-C97JM-9MPGT-3V66T set _chan=Retail ) @@ -647,7 +647,7 @@ mode con cols=105 lines=32 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 @@ -696,7 +696,6 @@ set preperror= for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a %psc% Stop-Service TrustedInstaller -force %nul% -timeout /t 5 %nul1% sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% @@ -731,9 +730,10 @@ call :compresslog cbs\cbs_%_time%.log ChangeEdition_Logs\CBS %nul% call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul% echo: +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 the desktop. echo: -call :dk_color %Blue% "In case of errors, you must restart your system before trying again." +call :dk_color %Blue% "In case of errors, restart system before trying again." echo: set fixes=%fixes% %mas%change_edition_issues call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" From 5e4988a6348eb2daea82b57f7d507d7fbede04cf Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 5 Aug 2024 06:15:01 +0530 Subject: [PATCH 42/91] Add more KMS keys for old preview editions --- .../Activators/Online_KMS_Activation.cmd | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 622356f..b29a5d1 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3348,11 +3348,17 @@ b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSi 6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC +827a0032-dced-4609-ab6e-16b9d8a40280_CC92N-X2Y7W-H4H32-QHV2X-3R%f%TT9_111_CoreConnected c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected +49066601-00dc-4d2c-83a8-4343a7b990d1_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%WMR_112_ProfessionalStudent fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent +f18bbe32-16dc-48d4-a27b-5f3966f82513_KJ3DB-VNXVJ-GJG94-RX4RF-K4%f%TVG_113_CoreConnectedN 86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN +bd64ebf7-d5ec-44c5-ba00-6813441c8c87_4K89N-FMV8W-B3F9T-HKF64-DJ%f%34M_114_ProfessionalStudentN 687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN +964a60f6-1505-4ddb-af03-6a9ce6997d3b_NKX82-GPWWM-C2KPY-T4PKC-7C%f%FYJ_115_CoreConnectedSingleLanguage 5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage +b5fe5eaa-14cc-4075-84ae-57c0206d1133_BJMNR-F3WG7-H8W83-27XXK-P3%f%8MC_116_CoreConnectedCountrySpecific a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific 5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education @@ -3364,8 +3370,22 @@ b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_Server 75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS 11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN 4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN +b15187db-11c6-4f13-91ca-8121cebf5b88_JBDKF-6NCD6-49K3G-2TV79-BK%f%PB4_127_ProfessionalS aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS +6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%PB8_128_ProfessionalSN 9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN +:: Missing keys for old preview editions +:: 38fbe2ac-465a-4ef7-b9d8-72044f2792b6 4 Enterprise +:: ea77973e-4930-4fa1-a899-02dfaeada1db 4 Enterprise +:: 92374131-ed4c-4d1b-846a-32f43c3eb90d 7 ServerStandard +:: cc64c548-1867-4777-a1cc-0022691bc2a0 8 ServerDatacenter +:: 9dce1f29-bb10-4be0-8027-35b953dd46d5 10 ServerEnterprise +:: bf9eda2f-74cc-4ba3-8967-cde30f18c230 15 ServerEnterpriseIA64 +:: 4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc 17 ServerWeb +:: 8372b47d-5221-41d8-88d0-3f924e50623e 18 ServerHPC +:: e4ecef68-4372-4740-98e8-6c157cd301c2 27 EnterpriseN +:: 957ec1e8-97cd-42a8-a091-01a30cf779da 48 Professional +:: 0ff4e536-a746-4018-b107-e81dd0b6d33a 49 ProfessionalN ::======================================================================================================================================== :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL From 601bd0e42006069cd0de2b58c09fbca34e1ec8d8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 5 Aug 2024 06:42:49 +0530 Subject: [PATCH 43/91] Add old preview edition keys in KMS38 --- .../Activators/KMS38_Activation.cmd | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index c22ae1a..1a1bc23 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1799,6 +1799,36 @@ a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_Server 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 +:: Old Preview editions from build 14393 - Generated keys +43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise +d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard +ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter +e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb +6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN +ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional +34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN +9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA +c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry +4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE +b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM +4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN +5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific +2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage +903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core +cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC +c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected +fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent +86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN +687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN +5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage +a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific +5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro +af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education +075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN +2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS +11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN +aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS +9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B From 52decdde18f6258a5ec4139e554e57ac22c2edfa Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 13 Aug 2024 05:36:51 +0530 Subject: [PATCH 44/91] Replace hyphen from evaluation-editions URL --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 8 ++++---- .../Activators/KMS38_Activation.cmd | 8 ++++---- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 7b01934..0f61be4 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -377,8 +377,8 @@ echo [%winos% ^| %winbuild%] echo: echo Evaluation Editions cannot be activated outside of evaluation period. echo: -set fixes=%fixes% %mas%evaluation-editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation-editions" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) @@ -1247,8 +1247,8 @@ if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win 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" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 1a1bc23..23461d8 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -427,8 +427,8 @@ call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( echo Evaluation Editions cannot be activated outside of evaluation period. echo: -set fixes=%fixes% %mas%evaluation-editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation-editions" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) goto dk_done ) @@ -1390,8 +1390,8 @@ if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win 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" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 37576bd..abcf1f7 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1697,8 +1697,8 @@ if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win 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" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index b29a5d1..7f4d2eb 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -513,8 +513,8 @@ call :dk_color %Red% "Checking Eval Edition [Evaluation Editio if defined _evalserv ( call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( -set fixes=%fixes% %mas%evaluation-editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation-editions" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) goto :ks_office @@ -2702,8 +2702,8 @@ if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win 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" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) ) From 9f57f585d508c3118bb967a8bcc6263b191d1d04 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 14 Aug 2024 06:44:43 +0530 Subject: [PATCH 45/91] Don't show fix licensing solution in some more cases --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 ++ 4 files changed, 8 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 0f61be4..9c68127 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1131,6 +1131,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%]" ) @@ -1406,6 +1407,7 @@ call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creat ) else ( call :dk_color %Red% "Checking SPP Token Folder [Not Found. Failed To Create] [%tokenstore%\]" set error=1 +set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 23461d8..2c6dcba 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1274,6 +1274,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%]" ) @@ -1549,6 +1550,7 @@ call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creat ) else ( call :dk_color %Red% "Checking SPP Token Folder [Not Found. Failed To Create] [%tokenstore%\]" set error=1 +set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index abcf1f7..ac3674f 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1581,6 +1581,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%]" ) @@ -1856,6 +1857,7 @@ call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creat ) else ( call :dk_color %Red% "Checking SPP Token Folder [Not Found. Failed To Create] [%tokenstore%\]" set error=1 +set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 7f4d2eb..222c0e7 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2586,6 +2586,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%]" ) @@ -2861,6 +2862,7 @@ call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creat ) else ( call :dk_color %Red% "Checking SPP Token Folder [Not Found. Failed To Create] [%tokenstore%\]" set error=1 +set showfix=1 ) ) From 69430c6458c5a644a6dad74840555625c5d66674 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 14 Aug 2024 08:46:43 +0530 Subject: [PATCH 46/91] Don't create renewal task if VL IDs not found or OEMBIOS error is present and Office VL IDs not found --- .../Activators/Online_KMS_Activation.cmd | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 222c0e7..db1fafd 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -807,9 +807,25 @@ call :_taskregserv call :_taskact if not defined showfix if defined _tserror (call :dk_color %Blue% "%_fixmsg%" & set showfix=1) -if %_norentsk%==0 ( +:: 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 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 %_norentsk%==0 if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" call :dk_color %Gray% "Deleting activation renewal task..." +if %_norentsk%==0 call :dk_color %Gray% "Skipping to create activation renewal task..." call :ks_clearstuff %nul% if not defined _server ( if %winbuild% GEQ 9200 ( @@ -1704,6 +1720,7 @@ call :dk_color %Red% "%prodname% cannot be KMS-activated on this computer due to 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 ) From 63b3c5097b5acbd1f6fa35a4483d585cac35ae17 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 14 Aug 2024 09:20:42 +0530 Subject: [PATCH 47/91] Show info regarding Office dashboard app in KMS script --- .../Activators/Online_KMS_Activation.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index db1fafd..56441e1 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -805,6 +805,7 @@ call :_taskregserv ) call :_taskact +if defined sppoid if not defined _tserror if %_NoEditionChange%==0 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." 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 @@ -824,8 +825,8 @@ if defined oemerr if not defined sppoid if not defined osppid (set _deltask=1) if not defined _deltask ( call :ks_renewal ) else ( -if %_norentsk%==0 if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" call :dk_color %Gray% "Deleting activation renewal task..." -if %_norentsk%==0 call :dk_color %Gray% "Skipping to create activation renewal task..." +if exist "%ProgramFiles%\Activation-Renewal\Activation_task.cmd" call :dk_color %Gray% "Deleting activation renewal task..." +call :dk_color %Gray% "Skipping to create activation renewal task..." call :ks_clearstuff %nul% if not defined _server ( if %winbuild% GEQ 9200 ( From b0d898973f48a5ce2272e4c883e6da2e6cc6ff58 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 16 Aug 2024 03:00:58 +0530 Subject: [PATCH 48/91] Change wording --- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 56441e1..70274f1 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -826,7 +826,7 @@ 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 to create 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 ( From 117ba004f0998354b4b4867baac01b8b4bdcbf41 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 16 Aug 2024 03:03:12 +0530 Subject: [PATCH 49/91] better check for malware if sppsvc.exe is not found --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 6 +++++- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 +++++- .../Activators/Ohook_Activation_AIO.cmd | 6 +++++- .../Activators/Online_KMS_Activation.cmd | 6 +++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 9c68127..c2583c9 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1084,7 +1084,11 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corru if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" sc start sppsvc %nul% -echo "%errorlevel%" | findstr "577 225" %nul% && set "results=%results%[Likely File Infector]" +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%]" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 2c6dcba..4037bea 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1227,7 +1227,11 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corru if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" sc start sppsvc %nul% -echo "%errorlevel%" | findstr "577 225" %nul% && set "results=%results%[Likely File Infector]" +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%]" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index ac3674f..8d35a67 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1534,7 +1534,11 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corru if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" sc start sppsvc %nul% -echo "%errorlevel%" | findstr "577 225" %nul% && set "results=%results%[Likely File Infector]" +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%]" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 70274f1..057328a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2557,7 +2557,11 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corru if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" sc start sppsvc %nul% -echo "%errorlevel%" | findstr "577 225" %nul% && set "results=%results%[Likely File Infector]" +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%]" From b33dcb2f722719d8ffe264850f57ac5180656ed2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 16 Aug 2024 04:12:38 +0530 Subject: [PATCH 50/91] Update OEM folder script --- .../Extract_OEM_Folder.cmd | 247 ++++++++++++------ 1 file changed, 167 insertions(+), 80 deletions(-) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index aa61f66..55db54b 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 @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 -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 %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: -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 ) @@ -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,35 +114,7 @@ set "nul2=2>nul" set "nul6=2^>nul" set "nul=>nul 2>&1" -set psc=powershell.exe -set winbuild=1 -for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G - -set _NCS=1 -if %winbuild% LSS 10586 set _NCS=0 -if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) - -if %_NCS% EQU 1 ( -for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" -set "Red="41;97m"" -set "Gray="100;97m"" -set "Green="42;97m"" -set "Blue="44;97m"" -set "_White="40;37m"" -set "_Green="40;92m"" -set "_Yellow="40;93m"" -) else ( -set "Red="Red" "white"" -set "Gray="Darkgray" "white"" -set "Green="DarkGreen" "white"" -set "Blue="Blue" "white"" -set "_White="Black" "Gray"" -set "_Green="Black" "Green"" -set "_Yellow="Black" "Yellow"" -) - -set "nceline=echo: &echo ==== ERROR ==== &echo:" -set "eline=echo: &call :ex_color %Red% "==== ERROR ====" &echo:" +call :dk_setvar ::======================================================================================================================================== @@ -145,12 +125,6 @@ echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equiva goto done2 ) -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find powershell.exe in the system. -goto done2 -) - ::======================================================================================================================================== :: Fix special characters limitation in path name @@ -162,6 +136,8 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% + set "_ttemp=%userprofile%\AppData\Local\Temp" setlocal EnableDelayedExpansion @@ -181,10 +157,36 @@ goto done2 ::======================================================================================================================================== +:: Check PowerShell + +REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: + +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +%eline% +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo: +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( +echo Failed to run Powershell command but Powershell is working. +call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) || ( +echo PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +) +goto done2 +) + +::======================================================================================================================================== + :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( -if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b +if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b %eline% echo This script needs admin rights. echo To do so, right click on this script and select 'Run as administrator'. @@ -193,18 +195,45 @@ goto done2 ::======================================================================================================================================== -:: 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) - -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 %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 @@ -219,18 +248,19 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :ex_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) ) -cls +) ::======================================================================================================================================== @@ -255,7 +285,7 @@ setlocal EnableDelayedExpansion ::======================================================================================================================================== -mode con cols=78 lines=30 +if not defined terminal mode 78, 30 if exist "!desktop!\$OEM$\" ( echo _____________________________________________________ @@ -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% "Enter a menu option in the Keyboard :" choice /C:123456789R0 /N set _erl=%errorlevel% if %_erl%==11 exit /b -if %_erl%==10 start %mas%oem-folder.html &goto :Menu +if %_erl%==10 start %mas%oem-folder &goto :Menu if %_erl%==9 goto:kms_ohook if %_erl%==8 goto:kms38_kms if %_erl%==7 goto:kms38_ohook @@ -450,7 +480,7 @@ goto done 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 @@ -658,8 +688,8 @@ goto :done2 echo ______________________________________________________________ echo: -call :ex_color %Blue% "%oem%" -call :ex_color %Green% "$OEM$ folder is successfully created on the Desktop." +call :dk_color %Blue% "%oem%" +call :dk_color %Green% "$OEM$ folder is successfully created on the Desktop." echo "%oem%" | find /i "38" %nul% && ( echo: echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), @@ -670,8 +700,65 @@ echo ______________________________________________________________ :done2 echo: -call :ex_color %_Yellow% "Press any key to exit..." +if defined fixes ( +call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +choice /C:10 /N +if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) +) + +if defined terminal ( +call :dk_color %_Yellow% "Press 0 key to %_exitmsg%..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to %_exitmsg%..." pause %nul1% +) +exit /b + +::======================================================================================================================================== + +:: Set variables + +:dk_setvar + +set psc=powershell.exe +set winbuild=1 +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G + +set _NCS=1 +if %winbuild% LSS 10586 set _NCS=0 +if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) + +if %_NCS% EQU 1 ( +for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" +set "Red="41;97m"" +set "Gray="100;97m"" +set "Green="42;97m"" +set "Blue="44;97m"" +set "_Red="40;91m"" +set "_White="40;37m"" +set "_Green="40;92m"" +set "_Yellow="40;93m"" +) else ( +set "Red="Red" "white"" +set "Gray="Darkgray" "white"" +set "Green="DarkGreen" "white"" +set "Blue="Blue" "white"" +set "_Red="Black" "Red"" +set "_White="Black" "Gray"" +set "_Green="Black" "Green"" +set "_Yellow="Black" "Yellow"" +) + +set "nceline=echo: &echo ==== ERROR ==== &echo:" +set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" +if %~z0 GEQ 200000 ( +set "_exitmsg=Go back" +set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option." +) else ( +set "_exitmsg=Exit" +set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option." +) exit /b ::======================================================================================================================================== @@ -685,7 +772,7 @@ exit /b ::======================================================================================================================================== -:ex_color +:dk_color if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m @@ -694,7 +781,7 @@ if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3') ) exit /b -:ex_color2 +:dk_color2 if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m From fd0e25f477c79ce8dbf3c214db079270d777dd98 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 16 Aug 2024 04:34:19 +0530 Subject: [PATCH 51/91] Detect Ohook install in KMS script --- .../Activators/Online_KMS_Activation.cmd | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 057328a..b2d51a1 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -602,6 +602,28 @@ 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 +) +) + +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 defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) + :: Check unsupported office versions set o14c2r= From 5f5a51322d35aa3dae58cde5edb70e324cbf0ad8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 16 Aug 2024 05:14:16 +0530 Subject: [PATCH 52/91] Realign lines related to dashboard app info --- .../Activators/Online_KMS_Activation.cmd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index b2d51a1..1665255 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -827,7 +827,6 @@ call :_taskregserv ) call :_taskact -if defined sppoid if not defined _tserror if %_NoEditionChange%==0 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." 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 @@ -874,6 +873,11 @@ if %_actwin%==1 for %%# in (407) do if %osSKU%==%%# ( call :dk_color %Red% "%winos% does not support activation on non-azure platforms." ) +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." +) + :: Trigger reevaluation of SPP's Scheduled Tasks call :dk_reeval %nul% From d08ed1bd389e10a1a5a40d7292b5ce7ef8d788b1 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 17 Aug 2024 01:41:42 +0530 Subject: [PATCH 53/91] Update Troubleshoot script with 2.7 structure --- MAS/Separate-Files-Version/Troubleshoot.cmd | 380 ++++++++++---------- 1 file changed, 199 insertions(+), 181 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 1317df5..75fdb70 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 @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 -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 %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: -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 ) @@ -92,6 +99,7 @@ title Troubleshoot %masver% set _args= set _elev= +set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% @@ -106,20 +114,8 @@ 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") ::======================================================================================================================================== @@ -127,13 +123,7 @@ 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 +goto dk_done ) ::======================================================================================================================================== @@ -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,41 +147,94 @@ setlocal EnableDelayedExpansion echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( -%nceline% +%eline% echo Script is launched from the temp folder, echo Most likely you are running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. -goto 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 +) + +::======================================================================================================================================== + :: 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 +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) - -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 %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 @@ -205,18 +249,19 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo You are running outdated version MAS %masver% +echo Version %masver% of MAS is outdated. echo ________________________________________________ echo: +if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) ) -cls +) ::======================================================================================================================================== @@ -231,7 +276,7 @@ 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 +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% "Enter a menu option in the 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,7 +328,7 @@ 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 ( @@ -302,7 +347,7 @@ 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% @@ -313,8 +358,8 @@ 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 the Windows update is properly working." echo: echo %line% echo: @@ -322,7 +367,7 @@ 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 %psc% Stop-Service TrustedInstaller -force %nul% set _time= @@ -348,7 +393,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 the dekstop." goto :at_back ::======================================================================================================================================== @@ -356,7 +401,7 @@ goto :at_back :sfcscan cls -mode 98, 30 +if not defined terminal mode 98, 30 title sfc /scannow echo: @@ -395,7 +440,7 @@ copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.lo ) echo: -call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." +call :dk_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." goto :at_back ::======================================================================================================================================== @@ -403,7 +448,7 @@ 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^) @@ -422,7 +467,7 @@ 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." +call :dk_color2 %_White% " - " %Red% "Apply it only when it is necessary." echo: echo %line% echo: @@ -439,7 +484,7 @@ cls echo: echo %line% echo: -call :_color %Blue% "Rebuilding ClipSVC Licences" +call :dk_color %Blue% "Rebuilding ClipSVC Licences" echo: if %winbuild% LSS 10240 ( @@ -468,7 +513,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,7 +532,7 @@ echo: echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" echo Restart the system, that will delete this registry key automatically. ) || ( echo [Successful] @@ -500,7 +545,7 @@ echo Deleting a 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] ) @@ -515,7 +560,7 @@ 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] ) @@ -526,7 +571,7 @@ echo Rebuilding Folder %ProgramData%\Microsoft\Windows\ClipSVC\ 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] ) @@ -546,7 +591,7 @@ for %%# in (wlidsvc LicenseManager) do (%psc% Restart-Service %%# %nul%) echo: echo %line% echo: -call :_color %Blue% "Clearing Office vNext License" +call :dk_color %Blue% "Clearing Office vNext License" echo: setlocal DisableDelayedExpansion @@ -608,13 +653,13 @@ if not defined regfound echo Not Found - Office vNext Registry Keys 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%] ) @@ -623,7 +668,7 @@ 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%" +call :dk_color %Red% "WPA Registry Error: %wpainfo%" ) || ( echo WPA Registry Count: %wpainfo% ) @@ -662,7 +707,7 @@ set "d=!d! Set-Acl -Path '%%A' -AclObject $acl" call :checkperms if defined permerror ( -call :_color %Red% "[Failed To Fix]" +call :dk_color %Red% "[Failed To Fix]" ) else ( echo [Successfully Fixed] ) @@ -681,7 +726,7 @@ 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: ) @@ -692,14 +737,14 @@ if %errorlevel% NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %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 rebuilt tokens.dat file." ) else ( echo tokens.dat file was rebuilt successfully. ) @@ -711,7 +756,7 @@ 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% || ( @@ -723,7 +768,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,7 +783,7 @@ 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: ) @@ -756,7 +801,7 @@ call :scandatospp check echo: if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." +call :dk_color %Red% "Failed to rebuilt tokens.dat file." ) else ( echo tokens.dat file was rebuilt successfully. ) @@ -768,7 +813,7 @@ 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 @@ -857,8 +902,8 @@ 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..." +call :dk_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." +call :dk_color %_Yellow% "Press any key to continue..." echo: pause %nul1% ) @@ -902,7 +947,7 @@ echo: echo %line% echo: echo: -call :_color %Green% "Finished" +call :dk_color %Green% "Finished" goto :at_back ::======================================================================================================================================== @@ -910,7 +955,7 @@ goto :at_back :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 @@ -945,7 +990,7 @@ 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% @@ -965,7 +1010,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 +1023,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 :" @@ -995,7 +1040,7 @@ echo: echo Deleting WMI repository rmdir /s /q "%windir%\System32\wbem\repository\" %nul% if exist "%windir%\System32\wbem\repository\" ( -call :_color %Red% "[Failed]" +call :dk_color %Red% "[Failed]" ) else ( echo [Successful] ) @@ -1006,14 +1051,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 +1070,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 @@ -1077,21 +1122,12 @@ exit /b echo: echo %line% echo: -call :_color %_Yellow% "Press any key to go back..." +call :dk_color %_Yellow% "Press any key to go back..." pause %nul1% goto :at_menu ::======================================================================================================================================== -:at_done - -echo: -echo Press any key to %_exitmsg%... -pause %nul1% -exit /b - -::======================================================================================================================================== - :compresslog :: https://stackoverflow.com/a/46268232 @@ -1262,106 +1298,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" +if not exist %psc% (echo %~3) else (%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" +if not exist %psc% (echo %~3%~6) else (%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 +:: Set variables -:batcol +:dk_setvar -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 psc=powershell.exe +set winbuild=1 +for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -:_batcol - -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 "." - Date: Sat, 17 Aug 2024 02:28:32 +0530 Subject: [PATCH 54/91] Optimize DISM restore and SFC scan log creation --- MAS/Separate-Files-Version/Troubleshoot.cmd | 38 +++++++++++++-------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 75fdb70..d0956fb 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -368,21 +368,28 @@ 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% -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 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% @@ -393,7 +400,7 @@ copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_t ) echo: -call :dk_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 the desktop." goto :at_back ::======================================================================================================================================== @@ -420,27 +427,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 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 :dk_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." +call :dk_color %Gray% "CBS log is copied to the AT_Logs folder on the desktop." goto :at_back ::======================================================================================================================================== @@ -1154,7 +1164,7 @@ 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 From bc5efae19d9b10efcdb1777489c03f4eaacf5f7e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 17 Aug 2024 07:08:19 +0530 Subject: [PATCH 55/91] Remove Office vNext cleaning code Its already there in activation scripts --- MAS/Separate-Files-Version/Troubleshoot.cmd | 81 +++------------------ 1 file changed, 10 insertions(+), 71 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index d0956fb..72b7b2c 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -458,8 +458,10 @@ goto :at_back :retokens cls -if not defined terminal mode 125, 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^) echo: @@ -500,13 +502,13 @@ echo: if %winbuild% LSS 10240 ( echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent. 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... @@ -589,77 +591,14 @@ 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 :dk_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 +for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") ::======================================================================================================================================== :: Rebuild SPP Tokens +:rebuildspptok + echo: echo %line% echo: From 73eabbff59964ef0386c014e5256d33981211f1a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 17 Aug 2024 07:17:04 +0530 Subject: [PATCH 56/91] Remove WPA check Already present in activation scripts --- MAS/Separate-Files-Version/Troubleshoot.cmd | 47 --------------------- 1 file changed, 47 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 72b7b2c..27070aa 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -613,15 +613,6 @@ call :dk_color %Red% "tokens.dat file not found." 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 :dk_color %Red% "WPA Registry Error: %wpainfo%" -) || ( -echo WPA Registry Count: %wpainfo% -) - 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" @@ -1109,44 +1100,6 @@ 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 - -$osVersion = [System.Environment]::OSVersion.Version -$minBuildNumber = 14393 - -if ($osVersion.Build -ge $minBuildNumber) { - $subkeyHashTable = @{} - foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $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" - $wpaKey.Close() - 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 - } -} -$count -$wpaKey.Close() -:wpatest: - -::======================================================================================================================================== - :checkperms set permerror= From a62c3ac36d528343ca121b478c005175e86c73ce Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 18 Aug 2024 03:44:07 +0530 Subject: [PATCH 57/91] Optimize checks and fixes for SPP perms, replace slmgr /rilc --- MAS/Separate-Files-Version/Troubleshoot.cmd | 206 ++++++++++++++++---- 1 file changed, 169 insertions(+), 37 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 27070aa..415f204 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -462,7 +462,7 @@ 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% @@ -475,7 +475,7 @@ 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 - Clear ClipSVC, SPP and OSPP licenses echo - Fix SPP permissions of tokens folder and registries echo - Trigger the repair option for Office. echo: @@ -614,42 +614,28 @@ 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 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 :dk_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] @@ -671,9 +657,9 @@ 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 ( @@ -1102,21 +1088,167 @@ exit /b :checkperms +:: 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 not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" 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" +) ) exit /b ::======================================================================================================================================== +:: Fix SPP related registry and folder permissions + +:fixsppperms: +# Fix perms for Token Folder + +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 +} + +# 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' } + } + + ### 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 +} + +Take-Permissions "Users" "S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" "S-1-5-20" +:fixsppperms: + +::======================================================================================================================================== + +:: 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: + +::======================================================================================================================================== + :scandat set token= From 9efc3e49b9aa988b7e74c00b4131fd7c6485911a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 18 Aug 2024 04:15:20 +0530 Subject: [PATCH 58/91] Show perms error separately for folder and registry --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 8 +++++++- .../Activators/KMS38_Activation.cmd | 8 +++++++- .../Activators/Ohook_Activation_AIO.cmd | 8 +++++++- .../Activators/Online_KMS_Activation.cmd | 8 +++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index c2583c9..e7ff464 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1458,7 +1458,13 @@ for %%# in ( "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 set permerror=Error_Found +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 diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 4037bea..9e25df5 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1601,7 +1601,13 @@ for %%# in ( "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 set permerror=Error_Found +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 diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 8d35a67..f7046a7 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1908,7 +1908,13 @@ for %%# in ( "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 set permerror=Error_Found +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 diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 1665255..92efa98 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2957,7 +2957,13 @@ for %%# in ( "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 set permerror=Error_Found +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 From fb113c7c243190b267722d4a5fca48bc0a7a40e4 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 18 Aug 2024 04:48:57 +0530 Subject: [PATCH 59/91] Replace wmic.exe with Powershell in fix wmi --- MAS/Separate-Files-Version/Troubleshoot.cmd | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 415f204..e35d102 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -892,12 +892,6 @@ 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... -goto :at_back -) - echo: echo Checking WMI call :checkwmi @@ -1030,12 +1024,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 From d55b9fa78c301672774a1fb4be13d55935871762 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 18 Aug 2024 05:08:35 +0530 Subject: [PATCH 60/91] Avoid using pause if Terminal is detected --- .../Check-Activation-Status.cmd | 17 +++++++++++++++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 13 +++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/MAS/Separate-Files-Version/Check-Activation-Status.cmd b/MAS/Separate-Files-Version/Check-Activation-Status.cmd index 02bedad..a9ba6a4 100644 --- a/MAS/Separate-Files-Version/Check-Activation-Status.cmd +++ b/MAS/Separate-Files-Version/Check-Activation-Status.cmd @@ -6,10 +6,23 @@ :: 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 @@ -29,8 +42,8 @@ setlocal EnableDelayedExpansion :E_Exit echo. -echo Press any key to exit. -pause >nul +echo Press 0 key to exit. +choice /c 0 /n exit /b :sppmgr: diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index e35d102..eeaa116 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -829,10 +829,14 @@ echo: ) else ( echo: call :dk_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." +if defined terminal ( +call :dk_color %_Yellow% "Press 0 key to continue..." +choice /c 0 /n +) else ( call :dk_color %_Yellow% "Press any key to continue..." -echo: pause %nul1% ) +) if defined uwp16 ( echo: @@ -1042,8 +1046,13 @@ exit /b echo: echo %line% echo: -call :dk_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 ::======================================================================================================================================== From b983bd41dabe0d683c851e7e4d3d9f6c1a13904d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 05:29:19 +0530 Subject: [PATCH 61/91] Replace square brackets with double quotes in string comparison --- .../Activators/HWID_Activation.cmd | 4 +- .../Activators/KMS38_Activation.cmd | 4 +- .../Activators/Ohook_Activation_AIO.cmd | 40 +++++++++---------- .../Activators/Online_KMS_Activation.cmd | 36 ++++++++--------- MAS/Separate-Files-Version/Change_Edition.cmd | 4 +- .../Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 4 +- 7 files changed, 47 insertions(+), 47 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index e7ff464..25c6754 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -290,7 +290,7 @@ 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 ( @@ -395,7 +395,7 @@ call :dk_showosinfo 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 ( diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 9e25df5..93ca46d 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -293,7 +293,7 @@ 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 ( @@ -1190,7 +1190,7 @@ 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!]==[%%#] ( +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f7046a7..4dcc8f1 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -283,7 +283,7 @@ 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 ( @@ -520,11 +520,11 @@ 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" ) @@ -570,11 +570,11 @@ 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" ) @@ -613,7 +613,7 @@ call :dk_color %Gray% "Checking Old Office With Sub License [Found. Update Of 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] ( +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% ) @@ -976,7 +976,7 @@ set _prod=%%#!_preview! call :ohookdata getinfo !_prod! -if not [!key!]==[] ( +if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( @@ -1017,14 +1017,14 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastPr 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 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 "%_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" ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 92efa98..8b75815 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -312,7 +312,7 @@ 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 ( @@ -452,7 +452,7 @@ call :dk_showosinfo 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 ( @@ -1079,7 +1079,7 @@ set _prod=!_altoffid! call :ks_osppready ) -if not [!key!]==[] ( +if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic call :dk_inskey "[!key!] [!_prod!]" ) else ( @@ -1119,8 +1119,8 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastPr 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 not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 +if "%osarch%"=="x86" set _oArch=x86 set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" @@ -1565,12 +1565,12 @@ call :_tasksetserv for %%a in (%srvlist%) do ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto _taskIntConnected +if not "%%#"=="" goto _taskIntConnected ) ) nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto _taskIntConnected +if "%errorlevel%"=="0" goto _taskIntConnected if %loop%==%max_loop% ( set _tserror=1 @@ -1681,14 +1681,14 @@ set /a act_attempt=0 if %act_attempt% GTR 4 exit /b -if not [%act_ok%]==[1] ( +if not "%act_ok%"=="1" ( if not defined _server call :_taskgetserv call :_taskregserv ) if not !server_num! GTR %max_servers% ( -if [%1]==[act_win] if %_kms38% EQU 1 ( +if "%1"=="act_win" if %_kms38% EQU 1 ( set act_ok=1 exit /b ) @@ -1702,7 +1702,7 @@ if !errorcode! EQU 0 ( set act_ok=1 exit /b ) -if [%1]==[act_win] if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( +if "%1"=="act_win" if !errorcode! EQU -1073418187 if %winbuild% LSS 9200 ( set act_ok=1 exit /b ) @@ -1717,9 +1717,9 @@ exit /b :_actinfo -if [%1]==[act_win] if not defined t_name (set prodname=%winos%) +if "%1"=="act_win" if not defined t_name (set prodname=%winos%) -if [%1]==[act_win] if %_kms38% EQU 1 ( +if "%1"=="act_win" if %_kms38% EQU 1 ( if defined t_name ( echo %prodname% is already activated with KMS38. ) else ( @@ -1739,7 +1739,7 @@ set _tserror=1 exit /b ) -if %errorcode% EQU -1073418187 if [%1]==[act_win] if %winbuild% LSS 9200 ( +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 ( @@ -1784,9 +1784,9 @@ exit /b ) set _actpass=1 -if %gpr% EQU 43200 if [%1]==[act_win] if %winbuild% GEQ 9200 set _actpass=0 +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% GTR 259200 if "%1"=="act_win" call :_taskchkEnterpriseG _actpass if %gpr% EQU 259200 set _actpass=0 if %errorcode% EQU 0 if %_actpass% EQU 0 ( @@ -1990,8 +1990,8 @@ set !server%rand%!=1 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 +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 @@ -2546,7 +2546,7 @@ 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!]==[%%#] ( +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 3657de0..0ccfe42 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -248,7 +248,7 @@ 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 ( @@ -935,7 +935,7 @@ 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!]==[%%#] ( +if /i "!pkeychannel!"=="%%#" ( set key=!pkey! exit /b ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 55db54b..431dc43 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -242,7 +242,7 @@ 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 ( diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index eeaa116..eea9c95 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -243,7 +243,7 @@ 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 ( @@ -340,7 +340,7 @@ 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: From ae48118ddb1742765709bbe3cf447766114db064 Mon Sep 17 00:00:00 2001 From: Adel Aloui Date: Mon, 19 Aug 2024 01:22:08 +0100 Subject: [PATCH 62/91] Rephrase text and fix issue #521 --- .../MAS_AIO-CRC32_31F7FD1E.cmd | 16 ++++++++-------- .../Activators/HWID_Activation.cmd | 2 +- .../Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Edition.cmd | 4 ++-- .../Extract_OEM_Folder.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd index b5b0c7a..ee88f49 100644 --- a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd +++ b/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd @@ -221,7 +221,7 @@ if not defined _MASunattended ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :_color %_Green% "Enter a menu option on 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) @@ -285,7 +285,7 @@ echo: [8] 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] :" +call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,8,0] :" choice /C:123456780 /N set _erl=%errorlevel% @@ -326,7 +326,7 @@ 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] :" +call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,0] :" choice /C:12340 /N set _erl=%errorlevel% @@ -392,7 +392,7 @@ call :_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Go Back echo: ________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:" +call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard:" choice /C:123456789R0 /N set _erl=%errorlevel% @@ -1786,7 +1786,7 @@ 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% "Enter a menu option on your keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b @@ -3111,7 +3111,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b @@ -4047,7 +4047,7 @@ 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]" +call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,0]" choice /C:12345670 /N set _el=%errorlevel% @@ -8799,7 +8799,7 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" +call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" choice /C:1234560 /N set _erl=%errorlevel% diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 25c6754..cf32083 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -303,7 +303,7 @@ 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% "Enter a menu option on 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) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 93ca46d..9a0b303 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -306,7 +306,7 @@ 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% "Enter a menu option on 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) @@ -339,7 +339,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 4dcc8f1..a45c9bd 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -296,7 +296,7 @@ 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% "Enter a menu option on 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) @@ -332,7 +332,7 @@ 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% "Enter a menu option on your keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8b75815..d6b27d8 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -325,7 +325,7 @@ 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% "Enter a menu option on 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) @@ -385,7 +385,7 @@ echo [9] Download Office echo [0] %_exitmsg% echo ______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8,9,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,8,9,0]" choice /C:1234567890 /N set _el=!errorlevel! diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 0ccfe42..23bd0e2 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -261,7 +261,7 @@ 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% "Enter a menu option on 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) @@ -488,7 +488,7 @@ echo: echo [1] Continue echo [0] Go Back echo: -call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 goto cedmenu2 if !errorlevel!==1 rem diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 431dc43..0811c33 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -255,7 +255,7 @@ 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% "Enter a menu option on 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) @@ -349,7 +349,7 @@ call :dk_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Exit echo: ________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" +call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" choice /C:123456789R0 /N set _erl=%errorlevel% diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index eea9c95..40e3c3a 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -256,7 +256,7 @@ 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% "Enter a menu option on 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) @@ -310,7 +310,7 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" +call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" choice /C:1234560 /N set _erl=%errorlevel% From 79bc7b024214490aca891a12202475a22b3de482 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 06:17:15 +0530 Subject: [PATCH 63/91] Avoid a potential crash in wmic.exe check --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Edition.cmd | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 25c6754..4731a7a 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -992,7 +992,7 @@ function ReinstallLicenses() { 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 diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 93ca46d..b716d16 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1090,7 +1090,7 @@ function ReinstallLicenses() { 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 diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 4dcc8f1..d06eb46 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1458,7 +1458,7 @@ function ReinstallLicenses() { 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 diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8b75815..69b29c0 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1540,7 +1540,7 @@ set t_name=Run Once Task 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" 2>nul | find /i "computersystem" 1>nul && set _wmic=1 ) setlocal EnableDelayedExpansion @@ -2446,7 +2446,7 @@ function ReinstallLicenses() { 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 diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 0ccfe42..07855b1 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -850,7 +850,7 @@ 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 From bf814304c62cbeba6e18ddf83b023363f3857dce Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 18:40:07 +0530 Subject: [PATCH 64/91] Add fix for issues caused by update KB971033 in Windows 7 --- MAS/Separate-Files-Version/Troubleshoot.cmd | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 40e3c3a..74ceb0e 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -646,6 +646,23 @@ echo: echo Stopping sppsvc service... %psc% Stop-Service sppsvc -force %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 +) + echo: call :scandat delete call :scandat check @@ -675,6 +692,10 @@ call :dk_color %Red% "Failed to rebuilt tokens.dat file." echo tokens.dat file was rebuilt successfully. ) +if %winbuild% LSS 9200 ( +sc config sppuinotify start= demand +) + ::======================================================================================================================================== :: Rebuild OSPP Tokens @@ -1373,6 +1394,7 @@ if not exist %psc% (echo %~3%~6) else (%psc% write-host -back '%1' -fore '%2' '% ) exit /b + ::======================================================================================================================================== :: Set variables From 3fd16669264dc9c85c37957d949bb6f37021d9a1 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 18:43:14 +0530 Subject: [PATCH 65/91] Fix color code --- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 0811c33..c3e4a85 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -777,7 +777,7 @@ exit /b 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 @@ -786,7 +786,7 @@ exit /b 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 74ceb0e..3196a43 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1381,7 +1381,7 @@ exit /b 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 @@ -1390,11 +1390,10 @@ exit /b 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 - ::======================================================================================================================================== :: Set variables From 0d26ba046efae62c0002303313cc899ccdfa8f15 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 19:07:39 +0530 Subject: [PATCH 66/91] Use %syspath% --- MAS/Separate-Files-Version/Troubleshoot.cmd | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 3196a43..fb8522b 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -844,7 +844,7 @@ echo: if %counter% EQU 0 ( echo: -echo Installed Office is not found. +echo Office ^(2010 and later^) is not installed. goto :repairend echo: ) else ( @@ -983,8 +983,8 @@ exit echo: echo Deleting WMI repository -rmdir /s /q "%windir%\System32\wbem\repository\" %nul% -if exist "%windir%\System32\wbem\repository\" ( +rmdir /s /q "%SysPath%\wbem\repository\" %nul% +if exist "%SysPath%\wbem\repository\" ( call :dk_color %Red% "[Failed]" ) else ( echo [Successful] @@ -1029,9 +1029,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 @@ -1277,9 +1277,9 @@ function ReinstallLicenses() { 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 ( From af7d204c9627c44e10fed6d85c363e59ccdd8630 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 19:20:52 +0530 Subject: [PATCH 67/91] Rename file (- to _) --- .../{Check-Activation-Status.cmd => Check_Activation_Status.cmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MAS/Separate-Files-Version/{Check-Activation-Status.cmd => Check_Activation_Status.cmd} (100%) diff --git a/MAS/Separate-Files-Version/Check-Activation-Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd similarity index 100% rename from MAS/Separate-Files-Version/Check-Activation-Status.cmd rename to MAS/Separate-Files-Version/Check_Activation_Status.cmd From 1f50e4ba98acf455967eadc11e6fc5719145e702 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 19 Aug 2024 19:53:05 +0530 Subject: [PATCH 68/91] Allow Office repair on ARM64 as well --- MAS/Separate-Files-Version/Troubleshoot.cmd | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index fb8522b..fbd71b6 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -765,15 +765,6 @@ 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 ( @@ -790,12 +781,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") @@ -901,6 +892,15 @@ echo: 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 From ed3dace78fffc4ac3c28a04e1190a0d2b9b24099 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 20 Aug 2024 03:13:20 +0530 Subject: [PATCH 69/91] Cleanup some registry keys --- MAS/Separate-Files-Version/Troubleshoot.cmd | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index fbd71b6..a452af2 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -663,6 +663,16 @@ 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 + +%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 "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies" /f +%nul% reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" /f +%nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f + echo: call :scandat delete call :scandat check From 9e5062e7cc3798e0e3da5a60d684ae37d12c47ff Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 20 Aug 2024 03:51:13 +0530 Subject: [PATCH 70/91] Update deletion of Office related keys --- .../Activators/Ohook_Activation_AIO.cmd | 2 ++ .../Activators/Online_KMS_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Troubleshoot.cmd | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 2e22d3a..0d9e9fc 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1187,6 +1187,8 @@ 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% Useraccounts] diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8ec8ac0..ad683c0 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1288,6 +1288,8 @@ 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% Useraccounts] diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index a452af2..04a3273 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -665,12 +665,12 @@ del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-81 :: 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 "HKU\S-1-5-20\Software\Microsoft\OfficeSoftwareProtectionPlatform\Policies" /f -%nul% reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" /f %nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f echo: From d372b622807e45236d1ab0e71168f15e3045d399 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 20 Aug 2024 04:54:16 +0530 Subject: [PATCH 71/91] Revert "Merge pull request #542 from alouiadel/dev" This reverts commit 1dfd3f662639ad6f16865be553eed8bf55e5eb30, reversing changes made to 79bc7b024214490aca891a12202475a22b3de482. --- .../MAS_AIO-CRC32_31F7FD1E.cmd | 16 ++++++++-------- .../Activators/HWID_Activation.cmd | 2 +- .../Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Edition.cmd | 4 ++-- .../Extract_OEM_Folder.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd index ee88f49..b5b0c7a 100644 --- a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd +++ b/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd @@ -221,7 +221,7 @@ if not defined _MASunattended ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -285,7 +285,7 @@ echo: [8] Help echo: [0] Exit echo: ______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,8,0] :" +call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8,0] :" choice /C:123456780 /N set _erl=%errorlevel% @@ -326,7 +326,7 @@ echo: echo: [0] Go to Main Menu echo: ______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,0] :" +call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,0] :" choice /C:12340 /N set _erl=%errorlevel% @@ -392,7 +392,7 @@ call :_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Go Back echo: ________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard:" +call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:" choice /C:123456789R0 /N set _erl=%errorlevel% @@ -1786,7 +1786,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b @@ -3111,7 +3111,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b @@ -4047,7 +4047,7 @@ echo. echo. [0] %_exitmsg% echo. ______________________________________________________________ echo. -call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,0]" +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% @@ -8799,7 +8799,7 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" +call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" choice /C:1234560 /N set _erl=%errorlevel% diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 996f407..4731a7a 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -303,7 +303,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 0abad14..b716d16 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -306,7 +306,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -339,7 +339,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0d9e9fc..f9b4e4b 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -296,7 +296,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -332,7 +332,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,0]" choice /C:1230 /N set _el=!errorlevel! if !_el!==4 exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index ad683c0..ae3bc02 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -325,7 +325,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -385,7 +385,7 @@ echo [9] Download Office echo [0] %_exitmsg% echo ______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard [1,2,3,4,5,6,7,8,9,0]" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8,9,0]" choice /C:1234567890 /N set _el=!errorlevel! diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 4199b71..07855b1 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -261,7 +261,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -488,7 +488,7 @@ echo: echo [1] Continue echo [0] Go Back echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 goto cedmenu2 if !errorlevel!==1 rem diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index c3e4a85..d09a792 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -255,7 +255,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -349,7 +349,7 @@ call :dk_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Exit echo: ________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" choice /C:123456789R0 /N set _erl=%errorlevel% diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 04a3273..873032f 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -256,7 +256,7 @@ if not %_unattended%==1 ( echo [1] Get Latest MAS echo [0] Continue Anyway echo: -call :dk_color %_Green% "Enter a menu option on your keyboard [1,0] :" +call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) @@ -310,7 +310,7 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option on your keyboard :" +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" choice /C:1234560 /N set _erl=%errorlevel% From 19be25c02969cee1d8e896d012a42f586264f1e9 Mon Sep 17 00:00:00 2001 From: Lyssa <75037904+thecatontheceiling@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:15:06 -0500 Subject: [PATCH 72/91] Fix many grammar/spelling issues in the script (#543) * Proof-read Change Edition script * . * Proof-read OEM folder script * Update Change_Edition.cmd * Update Troubleshoot.cmd * Update Troubleshoot.cmd * Update HWID_Activation.cmd * Update HWID_Activation.cmd * Update HWID_Activation.cmd * Update KMS38_Activation.cmd * Add files via upload * Update Change_Edition.cmd * I'm tired * Update Extract_OEM_Folder.cmd * Update Troubleshoot.cmd * Update HWID_Activation.cmd * Update HWID_Activation.cmd * Update HWID_Activation.cmd * finish with hwid * Update KMS38_Activation.cmd * final kms38 update * Update Ohook_Activation_AIO.cmd * start ohook * Update Ohook_Activation_AIO.cmd * Update Online_KMS_Activation.cmd * Update HWID_Activation.cmd * Update KMS38_Activation.cmd * Update Ohook_Activation_AIO.cmd * Update Online_KMS_Activation.cmd * Update Change_Edition.cmd * Update Extract_OEM_Folder.cmd * Update Troubleshoot.cmd --------- Co-authored-by: nekoppai <109633131+nekoppai@users.noreply.github.com> Co-authored-by: WindowsAddict --- .../Activators/HWID_Activation.cmd | 89 ++++++------- .../Activators/KMS38_Activation.cmd | 101 +++++++-------- .../Activators/Ohook_Activation_AIO.cmd | 105 ++++++++-------- .../Activators/Online_KMS_Activation.cmd | 75 +++++------ MAS/Separate-Files-Version/Change_Edition.cmd | 82 ++++++------ .../Extract_OEM_Folder.cmd | 30 ++--- MAS/Separate-Files-Version/Troubleshoot.cmd | 119 +++++++++--------- 7 files changed, 303 insertions(+), 298 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 4731a7a..04d0023 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -27,7 +27,7 @@ set "_debug=0" ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -160,22 +160,22 @@ 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 HWID Activation is only supported on Windows 10/11. echo: -call :dk_color %Blue% "Use Online KMS Activation option." +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. -call :dk_color %Blue% "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 +:: Fix special character limitations in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -195,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 @@ -237,7 +237,7 @@ goto dk_done 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 ) @@ -296,14 +296,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -329,7 +329,7 @@ ClipUp.exe ) do ( if not exist %SysPath%\%%# ( %eline% -echo [%SysPath%\%%#] file is missing. Aborting... +echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -356,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 @@ -375,7 +375,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 %eline% echo [%winos% ^| %winbuild%] echo: -echo Evaluation Editions cannot be activated outside of evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -408,7 +408,7 @@ echo Checking Internet Connection [Connected%ping_f%] ) else ( set error=1 call :dk_color %Red% "Checking Internet Connection [Not Connected]" -call :dk_color %Blue% "Internet is required for HWID Activation." +call :dk_color %Blue% "Internet is required for HWID activation." ) ::======================================================================================================================================== @@ -457,13 +457,13 @@ if not defined key ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if not defined skunotfound ( -echo This product does not support HWID Activation. -echo Try KMS38 Activation option. -echo Make sure you are using updated version of the script. +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 %SysPath%\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" ) @@ -479,12 +479,12 @@ 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 defined winsub ( -call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] detected. Script will activate base edition [SKU ID-%regSKU%]." echo: ) @@ -526,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 @@ -544,7 +544,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_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...]" ) ) @@ -604,7 +604,7 @@ reg delete "%_ident%" /f %nul% reg query "%_ident%" %nul% && ( echo: set error=1 -call :dk_color %Red% "Deleting an IdentityCRL Registry [Failed] [%_ident%]" +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 @@ -639,7 +639,7 @@ if not defined resfail ( if defined resfail ( set error=1 echo: -call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]" +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" ) @@ -702,8 +702,8 @@ 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%" set fixes=%fixes% %mas%troubleshoot @@ -1072,7 +1072,7 @@ 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=[AV URLs are blocked in hosts]" +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" set wucount=0 for %%# in (wuauserv) do ( @@ -1081,7 +1081,7 @@ for %%G in (DependOnService Description DisplayName ErrorControl ImagePath Objec reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) ) ) -if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( @@ -1092,7 +1092,8 @@ if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=% 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 %results%" +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: @@ -1111,7 +1112,7 @@ call :dk_chkmal 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 %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: ) @@ -1202,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% "Restart your system to fix this error." set showfix=1 ) ) @@ -1242,7 +1243,7 @@ for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':w 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%] ) @@ -1281,7 +1282,7 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed 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%]" ) ) ) @@ -1352,7 +1353,7 @@ 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 Reg [Not Found]" +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" ) @@ -1377,7 +1378,7 @@ 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]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %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 ) @@ -1407,9 +1408,9 @@ 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%\]" +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%\]" +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" set error=1 set showfix=1 ) @@ -1527,7 +1528,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Output "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 } @@ -1538,7 +1539,7 @@ $wpaKey.GetSubKeyNames() | ForEach-Object { 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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -1546,7 +1547,7 @@ $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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -1585,13 +1586,13 @@ 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" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index b716d16..20f3766 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -30,7 +30,7 @@ set "_debug=0" ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -166,19 +166,19 @@ set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectio 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." +call :dk_color %Blue% "Use Online KMS activation option." ) else ( -call :dk_color %Blue% "Use HWID Activation option." +call :dk_color %Blue% "Use HWID 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%" @@ -198,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 @@ -240,7 +240,7 @@ goto dk_done 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 ) @@ -299,14 +299,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -339,7 +339,7 @@ echo: echo [0] %_exitmsg% 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 @@ -369,7 +369,7 @@ if not exist %SysPath%\ClipUp.exe if not defined a_cor (set _fmiss=%_fmiss%ClipU if defined _fmiss ( %eline% -echo [%_fmiss%] file is missing. Aborting... +echo [%_fmiss%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -395,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 @@ -425,7 +425,7 @@ echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( -echo Evaluation Editions cannot be activated outside of evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -441,9 +441,9 @@ goto dk_done 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 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. set fixes=%fixes% %mas%kms38 echo %mas%kms38 goto dk_done @@ -496,24 +496,24 @@ 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 to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." +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 skunotfound ( -echo This product does not support KMS38 Activation. -echo Make sure you are using updated version of the script. +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 found in %SysPath%\spp\tokens\skus\ +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" ) @@ -527,12 +527,12 @@ 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 [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +call :dk_color %Blue% "Windows Subscription edition [SKU ID-%slcSKU%] found. Script will activate the base edition [SKU ID-%regSKU%]." echo: ) @@ -629,7 +629,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 ( @@ -656,7 +656,7 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" %_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...]" ) ) @@ -732,16 +732,16 @@ 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] ) ) @@ -751,9 +751,9 @@ if defined _k38 ( %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]" ) ) @@ -763,9 +763,9 @@ 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] ) ) @@ -1215,7 +1215,7 @@ 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=[AV URLs are blocked in hosts]" +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" set wucount=0 for %%# in (wuauserv) do ( @@ -1224,7 +1224,7 @@ for %%G in (DependOnService Description DisplayName ErrorControl ImagePath Objec reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) ) ) -if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( @@ -1235,7 +1235,8 @@ if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=% 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 %results%" +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: @@ -1254,7 +1255,7 @@ call :dk_chkmal 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 %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: ) @@ -1345,7 +1346,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% "Restart your system to fix this error." set showfix=1 ) ) @@ -1385,7 +1386,7 @@ for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':w 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%] ) @@ -1424,7 +1425,7 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed 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%]" ) ) ) @@ -1495,7 +1496,7 @@ 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 Reg [Not Found]" +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" ) @@ -1520,7 +1521,7 @@ 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]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %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 ) @@ -1550,9 +1551,9 @@ 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%\]" +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%\]" +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" set error=1 set showfix=1 ) @@ -1670,7 +1671,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Output "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 } @@ -1681,7 +1682,7 @@ $wpaKey.GetSubKeyNames() | ForEach-Object { 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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -1689,7 +1690,7 @@ $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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -1728,13 +1729,13 @@ 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" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f9b4e4b..a95601d 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -27,7 +27,7 @@ set "_debug=0" ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -160,15 +160,15 @@ 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. +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." +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%" @@ -188,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 @@ -230,7 +230,7 @@ goto dk_done 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 ) @@ -289,14 +289,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -332,7 +332,7 @@ 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 @@ -360,7 +360,7 @@ call :dk_chkmal if not exist %SysPath%\sppsvc.exe ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing. Aborting... +echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -456,10 +456,10 @@ call :dk_color %Red% "Checking Installed Office [Not Found]" 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: set fixes=%fixes% %mas%genuine-installation-media call :dk_color %_Yellow% "%mas%genuine-installation-media" @@ -471,7 +471,7 @@ 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. Recommended to install one version only]" +call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" ) ::======================================================================================================================================== @@ -619,7 +619,7 @@ reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg: ) reg delete "%kmskey%" /f %nul% reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" %nul% -echo Adding a Reg To Prevent Banner [Successful] +echo Adding a Registry to Prevent Banner [Successful] ) ) @@ -667,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")) @@ -698,7 +698,7 @@ 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 from all ^& future new useraccounts +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 @@ -723,7 +723,7 @@ reg unload HKU\%%# %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 +echo Deleting - Registry keys for preventing non-genuine banner reg delete "%kmskey%" /f ) @@ -735,16 +735,16 @@ 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 :oh_checkapps if defined checknames ( call :dk_color %Blue% "Close [!checknames!] and try again." -call :dk_color %Blue% "If its still not resolved then restart system and try again." +call :dk_color %Blue% "If it is still not fixed, then restart your system and try again." ) else ( -call :dk_color %Blue% "Restart system and try again." +call :dk_color %Blue% "Restart your system and try again." ) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." @@ -919,11 +919,11 @@ 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 Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] if defined exhook ( -echo Copying Custom %_hook% To ["%_hookPath%\sppc.dll"] [Successful] +echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) else ( -echo Extracting Custom %_hook% To ["%_hookPath%\sppc.dll"] [Successful] +echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) ) else ( set error=1 @@ -932,9 +932,9 @@ echo: call :oh_checkapps if defined checknames ( call :dk_color %Blue% "Close [!checknames!] and try again." -call :dk_color %Blue% "If its still not resolved then restart system and try again." +call :dk_color %Blue% "If it is still not fixed, then restart your system and try again." ) else ( -if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart system and try again." +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system 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: @@ -982,7 +982,7 @@ 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%" ) @@ -996,7 +996,7 @@ 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]" +echo Adding SharedComputerLicensing Reg [Successful] [Needed on Server With Retail Office]" ) ) @@ -1043,13 +1043,13 @@ echo Activating Office... [MSI ^| %_version% ^| %_oArch%] if not defined _oBranding ( set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" +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 ) @@ -1190,7 +1190,7 @@ reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwarePr 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% Useraccounts] +echo Clearing Office License Blocks [Successfully cleared from all %counter% user accounts] ::========================== @@ -1208,7 +1208,7 @@ 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 Useraccounts] +echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] ) ::========================== @@ -1222,14 +1222,14 @@ reg query HKU\%%# %nul% && set failedtounload=1 if defined failedtoload ( set error=1 -call :dk_color %Red% "Loading Unloaded accounts Registry [Failed For Some Useraccounts]" -call :dk_color %Blue% "Restart the system and try again." +call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" +call :dk_color %Blue% "Restart your system and try again." ) if defined failedtounload ( set error=1 -call :dk_color %Red% "Unloading loaded accounts Registry [Failed For Some Useraccounts]" -call :dk_color %Blue% "Restart the system and try again." +call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" +call :dk_color %Blue% "Restart your system and try again." ) exit /b @@ -1524,7 +1524,7 @@ 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=[AV URLs are blocked in hosts]" +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" set wucount=0 for %%# in (wuauserv) do ( @@ -1533,7 +1533,7 @@ for %%G in (DependOnService Description DisplayName ErrorControl ImagePath Objec reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) ) ) -if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( @@ -1544,7 +1544,8 @@ if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=% 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 %results%" +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: @@ -1563,7 +1564,7 @@ call :dk_chkmal 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 %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: ) @@ -1654,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% "Restart your system to fix this error." set showfix=1 ) ) @@ -1694,7 +1695,7 @@ for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':w 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%] ) @@ -1733,7 +1734,7 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed 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%]" ) ) ) @@ -1804,7 +1805,7 @@ 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 Reg [Not Found]" +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" ) @@ -1829,7 +1830,7 @@ 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]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %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 ) @@ -1859,9 +1860,9 @@ 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%\]" +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%\]" +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" set error=1 set showfix=1 ) @@ -1979,7 +1980,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Output "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 } @@ -1990,7 +1991,7 @@ $wpaKey.GetSubKeyNames() | ForEach-Object { 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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -1998,7 +1999,7 @@ $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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -2037,13 +2038,13 @@ 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" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index ae3bc02..c906b8a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -52,7 +52,7 @@ set "_debug=0" ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -191,13 +191,13 @@ 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. +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%" @@ -217,8 +217,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 @@ -259,7 +259,7 @@ goto dk_done 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 ) @@ -318,14 +318,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -385,7 +385,7 @@ echo [9] Download Office echo [0] %_exitmsg% echo ______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8,9,0]" +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! @@ -420,7 +420,7 @@ call :dk_chkmal if not exist %SysPath%\sppsvc.exe ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing. Aborting... +echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -508,7 +508,7 @@ if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEditio if defined _eval ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( -call :dk_color %Red% "Checking Eval Edition [Evaluation Editions cannot be activated outside of evaluation period.]" +call :dk_color %Red% "Checking Evaluation Edition [Evaluation editions cannot be activated outside of evaluation period.]" if defined _evalserv ( call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." @@ -546,7 +546,7 @@ 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 to be updated to build 19044.2788 or higher for IotEnterpriseS %KS% activation." +call :dk_color %Blue% "Windows must be updated to build 19044.2788 or higher for IotEnterpriseS %KS% activation." ) ) @@ -557,11 +557,11 @@ call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Act 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. +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 ( -echo Required License files not found in %SysPath%\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" ) @@ -574,7 +574,7 @@ goto :ks_office :: Install key if defined changekey ( -call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable %KS% activation." +call :dk_color %Blue% "[%altedition%] edition product key will be used to enable %KS% activation." echo: ) @@ -1291,7 +1291,7 @@ reg delete "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwarePr 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% Useraccounts] +echo Clearing Office License Blocks [Successfully cleared from all %counter% user accounts] ::========================== @@ -1309,7 +1309,7 @@ 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 Useraccounts] +echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] ) ::========================== @@ -1323,14 +1323,14 @@ reg query HKU\%%# %nul% && set failedtounload=1 if defined failedtoload ( set error=1 -call :dk_color %Red% "Loading Unloaded accounts Registry [Failed For Some Useraccounts]" -call :dk_color %Blue% "Restart the system and try again." +call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" +call :dk_color %Blue% "Restart your system and try again." ) if defined failedtounload ( set error=1 -call :dk_color %Red% "Unloading loaded accounts Registry [Failed For Some Useraccounts]" -call :dk_color %Blue% "Restart the system and try again." +call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" +call :dk_color %Blue% "Restart your system and try again." ) exit /b @@ -2573,7 +2573,7 @@ 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=[AV URLs are blocked in hosts]" +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" set wucount=0 for %%# in (wuauserv) do ( @@ -2582,7 +2582,7 @@ for %%G in (DependOnService Description DisplayName ErrorControl ImagePath Objec reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) ) ) -if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" +if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( @@ -2593,7 +2593,8 @@ if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=% 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 %results%" +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: @@ -2612,7 +2613,7 @@ call :dk_chkmal 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 %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: ) @@ -2703,7 +2704,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% "Restart your system to fix this error." set showfix=1 ) ) @@ -2743,7 +2744,7 @@ for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':w 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%] ) @@ -2782,7 +2783,7 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed 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%]" ) ) ) @@ -2853,7 +2854,7 @@ 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 Reg [Not Found]" +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" ) @@ -2878,7 +2879,7 @@ 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]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %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 ) @@ -2908,9 +2909,9 @@ 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%\]" +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%\]" +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" set error=1 set showfix=1 ) @@ -3028,7 +3029,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { - Write-Output "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 } @@ -3039,7 +3040,7 @@ $wpaKey.GetSubKeyNames() | ForEach-Object { 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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -3047,7 +3048,7 @@ $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" + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." $wpaKey.Close() exit } @@ -3086,13 +3087,13 @@ 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" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 07855b1..3f84673 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -19,7 +19,7 @@ set _stg=0 ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -127,13 +127,13 @@ 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 equivalent. +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%" @@ -153,8 +153,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 @@ -195,7 +195,7 @@ goto dk_done 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 ) @@ -254,14 +254,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -280,7 +280,7 @@ 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... +echo Unable to detect Desktop location, aborting... goto dk_done ) @@ -302,7 +302,7 @@ dism.exe ) do ( if not exist %SysPath%\%%# ( %eline% -echo [%SysPath%\%%#] file is missing. Aborting... +echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -335,7 +335,7 @@ if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %eline% -echo Either key is not insalled or failed to get installed key activation ID. Aborting... +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" @@ -356,7 +356,7 @@ if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISE if %osedition%==0 ( %eline% -echo Failed to detect OS Edition. Aborting... +echo Failed to detect OS edition, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -376,7 +376,7 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT ::======================================================================================================================================== -:: Get Target editions list +:: Get target editions list set _target= set _dtarget= @@ -403,9 +403,9 @@ call :dk_color %Red% "==== Note ====" echo: echo [EditionID:%osedition% ^| %fullbuild%] echo: -echo Changing this edition to any other may not remove "%osedition%" specific features. +echo Changing this edition may not remove "%osedition%"-specific features. echo: -call :dk_color %_Yellow% "Press 7 key to continue..." +call :dk_color %_Yellow% "Press [7] to continue anyway..." choice /c 7 /n cls ) @@ -424,7 +424,7 @@ if not defined _ntarget ( %line% echo: if defined dismnotworking call :dk_color %Red% "DISM.exe is not working." -call :dk_color %Gray% "Target Edition not found." +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 @@ -443,7 +443,7 @@ set targetedition= %line% echo: -call :dk_color %Gray% "You can change the Edition [%osedition%] [%fullbuild%] 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 working." @@ -462,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 @@ -483,12 +483,12 @@ echo: call :dk_color %Red% "==== Note ====" echo: echo Once the edition is changed to "%targetedition%", -echo system may not be able to properly change edition to any other later. +echo the system may not be able to properly change edition later. echo: -echo [1] Continue +echo [1] Continue Anyway echo [0] Go Back 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 goto cedmenu2 if !errorlevel!==1 rem @@ -499,7 +499,7 @@ 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 "%SysPath%\spp\tokens\skus\%targetedition%\" ( echo %_wtarget% | find /i " %targetedition% " || ( @@ -521,7 +521,7 @@ 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: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -544,13 +544,13 @@ cls echo: %showeditionerror% if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not working." -echo Changing the Current Edition [%osedition%] %fullbuild% to [%targetedition%] +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% @@ -562,7 +562,7 @@ 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 %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% @@ -574,7 +574,7 @@ 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: !keyerror!]" echo: @@ -585,7 +585,7 @@ 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 Applying the DISM API method with %_chan% key %key%. Please wait... echo: call :ced_prep @@ -614,9 +614,9 @@ if defined rebootreq goto dk_done 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 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 @@ -657,7 +657,7 @@ 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: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -671,13 +671,13 @@ 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 Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]... echo: call :ced_prep if defined preperror goto dk_done -echo Applying the command with %_chan% Key +echo Applying the command with %_chan% key... echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula @@ -699,8 +699,8 @@ for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% -echo Failed to stop TrustedInstaller service. -echo Try again or Restart your system and then try again. +echo Failed to stop the TrustedInstaller service. +echo Restart your system and try again. set preperror=1 exit /b ) @@ -731,9 +731,9 @@ call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul% echo: 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 the desktop. +echo Log files are copied to the ChangeEdition_Logs folder on your desktop. echo: -call :dk_color %Blue% "In case of errors, restart system before trying again." +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" @@ -891,7 +891,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Upd if defined rebootreq ( %eline% -echo Pending Reboot flags found. +echo Pending reboot flags found. echo: echo Make sure Windows is fully updated, restart the system and try again. ) @@ -987,13 +987,13 @@ 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" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index d09a792..2fb6381 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -14,7 +14,7 @@ ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -121,13 +121,13 @@ 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. +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%" @@ -147,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 @@ -189,7 +189,7 @@ goto done2 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 ) @@ -248,14 +248,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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) @@ -277,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 ) @@ -290,7 +290,7 @@ 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 ) @@ -349,7 +349,7 @@ call :dk_color2 %_White% " [R] " %_Green% "ReadMe" echo: [0] Exit echo: ________________________________________________________ echo: -call :dk_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% @@ -681,7 +681,7 @@ cd \ :errorfound %eline% -echo $OEM$ Folder was not created successfully... +echo The script failed to create the $OEM$ folder. goto :done2 :done @@ -689,7 +689,7 @@ goto :done2 echo ______________________________________________________________ echo: call :dk_color %Blue% "%oem%" -call :dk_color %Green% "$OEM$ folder is successfully created on the Desktop." +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^), @@ -701,13 +701,13 @@ echo ______________________________________________________________ echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 873032f..2017d8c 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -14,7 +14,7 @@ ::======================================================================================================================================== -:: Set Environment variables, it helps if they are misconfigured in the system +:: Set environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion @@ -122,13 +122,13 @@ set "line=______________________________________________________________________ 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. +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%" @@ -148,8 +148,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 @@ -190,7 +190,7 @@ goto dk_done 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 ) @@ -249,14 +249,14 @@ if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6 if defined old ( echo ________________________________________________ %eline% -echo Version %masver% of MAS is outdated. +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,7 +275,7 @@ 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... +echo Unable to detect Desktop location, aborting... goto dk_done ) @@ -310,7 +310,7 @@ echo: echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: -call :dk_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% @@ -333,8 +333,8 @@ 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 ) @@ -352,14 +352,14 @@ call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not conne 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 :dk_color2 %_White% " - " %Gray% "Make sure the Internet is connected." -call :dk_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: @@ -379,7 +379,7 @@ 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 @@ -400,7 +400,7 @@ copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_t ) echo: -call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the desktop." +call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on your desktop." goto :at_back ::======================================================================================================================================== @@ -414,7 +414,8 @@ 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 @@ -435,7 +436,7 @@ copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_t del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul% echo: -echo Applying the command, +echo Applying the command... echo sfc /scannow sfc /scannow @@ -450,7 +451,7 @@ copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.lo ) echo: -call :dk_color %Gray% "CBS log is copied to the AT_Logs folder on the desktop." +call :dk_color %Gray% "The CBS log was copied to the AT_Logs folder on your Desktop." goto :at_back ::======================================================================================================================================== @@ -469,17 +470,17 @@ 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 then Windows will activate itself again. echo: -echo - Clear ClipSVC, 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 :dk_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: @@ -496,11 +497,11 @@ cls echo: echo %line% echo: -call :dk_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 :rebuildspptok ) @@ -516,7 +517,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 @@ -545,15 +546,15 @@ echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( call :dk_color %Red% "[Failed]" -echo Restart the system, that will delete this registry key automatically. +echo Restart your system, 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% && ( @@ -568,7 +569,7 @@ 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\" ( @@ -578,7 +579,7 @@ 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% @@ -590,7 +591,7 @@ echo [Successful] ) echo: -echo Restarting [wlidsvc LicenseManager] services... +echo Restarting wlidsvc ^& LicenseManager services... for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") ::======================================================================================================================================== @@ -602,7 +603,7 @@ for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } echo: echo %line% echo: -call :dk_color %Blue% "Rebuilding SPP Licensing Tokens" +call :dk_color %Blue% "Rebuilding SPP licensing tokens..." echo: call :scandat check @@ -684,7 +685,7 @@ echo: ) echo: -echo Reinstalling System Licenses... +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 ( @@ -697,7 +698,7 @@ call :scandat check echo: if not defined token ( -call :dk_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. ) @@ -713,11 +714,11 @@ sc config sppuinotify start= demand echo: echo %line% echo: -call :dk_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 ) @@ -745,7 +746,7 @@ 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 ( @@ -758,7 +759,7 @@ call :scandatospp check echo: if not defined token ( -call :dk_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. ) @@ -770,7 +771,7 @@ echo tokens.dat file was rebuilt successfully. echo: echo %line% echo: -call :dk_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 @@ -837,8 +838,8 @@ 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: ) @@ -850,9 +851,9 @@ goto :repairend echo: ) else ( echo: -call :dk_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." +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 key to continue..." +call :dk_color %_Yellow% "Press [0] to continue..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to continue..." @@ -862,8 +863,8 @@ 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 @@ -875,8 +876,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 @@ -923,7 +924,7 @@ title Fix WMI if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% -echo WMI rebuild is not recommended on Windows Server. Aborting... +echo Rebuilding WMI is not recommended on Windows Server, aborting... goto :at_back ) @@ -941,7 +942,7 @@ 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 ) @@ -956,7 +957,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 ) @@ -1078,7 +1079,7 @@ echo: echo %line% echo: if defined terminal ( -call :dk_color %_Yellow% "Press 0 key to %_exitmsg%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." @@ -1122,7 +1123,7 @@ exit /b :checkperms -:: This code checks if SPP 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. Incorrect permissions are often set by gaming spoofers. set permerror= if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" @@ -1370,13 +1371,13 @@ $key.SetAccessControl($acl) echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +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%..." +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." From 0ced0f5d8eaabacb9b4e5d48678ad67a94b6696e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 26 Aug 2024 19:46:19 +0530 Subject: [PATCH 73/91] Rename filename to Change_Windows_Edition.cmd --- .../{Change_Edition.cmd => Change_Windows_Edition.cmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MAS/Separate-Files-Version/{Change_Edition.cmd => Change_Windows_Edition.cmd} (100%) diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd similarity index 100% rename from MAS/Separate-Files-Version/Change_Edition.cmd rename to MAS/Separate-Files-Version/Change_Windows_Edition.cmd From 69e6c9bf71a01410e341221da1d699ca6a696e2a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 26 Aug 2024 19:47:33 +0530 Subject: [PATCH 74/91] Add change Office edition script --- .../Change_Office_Edition.cmd | 1291 +++++++++++++++++ 1 file changed, 1291 insertions(+) create mode 100644 MAS/Separate-Files-Version/Change_Office_Edition.cmd 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..133881b --- /dev/null +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -0,0 +1,1291 @@ +@set masver=2.6 +@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 ( +echo: +echo: +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 + +:: Thanks to May, aka Alex for suggesting this method +:: OfficeClickToRun.exe with productstoadd method is used here to add editions +:: It uses delta updates, meaning that since its 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: +call :dk_color %Gray% "Now run the Office activation option from the main menu." + +if %errorcode% NEQ 0 ( +echo: +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) + +for %%A in (%_oIds%) do ( +if !counter! LEQ 1 ( +echo: +echo Only "%%A" 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= + +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" +) + +set ltsc19= +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 + +set ltsc21= +echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 +echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 + +set ltsc24= +echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 +:: LTSC 2024 build is not fixed yet + +set ltscfound= +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 From 445a74ccea56cc76e7996b456e297d08022cce90 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 27 Aug 2024 19:00:10 +0530 Subject: [PATCH 75/91] Check unsupported language for Project/Visio --- .../Change_Office_Edition.cmd | 78 +++++++++++++++---- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 133881b..48ffc32 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -332,8 +332,7 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" % 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 ( -echo: -echo: +%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: @@ -662,9 +661,61 @@ exit /b cls if not defined terminal mode 105, 32 -:: Thanks to May, aka Alex for suggesting this method +:: 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 its using same installed build, it will consume very less Internet +:: 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" @@ -681,10 +732,9 @@ 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." - -if %errorcode% NEQ 0 ( -echo: +) else ( set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) @@ -708,14 +758,12 @@ mode 98, 35 set counter=0 for %%A in (%_oIds%) do (set /a counter+=1) -for %%A in (%_oIds%) do ( if !counter! LEQ 1 ( echo: -echo Only "%%A" product is installed. +echo Only "%_oIds%" product is installed. echo This option is available only when multiple products are installed. goto :oe_goback ) -) ::=============== @@ -812,7 +860,7 @@ set targetchannel= %line% echo: -call :dk_color %Gray% "Installed update channel: %_AudienceData% - %_version% Client: %_clversion%" +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: @@ -971,6 +1019,10 @@ 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") @@ -1005,19 +1057,15 @@ if exist "%_cfolder%\OfficeC2RClient.exe" ( set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe" ) -set ltsc19= 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 -set ltsc21= echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 -set ltsc24= echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 :: LTSC 2024 build is not fixed yet -set ltscfound= if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1 exit /b From 86c86c179a539457db04dcaedbdb86a98387a929 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 28 Aug 2024 02:15:43 +0530 Subject: [PATCH 76/91] LICENSE --- LICENSE | 1 - 1 file changed, 1 deletion(-) 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 . - From bacb32f4a127db08193714f9c11ca9bec84a45ab Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 28 Aug 2024 08:18:25 +0530 Subject: [PATCH 77/91] Update MAS AIO to 2.7 --- .../MAS_AIO-CRC32_31F7FD1E.cmd | 10644 ---------------- .../MAS_AIO-CRC32_43EF5026.cmd | 10331 +++++++++++++++ 2 files changed, 10331 insertions(+), 10644 deletions(-) delete mode 100644 MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd create mode 100644 MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd deleted file mode 100644 index b5b0c7a..0000000 --- a/MAS/All-In-One-Version/MAS_AIO-CRC32_31F7FD1E.cmd +++ /dev/null @@ -1,10644 +0,0 @@ -@set masver=2.6 -@setlocal DisableDelayedExpansion -@echo off - - - -:: For command line switches, check mass grave [.] dev/command_line_switches.html -:: If you want to better understand script, read from MAS separate files version. - - -::============================================================================ -:: -:: Homepage: mass grave [.] dev -:: Email: windowsaddict@protonmail.com -:: -::============================================================================ - - - -::======================================================================================================================================== - -:: Set Path variable, it helps if it is misconfigured in the system - -set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%" -) - -:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows -:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows - -set "_cmdf=%~f0" -for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 -if /i "%%#"=="-qedit" ( -reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f 1>nul -rem check the code below admin elevation to understand why it's here -) -) - -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( -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.html -echo: -echo: -ping 127.0.0.1 -n 10 -) -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: -ping 127.0.0.1 -n 6 >nul -popd -exit /b -) -popd - -::======================================================================================================================================== - -cls -color 07 -title Microsoft_Activation_Scripts %masver% - -set _args= -set _elev= -set _MASunattended= - -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 _args echo "%_args%" | find /i "/" >nul && set _MASunattended=1 - -::======================================================================================================================================== - -set "nul1=1>nul" -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:" - -::======================================================================================================================================== - -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 -) - -::======================================================================================================================================== - -:: 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 - -::======================================================================================================================================== - -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: -echo Extract the archive file and launch the script from the extracted folder. -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% -echo This script needs admin rights. -echo To do so, right click on this script and select 'Run as administrator'. -goto MASend -) - -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 - -if defined _MASunattended set quedit=1 -for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) - -reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit ( -reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1% -start cmd.exe /c ""!_batf!" %_args% -qedit" -rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases -exit /b -) - -::======================================================================================================================================== - -:: 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 You are running outdated version MAS %masver% -echo ________________________________________________ -echo: -if not defined _MASunattended ( -echo [1] Get Latest MAS -echo [0] Continue Anyway -echo: -call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" -choice /C:10 /N -if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) -) -) -cls - -::======================================================================================================================================== - -:: Run script with parameters in unattended mode - -set _elev= -if defined _args echo "%_args%" | find /i "/S" %nul% && (set "_silent=%nul%") || (set _silent=) -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 "/Ohook" %nul% && (setlocal & cls & (call :OhookActivation %_args% %_silent%) & endlocal) -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" - -setlocal EnableDelayedExpansion - -::======================================================================================================================================== - -:MainMenu - -cls -color 07 -title Microsoft %blank%Activation %blank%Scripts %masver% -mode 76, 30 - -echo: -echo: -echo: -echo: -echo: ______________________________________________________________ -echo: -echo: Activation Methods: -echo: -echo: [1] HWID ^| Windows ^| Permanent -echo: [2] Ohook ^| Office ^| Permanent -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: [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 -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%==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 -if %_erl%==1 setlocal & call :HWIDActivation & cls & endlocal & goto :MainMenu -goto :MainMenu - -::======================================================================================================================================== - -:Extras - -cls -title Extras -mode 76, 30 -echo: -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: -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,0] :" -choice /C:12340 /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 -goto :Extras - -::======================================================================================================================================== - -:Extract$OEM$ - -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 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 -) - -:Extract$OEM$2 - -cls -title Extract $OEM$ Folder -mode 78, 30 -echo: -echo: -echo: -echo: -echo: Extract $OEM$ folder on the desktop -echo: ________________________________________________________ -echo: -echo: [1] HWID -echo: [2] Ohook -echo: [3] KMS38 -echo: [4] Online KMS -echo: -echo: [5] HWID ^(Windows^) ^+ Ohook ^(Office^) -echo: [6] HWID ^(Windows^) ^+ Online KMS ^(Office^) -echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^) -echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) -echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^) -echo: -call :_color2 %_White% " [R] " %_Green% "ReadMe" -echo: [0] Go Back -echo: ________________________________________________________ -echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the 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%==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%==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%==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) -goto :Extract$OEM$2 - -::======================================================================================================================================== - -:Extract$OEM$3 - -cls -set "_dir=!_desktop_!\$OEM$\$$\Setup\Scripts" -md "!_dir!\" -copy /y /b "!_batf!" "!_dir!\MAS_AIO.cmd" %nul% - -( -echo @echo off -echo fltmc ^>nul ^|^| exit /b -echo call "%%~dp0MAS_AIO.cmd" %para% -echo cd \ -echo ^(goto^) 2^>nul ^& ^(if "%%~dp0"=="%%SystemRoot%%\Setup\Scripts\" rd /s /q "%%~dp0"^) -)>"!_dir!\SetupComplete.cmd" - -set _error= -if not exist "!_dir!\MAS_AIO.cmd" set _error=1 -if not exist "!_dir!\SetupComplete.cmd" set _error=1 - -if defined _error ( -%eline% -echo Failed to extract $OEM$ folder on the Desktop. -) else ( -echo: -call :_color %Blue% "%_oem%" -call :_color %Green% "$OEM$ folder is successfully created on the Desktop." -) -echo "%_oem%" | find /i "KMS38" 1>nul && ( -echo: -echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), -echo Check this page %mas%oem-folder -) -echo ___________________________________________________________________ -echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -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 - -:: 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 - -:: If value is changed in above lines or parameter is used then script will run in unattended mode - -::======================================================================================================================================== - -cls -color 07 -title HWID Activation %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"=="/HWID" set _act=1 -if /i "%%A"=="/HWID-NoEditionChange" set _NoEditionChange=1 -if /i "%%A"=="-el" set _elev=1 -) -) - -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. -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 -) - -::======================================================================================================================================== - -:: 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 -mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 -title HWID Activation %masver% - -echo: -echo Initializing... - -:: 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 dk_done -) - -::======================================================================================================================================== - -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..." -echo: -) - -::======================================================================================================================================== - -:: Check if system is permanently activated or not - -call :dk_checkperm -if defined _perm ( -cls -echo ___________________________________________________________________________________________ -echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is 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% : " -if errorlevel 2 exit /b -) -cls - -::======================================================================================================================================== - -:: Check Evaluation version - -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( -%eline% -echo [%winos% ^| %winbuild%] -echo: -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% -echo: -echo Download it from here, -echo %mas%genuine-installation-media.html -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%] - -:: 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 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 ( -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] -) - -::======================================================================================================================================== - -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" - -:: Client License Service (ClipSVC) -:: Microsoft Account Sign-in Assistant -:: Software Protection -:: 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 -if not defined key ( -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 -) - -if defined notworking call :hwidfallback -if not defined key call :hwidfallback - -if defined altkey (set key=%altkey%&set changekey=1&set notworking=) - -if defined notworking if defined notfoundaltactID ( -call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]" -) - -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. -) else ( -echo Required License files not found in %SystemRoot%\System32\spp\tokens\skus\ -) -echo Make sure you are using updated version of the script. -echo %mas% -echo: -goto dk_done -) - -if defined notworking set error=1 - -::======================================================================================================================================== - -:: Install key - -echo: -if defined changekey ( -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 -) - -::======================================================================================================================================== - -:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries - -for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b" -for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b" - -set regionchange= -if not "%name%"=="US" ( -set regionchange=1 -%psc% "Set-WinHomeLocation -GeoId 244" %nul% -if !errorlevel! EQU 0 ( -echo Changing Windows Region To USA [Successful] -) else ( -call :dk_color %Red% "Changing Windows Region To USA [Failed]" -) -) - -::========================================================================================================================================== - -:: Generate GenuineTicket.xml and apply -:: 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% - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% - -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]" -echo [%encoded%] -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -goto :dl_final -) else ( -echo Generating GenuineTicket.xml [Successful] -) - -set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" - -%_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% -%_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...]" -) -) - -copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% -clipup -v -o - -set rebuildinfo= - -if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" -) - -%_xmlexist% ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" -) - -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking Ticket Migration [Failed]" -) - -if defined applist if not defined showfix if defined rebuildinfo ( -set showfix=1 -call :dk_color %Blue% "%_fixmsg%" -) - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% - -::========================================================================================================================================== - -call :dk_product - -echo: -echo Activating... - -call :dk_act -call :dk_checkperm -if defined _perm ( -echo: -call :dk_color %Green% "%winos% is permanently activated with a digital license." -goto :dl_final -) - -::========================================================================================================================================== - -:: Extended licensing servers tests incase error not found and activation failed - -set resfail= -if not defined error ( - -ipconfig /flushdns %nul% -set "tls=$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072); [System.Net.ServicePointManager]::SecurityProtocol = $Tls12;" - -for %%# in ( -login.live.com/ppsecure/deviceaddcredential.srf -purchase.mp.microsoft.com/v7.0/users/me/orders -) do if not defined resfail ( -set "d1=Add-Type -AssemblyName System.Net.Http;" -set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" -set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" -set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" -%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 -) - -if not defined resfail ( -%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 -) - -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" -) -) - -::========================================================================================================================================== - -:: Clear store ID related registry to fix activation incase error not found - -if not defined error ( -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!] -) - -REM Refresh some services and license status - -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% Restart-Service %%# %nul%) -call :dk_refresh -call :dk_act -call :dk_checkperm -) - -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: -call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%licensing-servers-issue" -) -) - -::========================================================================================================================================== - -echo: -if defined _perm ( -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." -) else ( -if not defined error call :dk_color %Blue% "%_fixmsg%" -call :dk_color2 %Blue% "Check this page for help" %_Yellow% " %mas%troubleshoot" -) -) - -::======================================================================================================================================== - -:dl_final - -echo: - -if defined regionchange ( -%psc% "Set-WinHomeLocation -GeoId %nation%" %nul% -if !errorlevel! EQU 0 ( -echo Restoring Windows Region [Successful] -) else ( -call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - %nation%]" -) -) - -if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." - -goto :dk_done - -::======================================================================================================================================== - -:: Check SKU value - -:dk_checksku - -set osSKU= -set slcSKU= -set wmiSKU= -set regSKU= - -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= - -for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn %nul6%') do set "regSKU=%%a" -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" -if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" - -set osSKU=%slcSKU% -if not defined osSKU set osSKU=%wmiSKU% -if not defined osSKU set osSKU=%regSKU% -exit /b - -:: 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= -exit /b - -:: Refresh license status - -:dk_refresh - -if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call RefreshLicenseStatus %nul% -if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul% -exit /b - -:: Activation command - -: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% -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 - -: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 - -:: Get Activation IDs from licensing files if not found through WMI - -:getactivationid: -$folderPath = "$env:windir\System32\spp\tokens\skus" -$files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms" -$guids = @() -foreach ($file in $files) { - $content = Get-Content -Path $file.FullName -Raw - $matches = [regex]::Matches($content, 'name="productSkuId">\{([0-9a-fA-F\-]+)\}') - foreach ($match in $matches) { - $guids += $match.Groups[1].Value - } -} -$guids = $guids | Select-Object -Unique -$guidsString = $guids -join " " -$guidsString -:getactivationid: - -:: 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 -) -exit /b - -:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) - -:dk_product - -call :dk_reflection - -set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') - -set winos= -for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) -echo "%winos%" | find /i "Windows" %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! -) -) -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_errorcheck - -set showfix= - -:: Check corrupt services - -set serv_cor= -for %%# in (%_serv%) do ( -set _corrupt= -sc start %%# %nul% -if !errorlevel! EQU 1060 set _corrupt=1 -sc query %%# %nul% || set _corrupt=1 -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1 -if /i %%#==TrustedInstaller if /i %%G==DependOnService set _corrupt= -) - -if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) -) - -if defined serv_cor ( -set error=1 -call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" -) - -::======================================================================================================================================== - -:: Check disabled services - -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=%%#")) -) - -:: 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 /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 ( -if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") -) -) -) - -if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" - -if defined serv_cste ( -set error=1 -call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" -) - -::======================================================================================================================================== - -:: 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 - -set serv_e= -for %%# in (%_serv%) do ( -set errorcode= -set checkerror= - -sc query %%# | find /i "RUNNING" %nul% || ( -%psc% Start-Service %%# %nul% -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 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." -set showfix=1 -) -) - -::======================================================================================================================================== - -:: 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.]" -) - - -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." -) -) - - -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.]" -) - - -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 Error [%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" ( -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 osedition= -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" - -:: Workaround for 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 - -if not defined officeact ( -if not defined osedition ( -call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" -) else ( - -if not exist "%SystemRoot%\System32\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" ( -set error=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%]" -) -) -) - - -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% -set error_code=%errorlevel% -cmd /c exit /b %error_code% -if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" -if %error_code% NEQ 0 ( -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]" -) - - -set wmifailed= -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% - -if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants -if defined wmifailed ( -set error=1 -call :dk_color %Red% "Checking WMI [Not Responding]" -call :dk_color %Blue% "In MAS, Goto Troubleshoot and run Fix WMI option." -set showfix=1 -) - - -%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" -set /a "sum/=3" -if not defined officeact if not "%sum%"=="%slcSKU%" ( -call :dk_color %Red% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" -) - - -reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( -set error=1 -set showfix=1 -call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]" -) - - -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( -set error=1 -set showfix=1 -call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]" -) - - -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %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% -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 error=1 -set showfix=1 -) - - -set tokenstore= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" -if not exist "%tokenstore%\" ( -set error=1 -REM This code creates token folder only if it's missing and sets default permission for it -mkdir "%tokenstore%" %nul% -set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" -set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;" -set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);" -set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;" -%psc% "!d!" %nul% -call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Creating Now] [%tokenstore%\]" -) - - -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 ( -set error=1 -call :dk_color %Red% "Checking Activation IDs [Not Found]" -) -) - - -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( -set error=1 -call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" -) - - -if not exist %SystemRoot%\system32\sppsvc.exe ( -set error=1 -set showfix=1 -call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" -) - - -:: This code checks if NT SERVICE\sppsvc 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 - -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 -) -if defined permerror ( -set error=1 -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 not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 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 -call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." -) - -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 - -$osVersion = [System.Environment]::OSVersion.Version -$minBuildNumber = 14393 - -if ($osVersion.Build -ge $minBuildNumber) { - $subkeyHashTable = @{} - foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - $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" - $wpaKey.Close() - 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 - } -} -$count -$wpaKey.Close() -:wpatest: - -::======================================================================================================================================== - -: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 -call :dk_color %_Yellow% "Press any key to %_exitmsg%..." -pause %nul1% -exit /b - -::======================================================================================================================================== - -:: 1st column = Activation ID -:: 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) -:: 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) -:: 9th column = Version name incase same Edition ID is used in different OS versions with different key -:: Separator = _ - - -:hwiddata - -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 -) 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% && ( -if %%F==1 set notworking=1 -set key=%%B -) -) - -REM Generate ticket - -if %1==ticket if "%key%"=="%%B" ( -set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;PKeyIID=465145217131314304264339481117862266242033457260311819664735280;$([char]0)" -for /f "tokens=* delims=" %%i in ('%psc% [conv%f%ert]::ToBas%f%e64String([Text.En%f%coding]::Uni%f%code.GetBytes("""!string!"""^)^)') do set "encoded=%%i" -echo "!encoded!" | find "AAAA" %nul1% || exit /b - -1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z%%E=" >"%tdir%\GenuineTicket" -) - -) -) -exit /b - -::======================================================================================================================================== - -:: Below code is used to get alternate edition name and key if current edition doesn't support HWID activation - -:: 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 HWID Key -:: 6th column = Alternate Edition Name -:: Separator = _ - - -:hwidfallback - -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 -) 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% && ( -set altkey=%%E -set altedition=%%F -) || ( -set altedition=%%F -set notfoundaltactID=1 -) -) -) -) -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 - -:: To remove Ohook activation, run the script with /Ohook-Uninstall parameter or change 0 to 1 in below line -set _rem=0 - -:: If value is changed in above lines or parameter is used then script will run in unattended mode - -::======================================================================================================================================== - -cls -color 07 -title Ohook Activation %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"=="/Ohook" set _act=1 -if /i "%%A"=="/Ohook-Uninstall" set _rem=1 -if /i "%%A"=="-el" set _elev=1 -) -) - -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." -) - -::======================================================================================================================================== - -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 - -:oh_menu - -if %_unattended%==0 ( -cls -mode 76, 25 -title Ohook Activation %masver% - -echo: -echo: -echo: -echo: -echo ____________________________________________________________ -echo: -echo [1] Install Ohook Office Activation -echo: -echo [2] Uninstall Ohook -echo ____________________________________________ -echo: -echo [3] Download Office -echo: -echo [0] %_exitmsg% -echo ____________________________________________________________ -echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the 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!==2 goto :oh_uninstall -if !_el!==1 goto :oh_menu2 -goto :oh_menu -) - -::======================================================================================================================================== - -:oh_menu2 - -cls -mode 130, 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... - -:: 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 dk_done -) - -::======================================================================================================================================== - -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..." -echo: -) - -::======================================================================================================================================== - -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] -) - -::======================================================================================================================================== - -echo Initiating Diagnostic Tests... - -set "_serv=sppsvc Winmgmt" -set officeact=1 -call :dk_errorcheck - -:: Check unsupported office versions - -set o14msi= -set o14c2r= -set o16uwp= - -set _68=HKLM\SOFTWARE\Microsoft\Office -set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -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=Office 2010 MSI ) -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=Office 2010 MSI ) -%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 - -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP - -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( -echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" -) - -::======================================================================================================================================== - -:: Check supported office versions - -call :oh_getpath - -sc query ClickToRunSvc %nul% -set error1=%errorlevel% - -if defined o16c2r if %error1% EQU 1060 ( -call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" -set o16c2r= -set error=1 -) - -sc query OfficeSvc %nul% -set error2=%errorlevel% - -if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( -call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" -set o15c2r= -set error=1 -) - -if "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( -set error=1 -echo: -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( -call :dk_color %Red% "Checking Supported Office Install [Not Found]" -) else ( -call :dk_color %Red% "Checking Installed Office [Not Found]" -) - -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( -echo: -echo You have only Office dashboard app installed, you need to install full Office version. -) -echo: -call :dk_color %Blue% "Download and install Office from below URL and try again." -echo: -echo %mas%genuine-installation-media.html -goto dk_done -) - -set multioffice= -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]" -) - -::======================================================================================================================================== - -:: Process Office 15.0 C2R - -if not defined o15c2r goto :starto16c2r - -call :oh_reset -call :oh_actids - -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") - -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 "_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" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) - -echo: -echo Activating Office 15.0 %_oArch% C2R... - -if not defined _oIds ( -call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" -set error=1 -goto :starto16c2r -) - -call :oh_process -call :oh_hookinstall - -::======================================================================================================================================== - -:starto16c2r - -:: Process Office 16.0 C2R - -if not defined o16c2r goto :startmsi - -call :oh_reset -call :oh_actids - -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") - -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 "_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" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) - -echo: -echo Activating Office 16.0 %_oArch% C2R... - -if not defined _oIds ( -call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" -set error=1 -goto :startmsi -) - -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 - -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% -) -) -echo Adding Reg Keys To Skip License Check [Successful] -) - -::======================================================================================================================================== - -:: mass grave[.]dev/office-license-is-not-genuine.html -:: 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 - -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% -) -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] -) -) - -::======================================================================================================================================== - -:startmsi - -if defined o15msi call :oh_processmsi 15 %o15msi_reg% -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% -) - -::======================================================================================================================================== - -echo: -if not defined error ( -call :dk_color %Green% "Office is permanently activated." -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" -) - -goto :dk_done - -::======================================================================================================================================== - -:oh_uninstall - -cls -mode 99, 28 -title Uninstall Ohook Activation %masver% - -set _present= -set _unerror= -call :oh_reset -call :oh_getpath - -echo: -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")) -if defined o15c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_15CHook=%%b\root\vfs")) -if defined o16msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_16MHook=%%b")) -if defined o15msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_15MHook=%%b")) - -if defined _16CHook (if exist "%_16CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\System\sppc*dll" & if exist "%_16CHook%\System\sppc*dll" set _unerror=1)) -if defined _16CHook (if exist "%_16CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\SystemX86\sppc*dll" & if exist "%_16CHook%\SystemX86\sppc*dll" set _unerror=1)) -if defined _15CHook (if exist "%_15CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\System\sppc*dll" & if exist "%_15CHook%\System\sppc*dll" set _unerror=1)) -if defined _15CHook (if exist "%_15CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\SystemX86\sppc*dll" & if exist "%_15CHook%\SystemX86\sppc*dll" set _unerror=1)) -if defined _16MHook (if exist "%_16MHook%sppc*dll" (set _present=1& del /s /f /q "%_16MHook%sppc*dll" & if exist "%_16MHook%sppc*dll" set _unerror=1)) -if defined _15MHook (if exist "%_15MHook%sppc*dll" (set _present=1& del /s /f /q "%_15MHook%sppc*dll" & if exist "%_15MHook%sppc*dll" set _unerror=1)) - -for %%# in (15 16) do ( -for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( -if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" (set _present=1& del /s /f /q "%%~A\Microsoft Office\Office%%#\sppc*dll" & if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set _unerror=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 _present=1& del /s /f /q "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" & if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set _unerror=1) -) -) -) - -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 - -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 "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" %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 -) - -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 -) - -echo __________________________________________________________________________________________ -echo: - -if not defined _present ( -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." -) else ( -call :dk_color %Green% "Successfully uninstalled Ohook activation." -) -) -echo __________________________________________________________________________________________ - -goto :dk_done - -::======================================================================================================================================== - -:oh_reset - -set _oRoot= -set _oArch= -set _oIds= -set _oLPath= -set _hookPath= -set _hook= -set _sppcPath= -set _key= -set _actid= -set _prod= -set _lic= -set _License= -exit /b - -::======================================================================================================================================== - -:oh_getpath - -set o16c2r= -set o15c2r= -set o16msi= -set o15msi= - -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) - -exit /b - -::======================================================================================================================================== - -:oh_installkey - -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%] [%_prod%] [%_lic%] [Successful] -) 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 -) -set error=1 -) - -exit /b - -::======================================================================================================================================== - -:oh_installlic - -if not defined _oLPath exit /b - -if %oVer%==16 ( -"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%_key% %nul% -) else ( -"!_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 -) - -:: Fallback to /ilc method to install licenses incase integrator.exe is not working - -set _License=%_License:XVolume=XC2RVL_% - -set _License=%_License:O365EduCloudRetail=O365EduCloudEDUR_% - -set _License=%_License:ProjectProRetail=ProjectProO365R_% -set _License=%_License:ProjectStdRetail=ProjectStdO365R_% -set _License=%_License:VisioProRetail=VisioProO365R_% -set _License=%_License:VisioStdRetail=VisioStdO365R_% - -if defined _preview set _License=%_License:Volume=PreviewVL_% - -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% -) -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% -) - -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]" -) || ( -set error=1 -call :dk_color %Red% "Installing Missing License Files [Office %oVer%.0 %_prod%] [Failed]" -) - -exit /b - -::======================================================================================================================================== - -:oh_hookinstall - -set ierror= -set hasherror= - -if %_hook%==sppc32.dll set offset=2564 -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 - -mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 set ierror=1 - -if not exist "%_hookPath%\sppc.dll" call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" -if not exist "%_hookPath%\sppc.dll" set ierror=1 - -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] -) 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"] -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 defined hasherror ( -set error=1 -set ierror=1 -call :dk_color %Red% "Modifying Hash of Custom %_hook% [Failed]" -) else ( -echo Modifying Hash of Custom %_hook% [Successful] -) -) - -exit /b - -::======================================================================================================================================== - -:oh_process - -for %%# in (%_oIds%) do ( -set _key= -set _actid= -set _lic= -set _preview= -set _License=%%# - -echo %%# | find /i "2024" %nul% && ( -if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview -) -set _prod=%%#!_preview! - -call :ohookdata getinfo !_prod! - -if not [!_key!]==[] ( -echo "!oapplist!" | find /i "!_actid!" %nul1% || call :oh_installlic -call :oh_installkey -) 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." -) -) - -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% - -if exist %msitemp% call :ohookdata getmsiprod -if exist %msitemp% del /f /q %msitemp% - -exit /b - -::======================================================================================================================================== - -:oh_processmsi - -:: Process Office MSI Version - -call :oh_reset -call :oh_actids - -set oVer=%1 -for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%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" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) - -call :oh_msiproducts - -echo: -echo Activating Office %1.0 %_oArch% MSI... - -if not defined _oIds ( -set error=1 -call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" -exit /b -) - -call :oh_process -call :oh_hookinstall - -exit /b - -::======================================================================================================================================== - -:: Get Office Activation IDs - -:oh_actids - -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")) -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 ( -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 ( - -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 ( -find /i "%%E" %msitemp% %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%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 -[void]$TypeBuilder.DefinePInvokeMethod('MapFileAndCheckSum', 'imagehlp.dll', 'Public, Static', [Reflection.CallingConventions]::Standard, [int], @([string], [int].MakeByRefType(), [int].MakeByRefType()), [Runtime.InteropServices.CallingConvention]::Winapi, [Runtime.InteropServices.CharSet]::Auto) - -# Create the type -$Imagehlp = $TypeBuilder.CreateType() - -# Offset information -$timestampOffset = 136 -$exportTimestampOffset = $offset -$checkSumOffset = 216 - -# Calculate timestamp -$currentTimestamp = [DateTime]::UtcNow -$unixTimestamp = [int]($currentTimestamp - (Get-Date -Year 1970 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0)).TotalSeconds - -# Change timestamps -$Writer.BaseStream.Position = $timestampOffset -$Writer.Write($unixTimestamp) - -$Writer.BaseStream.Position = $exportTimestampOffset -$Writer.Write($unixTimestamp) - -$Writer.Flush() - -# Write the current state of the MemoryStream to a temporary file -$tempFilePath = [System.IO.Path]::Combine($env:windir, "Temp", [System.IO.Path]::GetRandomFileName()) -[System.IO.File]::WriteAllBytes($tempFilePath, $MemoryStream.ToArray()) - -# Update hash using the temporary file -[int]$HeaderSum = 0 -[int]$CheckSum = 0 -[void]$Imagehlp::MapFileAndCheckSum($tempFilePath, [ref]$HeaderSum, [ref]$CheckSum) - -# If the checksums don't match, update the checksum in the MemoryStream -if ($HeaderSum -ne $CheckSum) { - $Writer.BaseStream.Position = $checkSumOffset - $Writer.Write($CheckSum) - $Writer.Flush() -} else { - Write-host Error found -} - -# Delete the temporary file -Remove-Item -Path $tempFilePath -Force - -# Get the modified bytes -$modifiedBytes = $MemoryStream.ToArray() - -# Write the modified bytes to the final file -[System.IO.File]::WriteAllBytes($PePath, $modifiedBytes) - -[void]$Imagehlp::MapFileAndCheckSum($PePath, [ref]$HeaderSum, [ref]$CheckSum) -if ($HeaderSum -ne $CheckSum) { - Write-host Error found -} - -$MemoryStream.Close() -:hexedit: - -::======================================================================================================================================== -:: -:: This below blocks of text is encoded in base64 format -:: The blocks in labels "sppc64.dll" and "sppc32.dll" contains below files -:: -:: e6ac83560c19ec7eb868c50ea97ea0ed5632a397a9f43c17e24e6de4a694d118 *sppc32.dll -:: c6df24deef2e83813dee9c81ddd9793a3d60c117a4e8e231b82e32b3192927e7 *sppc64.dll -:: -:: The files are encoded in base64 to make MAS 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 -:: -:: stackoverflow.com/a/35335273 -:: Here you can check how to extract sppc.dll files from base64 -:: -:: For any further question, feel free to contact us on mass grave[.]dev/contactus -:: -::======================================================================================================================================== - -:: Replace - with A and _ with a before base64 conversion - -: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--------- -----------------------------------------------------------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----------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------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--------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------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-- -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- -Bw-I--k-Cg-L--w-DQ-O--8-E--R-BI-Ew-U-BU-Fg-X-Bg-GQ-_-Bs-H--d-B4-Hw-g-CE-Ig-j-CQ-JQ-m-Cc-K--p-Co-Kw-s-C0-Lg-v-D--MQ-y-DM-N--1-DY-Nw-4-Dk-Og-7-Dw-PQ-+-D8-Q-BB-EI-c3BwYy5kbGw-U1BQQ1MuU0xDYWxsU2VydmVy-FNM -Q2FsbFNlcnZlcgBTUFBDUy5TTENsb3Nl-FNMQ2xvc2U-U1BQQ1MuU0xDb25zdW1lUmln_HQ-U0xDb25zdW1lUmln_HQ-U1BQQ1MuU0xEZXBvc2l0TWlncmF0_W9uQmxvYgBTTERlcG9z_XRN_WdyYXRpb25CbG9i-FNQUENTLlNMRGVwb3NpdE9mZmxpbmVDb25m_XJt -YXRpb25JZ-BTTERlcG9z_XRPZmZs_W5lQ29uZmlybWF0_W9uSWQ-U1BQQ1MuU0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklkRXg-U0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklkRXg-U1BQQ1MuU0xEZXBvc2l0U3RvcmVUb2tlbgBTTERlcG9z_XRTdG9y -ZVRv_2Vu-FNQUENTLlNMRmlyZUV2ZW50-FNMRmlyZUV2ZW50-FNQUENTLlNMR2F0_GVyTWlncmF0_W9uQmxvYgBTTEdhdGhlck1pZ3JhdGlvbkJsb2I-U1BQQ1MuU0xHYXRoZXJN_WdyYXRpb25CbG9iRXg-U0xHYXRoZXJN_WdyYXRpb25CbG9iRXg-U1BQQ1MuU0xH -ZW5lcmF0ZU9mZmxpbmVJbnN0YWxsYXRpb25JZ-BTTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklk-FNQUENTLlNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWRFe-BTTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklkRXg-U1BQQ1MuU0xHZXRBY3Rp -dmVM_WNlbnNlSW5mbwBTTEdldEFjdGl2ZUxpY2Vuc2VJbmZv-FNQUENTLlNMR2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbgBTTEdldEFwcGxpY2F0_W9uSW5mb3JtYXRpb24-U1BQQ1MuU0xHZXRBcHBs_WNhdGlvblBvbGljeQBTTEdldEFwcGxpY2F0_W9uUG9s_WN5 --FNQUENTLlNMR2V0QXV0_GVudGljYXRpb25SZXN1bHQ-U0xHZXRBdXRoZW50_WNhdGlvblJlc3Vsd-BTUFBDUy5TTEdldEVuY3J5cHRlZFBJREV4-FNMR2V0RW5jcnlwdGVkUElERXg-U1BQQ1MuU0xHZXRHZW51_W5lSW5mb3JtYXRpb24-U0xHZXRHZW51_W5lSW5m -b3JtYXRpb24-U1BQQ1MuU0xHZXRJbnN0YWxsZWRQcm9kdWN0S2V5SWRz-FNMR2V0SW5zdGFsbGVkUHJvZHVjdEtleUlkcwBTUFBDUy5TTEdldExpY2Vuc2U-U0xHZXRM_WNlbnNl-FNQUENTLlNMR2V0TGljZW5zZUZpbGVJZ-BTTEdldExpY2Vuc2VG_WxlSWQ-U1BQ -Q1MuU0xHZXRM_WNlbnNlSW5mb3JtYXRpb24-U0xHZXRM_WNlbnNlSW5mb3JtYXRpb24-U0xHZXRM_WNlbnNpbmdTdGF0dXNJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFBLZXlJZ-BTTEdldFBLZXlJZ-BTUFBDUy5TTEdldFBLZXlJbmZvcm1hdGlvbgBTTEdldFBLZXlJ -bmZvcm1hdGlvbgBTUFBDUy5TTEdldFBvbGljeUluZm9ybWF0_W9u-FNMR2V0UG9s_WN5SW5mb3JtYXRpb24-U1BQQ1MuU0xHZXRQb2xpY3lJbmZvcm1hdGlvbkRXT1JE-FNMR2V0UG9s_WN5SW5mb3JtYXRpb25EV09SR-BTUFBDUy5TTEdldFByb2R1Y3RT_3VJbmZv -cm1hdGlvbgBTTEdldFByb2R1Y3RT_3VJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFNMSURM_XN0-FNMR2V0U0xJRExpc3Q-U1BQQ1MuU0xHZXRTZXJ2_WNlSW5mb3JtYXRpb24-U0xHZXRTZXJ2_WNlSW5mb3JtYXRpb24-U1BQQ1MuU0xJbnN0YWxsTGljZW5zZQBTTElu -c3RhbGxM_WNlbnNl-FNQUENTLlNMSW5zdGFsbFByb29mT2ZQdXJj_GFzZQBTTEluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U1BQQ1MuU0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNlRXg-U0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNlRXg-U1BQQ1MuU0xJc0dlbnVpbmVMb2Nh -bEV4-FNMSXNHZW51_W5lTG9jYWxFe-BTUFBDUy5TTExvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNMTG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U1BQQ1MuU0xPcGVu-FNMT3BlbgBTUFBDUy5TTFBlcnNpc3RBcHBs_WNhdGlvblBvbGlj_WVz-FNMUGVyc2lzdEFwcGxp -Y2F0_W9uUG9s_WNpZXM-U1BQQ1MuU0xQZXJz_XN0UlRTUGF5bG9hZE92ZXJy_WRl-FNMUGVyc2lzdFJUU1BheWxvYWRPdmVycmlkZQBTUFBDUy5TTFJlQXJt-FNMUmVBcm0-U1BQQ1MuU0xSZWdpc3RlckV2ZW50-FNMUmVn_XN0ZXJFdmVud-BTUFBDUy5TTFJlZ2lz -dGVyUGx1Z2lu-FNMUmVn_XN0ZXJQbHVn_W4-U1BQQ1MuU0xTZXRBdXRoZW50_WNhdGlvbkRhdGE-U0xTZXRBdXRoZW50_WNhdGlvbkRhdGE-U1BQQ1MuU0xTZXRDdXJyZW50UHJvZHVjdEtleQBTTFNldEN1cnJlbnRQcm9kdWN0S2V5-FNQUENTLlNMU2V0R2VudWlu -ZUluZm9ybWF0_W9u-FNMU2V0R2VudWluZUluZm9ybWF0_W9u-FNQUENTLlNMVW5pbnN0YWxsTGljZW5zZQBTTFVu_W5zdGFsbExpY2Vuc2U-U1BQQ1MuU0xVbmluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U0xVbmluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U1BQQ1MuU0xV -bmxvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNMVW5sb2FkQXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5TTFVucmVn_XN0ZXJFdmVud-BTTFVucmVn_XN0ZXJFdmVud-BTUFBDUy5TTFVucmVn_XN0ZXJQbHVn_W4-U0xVbnJlZ2lzdGVyUGx1Z2lu-FNQUENTLlNMcEF1 -dGhlbnRpY2F0ZUdlbnVpbmVU_WNrZXRSZXNwb25zZQBTTHBBdXRoZW50_WNhdGVHZW51_W5lVGlj_2V0UmVzcG9uc2U-U1BQQ1MuU0xwQmVn_W5HZW51_W5lVGlj_2V0VHJhbnNhY3Rpb24-U0xwQmVn_W5HZW51_W5lVGlj_2V0VHJhbnNhY3Rpb24-U1BQQ1MuU0xw -Q2xlYXJBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTTHBDbGVhckFjdGl2YXRpb25JblByb2dyZXNz-FNQUENTLlNMcERlcG9z_XREb3dubGV2ZWxHZW51_W5lVGlj_2V0-FNMcERlcG9z_XREb3dubGV2ZWxHZW51_W5lVGlj_2V0-FNQUENTLlNMcERlcG9z_XRUb2tlbkFj -dGl2YXRpb25SZXNwb25zZQBTTHBEZXBvc2l0VG9rZW5BY3RpdmF0_W9uUmVzcG9uc2U-U1BQQ1MuU0xwR2VuZXJhdGVUb2tlbkFjdGl2YXRpb25D_GFsbGVuZ2U-U0xwR2VuZXJhdGVUb2tlbkFjdGl2YXRpb25D_GFsbGVuZ2U-U1BQQ1MuU0xwR2V0R2VudWluZUJs -b2I-U0xwR2V0R2VudWluZUJsb2I-U1BQQ1MuU0xwR2V0R2VudWluZUxvY2Fs-FNMcEdldEdlbnVpbmVMb2Nhb-BTUFBDUy5TTHBHZXRM_WNlbnNlQWNxdWlz_XRpb25JbmZv-FNMcEdldExpY2Vuc2VBY3F1_XNpdGlvbkluZm8-U1BQQ1MuU0xwR2V0TVNQ_WRJbmZv -cm1hdGlvbgBTTHBHZXRNU1BpZEluZm9ybWF0_W9u-FNQUENTLlNMcEdldE1hY2hpbmVVR1VJR-BTTHBHZXRNYWNo_W5lVUdVSUQ-U1BQQ1MuU0xwR2V0VG9rZW5BY3RpdmF0_W9uR3JhbnRJbmZv-FNMcEdldFRv_2VuQWN0_XZhdGlvbkdyYW50SW5mbwBTUFBDUy5T -THBJQUFjdGl2YXRlUHJvZHVjd-BTTHBJQUFjdGl2YXRlUHJvZHVjd-BTUFBDUy5TTHBJc0N1cnJlbnRJbnN0YWxsZWRQcm9kdWN0S2V5RGVmYXVsdEtleQBTTHBJc0N1cnJlbnRJbnN0YWxsZWRQcm9kdWN0S2V5RGVmYXVsdEtleQBTUFBDUy5TTHBQcm9jZXNzVk1Q -_XBlTWVzc2FnZQBTTHBQcm9jZXNzVk1Q_XBlTWVzc2FnZQBTUFBDUy5TTHBTZXRBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTTHBTZXRBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTUFBDUy5TTHBUcmlnZ2VyU2VydmljZVdvcmtlcgBTTHBUcmlnZ2VyU2VydmljZVdvcmtlcgBT -UFBDUy5TTHBWTEFjdGl2YXRlUHJvZHVjd-BTTHBWTEFjdGl2YXRlUHJvZHVjd------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------FBg-------------Ohg--BsY---XG-------------- -+G---Hhg--BkY--------------MYQ--gG------------------------------iG---Kpg--------yG--------DUY--------Ihg--CqY--------Mhg--------1G---------C-FNMR2V0TGljZW5z_W5nU3RhdHVzSW5mb3JtYXRpb24--QBTTEdldFByb2R1 -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---- ---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-- -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- -_QBv-G4-------kE5-Q------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------Q---U----OzBQMHEwfjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- -:sppc32.dll: - -:======================================================================================================================================== - -:: Replace - with A and _ with a before base64 conversion - -: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--------- ---------------------------------------------------------------------------------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-- -kJD/JTpf--CQkP//////////----------D//////////w---------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------TgBh-G0-ZQ---Ec-cgBh-GM-ZQ------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------E---Bh----B----GE---jh----R---COE---GRE--BB------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------E----BBwM-B4IDM-L----BD-c-DGIIM-dgBn-FU-T--t---------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------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-- -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- -Mw-0-DU-Ng-3-Dg-OQ-6-Ds-P--9-D4-PwB--EE-QgBzcHBjLmRsb-BTUFBDUy5TTENhbGxTZXJ2ZXI-U0xDYWxsU2VydmVy-FNQUENTLlNMQ2xvc2U-U0xDbG9zZQBTUFBDUy5TTENvbnN1bWVS_Wdod-BTTENvbnN1bWVS_Wdod-BTUFBDUy5TTERlcG9z_XRN_Wdy -YXRpb25CbG9i-FNMRGVwb3NpdE1pZ3JhdGlvbkJsb2I-U1BQQ1MuU0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklk-FNMRGVwb3NpdE9mZmxpbmVDb25m_XJtYXRpb25JZ-BTUFBDUy5TTERlcG9z_XRPZmZs_W5lQ29uZmlybWF0_W9uSWRFe-BTTERlcG9z_XRP -ZmZs_W5lQ29uZmlybWF0_W9uSWRFe-BTUFBDUy5TTERlcG9z_XRTdG9yZVRv_2Vu-FNMRGVwb3NpdFN0b3JlVG9rZW4-U1BQQ1MuU0xG_XJlRXZlbnQ-U0xG_XJlRXZlbnQ-U1BQQ1MuU0xHYXRoZXJN_WdyYXRpb25CbG9i-FNMR2F0_GVyTWlncmF0_W9uQmxvYgBT -UFBDUy5TTEdhdGhlck1pZ3JhdGlvbkJsb2JFe-BTTEdhdGhlck1pZ3JhdGlvbkJsb2JFe-BTUFBDUy5TTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklk-FNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWQ-U1BQQ1MuU0xHZW5lcmF0ZU9mZmxpbmVJbnN0 -YWxsYXRpb25JZEV4-FNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWRFe-BTUFBDUy5TTEdldEFjdGl2ZUxpY2Vuc2VJbmZv-FNMR2V0QWN0_XZlTGljZW5zZUluZm8-U1BQQ1MuU0xHZXRBcHBs_WNhdGlvbkluZm9ybWF0_W9u-FNMR2V0QXBwbGljYXRpb25J -bmZvcm1hdGlvbgBTUFBDUy5TTEdldEFwcGxpY2F0_W9uUG9s_WN5-FNMR2V0QXBwbGljYXRpb25Qb2xpY3k-U1BQQ1MuU0xHZXRBdXRoZW50_WNhdGlvblJlc3Vsd-BTTEdldEF1dGhlbnRpY2F0_W9uUmVzdWx0-FNQUENTLlNMR2V0RW5jcnlwdGVkUElERXg-U0xH -ZXRFbmNyeXB0ZWRQSURFe-BTUFBDUy5TTEdldEdlbnVpbmVJbmZvcm1hdGlvbgBTTEdldEdlbnVpbmVJbmZvcm1hdGlvbgBTUFBDUy5TTEdldEluc3RhbGxlZFByb2R1Y3RLZXlJZHM-U0xHZXRJbnN0YWxsZWRQcm9kdWN0S2V5SWRz-FNQUENTLlNMR2V0TGljZW5z -ZQBTTEdldExpY2Vuc2U-U1BQQ1MuU0xHZXRM_WNlbnNlRmlsZUlk-FNMR2V0TGljZW5zZUZpbGVJZ-BTUFBDUy5TTEdldExpY2Vuc2VJbmZvcm1hdGlvbgBTTEdldExpY2Vuc2VJbmZvcm1hdGlvbgBTTEdldExpY2Vuc2luZ1N0YXR1c0luZm9ybWF0_W9u-FNQUENT -LlNMR2V0UEtleUlk-FNMR2V0UEtleUlk-FNQUENTLlNMR2V0UEtleUluZm9ybWF0_W9u-FNMR2V0UEtleUluZm9ybWF0_W9u-FNQUENTLlNMR2V0UG9s_WN5SW5mb3JtYXRpb24-U0xHZXRQb2xpY3lJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFBvbGljeUluZm9ybWF0 -_W9uRFdPUkQ-U0xHZXRQb2xpY3lJbmZvcm1hdGlvbkRXT1JE-FNQUENTLlNMR2V0UHJvZHVjdFNrdUluZm9ybWF0_W9u-FNMR2V0UHJvZHVjdFNrdUluZm9ybWF0_W9u-FNQUENTLlNMR2V0U0xJRExpc3Q-U0xHZXRTTElETGlzd-BTUFBDUy5TTEdldFNlcnZpY2VJ -bmZvcm1hdGlvbgBTTEdldFNlcnZpY2VJbmZvcm1hdGlvbgBTUFBDUy5TTEluc3RhbGxM_WNlbnNl-FNMSW5zdGFsbExpY2Vuc2U-U1BQQ1MuU0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNl-FNMSW5zdGFsbFByb29mT2ZQdXJj_GFzZQBTUFBDUy5TTEluc3RhbGxQcm9v -Zk9mUHVyY2hhc2VFe-BTTEluc3RhbGxQcm9vZk9mUHVyY2hhc2VFe-BTUFBDUy5TTElzR2VudWluZUxvY2FsRXg-U0xJc0dlbnVpbmVMb2NhbEV4-FNQUENTLlNMTG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xMb2FkQXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5T -TE9wZW4-U0xPcGVu-FNQUENTLlNMUGVyc2lzdEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xQZXJz_XN0QXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5TTFBlcnNpc3RSVFNQYXlsb2FkT3ZlcnJpZGU-U0xQZXJz_XN0UlRTUGF5bG9hZE92ZXJy_WRl-FNQUENTLlNMUmVB -cm0-U0xSZUFybQBTUFBDUy5TTFJlZ2lzdGVyRXZlbnQ-U0xSZWdpc3RlckV2ZW50-FNQUENTLlNMUmVn_XN0ZXJQbHVn_W4-U0xSZWdpc3RlclBsdWdpbgBTUFBDUy5TTFNldEF1dGhlbnRpY2F0_W9uRGF0YQBTTFNldEF1dGhlbnRpY2F0_W9uRGF0YQBTUFBDUy5T -TFNldEN1cnJlbnRQcm9kdWN0S2V5-FNMU2V0Q3VycmVudFByb2R1Y3RLZXk-U1BQQ1MuU0xTZXRHZW51_W5lSW5mb3JtYXRpb24-U0xTZXRHZW51_W5lSW5mb3JtYXRpb24-U1BQQ1MuU0xVbmluc3RhbGxM_WNlbnNl-FNMVW5pbnN0YWxsTGljZW5zZQBTUFBDUy5T -TFVu_W5zdGFsbFByb29mT2ZQdXJj_GFzZQBTTFVu_W5zdGFsbFByb29mT2ZQdXJj_GFzZQBTUFBDUy5TTFVubG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xVbmxvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNQUENTLlNMVW5yZWdpc3RlckV2ZW50-FNMVW5yZWdpc3Rl -ckV2ZW50-FNQUENTLlNMVW5yZWdpc3RlclBsdWdpbgBTTFVucmVn_XN0ZXJQbHVn_W4-U1BQQ1MuU0xwQXV0_GVudGljYXRlR2VudWluZVRpY2tldFJlc3BvbnNl-FNMcEF1dGhlbnRpY2F0ZUdlbnVpbmVU_WNrZXRSZXNwb25zZQBTUFBDUy5TTHBCZWdpbkdlbnVp -bmVU_WNrZXRUcmFuc2FjdGlvbgBTTHBCZWdpbkdlbnVpbmVU_WNrZXRUcmFuc2FjdGlvbgBTUFBDUy5TTHBDbGVhckFjdGl2YXRpb25JblByb2dyZXNz-FNMcENsZWFyQWN0_XZhdGlvbkluUHJvZ3Jlc3M-U1BQQ1MuU0xwRGVwb3NpdERvd25sZXZlbEdlbnVpbmVU -_WNrZXQ-U0xwRGVwb3NpdERvd25sZXZlbEdlbnVpbmVU_WNrZXQ-U1BQQ1MuU0xwRGVwb3NpdFRv_2VuQWN0_XZhdGlvblJlc3BvbnNl-FNMcERlcG9z_XRUb2tlbkFjdGl2YXRpb25SZXNwb25zZQBTUFBDUy5TTHBHZW5lcmF0ZVRv_2VuQWN0_XZhdGlvbkNoYWxs -ZW5nZQBTTHBHZW5lcmF0ZVRv_2VuQWN0_XZhdGlvbkNoYWxsZW5nZQBTUFBDUy5TTHBHZXRHZW51_W5lQmxvYgBTTHBHZXRHZW51_W5lQmxvYgBTUFBDUy5TTHBHZXRHZW51_W5lTG9jYWw-U0xwR2V0R2VudWluZUxvY2Fs-FNQUENTLlNMcEdldExpY2Vuc2VBY3F1 -_XNpdGlvbkluZm8-U0xwR2V0TGljZW5zZUFjcXVpc2l0_W9uSW5mbwBTUFBDUy5TTHBHZXRNU1BpZEluZm9ybWF0_W9u-FNMcEdldE1TUGlkSW5mb3JtYXRpb24-U1BQQ1MuU0xwR2V0TWFj_GluZVVHVUlE-FNMcEdldE1hY2hpbmVVR1VJR-BTUFBDUy5TTHBHZXRU -b2tlbkFjdGl2YXRpb25HcmFudEluZm8-U0xwR2V0VG9rZW5BY3RpdmF0_W9uR3JhbnRJbmZv-FNQUENTLlNMcElBQWN0_XZhdGVQcm9kdWN0-FNMcElBQWN0_XZhdGVQcm9kdWN0-FNQUENTLlNMcElzQ3VycmVudEluc3RhbGxlZFByb2R1Y3RLZXlEZWZhdWx0S2V5 --FNMcElzQ3VycmVudEluc3RhbGxlZFByb2R1Y3RLZXlEZWZhdWx0S2V5-FNQUENTLlNMcFByb2Nlc3NWTVBpcGVNZXNzYWdl-FNMcFByb2Nlc3NWTVBpcGVNZXNzYWdl-FNQUENTLlNMcFNldEFjdGl2YXRpb25JblByb2dyZXNz-FNMcFNldEFjdGl2YXRpb25JblBy -b2dyZXNz-FNQUENTLlNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNQUENTLlNMcFZMQWN0_XZhdGVQcm9kdWN0-FNMcFZMQWN0_XZhdGVQcm9kdWN0-------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------UH--------------IHE--Ihw--Boc--------------wcQ--oH---Hhw-------------ERx--Cwc-----------------------------D-c--------OJw--------------------cQ------------------ -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- -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- -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: - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:KMS38Activation -@setlocal DisableDelayedExpansion -@echo off - -:: To activate, run the script with "/KMS38" parameter or change 0 to 1 in below line -set _act=0 - -:: To remove KMS38 protection, run the script with /KMS38-RemoveProtection parameter or change 0 to 1 in below line -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 - -:: If value is changed in above lines or parameter is used then script will run in unattended mode - -::======================================================================================================================================== - -cls -color 07 -title KMS38 Activation %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"=="/KMS38" set _act=1 -if /i "%%A"=="/KMS38-RemoveProtection" set _rem=1 -if /i "%%A"=="/KMS38-NoEditionChange" set _NoEditionChange=1 -if /i "%%A"=="-el" set _elev=1 -) -) - -for %%A in (%_act% %_rem% %_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 _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." -) - -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 -) - -::======================================================================================================================================== - -:: 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 -title KMS38 Activation %masver% - -echo: -echo: -echo: -echo: -echo ____________________________________________________________ -echo: -echo [1] KMS38 Activation -echo ____________________________________________ -echo: -echo [2] Remove KM38 Protection -echo: -echo [0] %_exitmsg% -echo ____________________________________________________________ -echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" -choice /C:120 /N -set _el=!errorlevel! -if !_el!==3 exit /b -if !_el!==2 goto :k_uninstall -if !_el!==1 goto :k_menu2 -goto :k_menu -) - -::======================================================================================================================================== - -:k_menu2 - -cls -mode 110, 34 -if exist "%Systemdrive%\Windows\System32\spp\store_test\" mode 134, 34 -title KMS38 Activation %masver% - -echo: -echo Initializing... - -:: 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 dk_done -) - -::======================================================================================================================================== - -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..." -echo: -) - -::======================================================================================================================================== - -:: Check if system is permanently activated or not - -call :dk_checkperm -if defined _perm ( -cls -echo ___________________________________________________________________________________________ -echo: -call :dk_color2 %_White% " " %Green% "Checking: %winos% is 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% : " -if errorlevel 2 exit /b -) -cls - -::======================================================================================================================================== - -:: Check Evaluation version - -set _eval= -set _evalserv= - -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 _eval ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( -%eline% -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. -) else ( -echo Evaluation Editions cannot be activated. -echo You need to install full version of %winos% -echo: -echo Download it from here, -echo %mas%genuine-installation-media.html -) -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 -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%] - -::======================================================================================================================================== - -:: 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] -) - -::======================================================================================================================================== - -echo Initiating Diagnostic Tests... - -set "_serv=ClipSVC sppsvc KeyIso Winmgmt" - -:: Client License Service (ClipSVC) -:: Software Protection -:: CNG Key Isolation -:: Windows Management Instrumentation - -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 - -:: 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 - -if defined altkey (set key=%altkey%&set changekey=1) - -set /a UBR=0 -if %osSKU%==191 if defined altkey if defined altedition ( -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR 2^>nul') do if not errorlevel 1 set /a UBR=%%b -if %winbuild% GEQ 19044 if !UBR! LSS 2788 ( -call :dk_color %Blue% "Windows must to be updated to build 19044.2788 or higher for IotEnterpriseS KMS38 activation." -) -) - -if not defined key if defined notfoundaltactID ( -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. -) else ( -echo Required License files not installed. -) -echo Make sure you are using updated version of the script. -echo %mas% -echo: -goto dk_done -) - -::======================================================================================================================================== - -:: Install key - -echo: -if defined changekey ( -call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable KMS38 activation." -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=%%#" -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 -) -) - -::======================================================================================================================================== - -:: 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 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" -goto :dk_done -) - -::======================================================================================================================================== - -:: Set specific KMS host to Local Host -:: By doing this, global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions - -echo: -%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]);" -%nul% reg delete "HKLM\%specific_kms%" /f -) - -set k_error= -%nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" || set k_error=1 -%nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" || set k_error=1 - -if not defined k_error ( -echo Adding Specific KMS Host [LocalHost 127.0.0.2] [Successful] -) else ( -call :dk_color %Red% "Adding Specific KMS Host [LocalHost 127.0.0.2] [Failed]" -) - -::======================================================================================================================================== - -:: Copy clipup.exe to System32 directory to activate Server Cor/Acor editions - -if defined a_cor ( -set "_clipup=%systemroot%\System32\clipup.exe" -pushd "!_work!\" -copy /y /b "ClipUp.exe" "!_clipup!" %nul% -popd - -echo: -if exist "!_clipup!" ( -echo Copying clipup.exe File to [%systemroot%\System32\] [Successful] -) else ( -call :dk_color %Red% "Copying clipup.exe File to [%systemroot%\System32\] [Failed] Aborting..." -goto :k_final -) -) - -::======================================================================================================================================== - -:: Generate GenuineTicket.xml and apply -:: 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% - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% - -:: 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 - -set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA=" -set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA" -1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=%sessionId%;TimeStampClient=2022-10-11T12:00:00Z%signature%" >"%tdir%\GenuineTicket" - -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]" -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% -goto :k_final -) else ( -echo Generating GenuineTicket.xml [Successful] -) - -set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" - -:: Stop sppsvc - -%psc% Stop-Service sppsvc %nul% - -sc query sppsvc | find /i "STOPPED" %nul% && ( -echo Stopping sppsvc Service [Successful] -) || ( -call :dk_color %Gray% "Stopping sppsvc Service [Failed]" -) - -%_xmlexist% ( -%psc% Restart-Service ClipSVC %nul% -%_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...]" -) -) - -copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% -clipup -v -o - -set rebuildinfo= - -if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" -) - -%_xmlexist% ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" -) - -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( -set error=1 -set rebuildinfo=1 -call :dk_color %Red% "Checking Ticket Migration [Failed]" -) - -if defined applist if not defined showfix if defined rebuildinfo ( -set showfix=1 -call :dk_color %Blue% "%_fixmsg%" -) - -if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% - -::========================================================================================================================================== - -call :dk_product - -echo: -echo Activating... -echo: - -call :k_checkexp -if defined _k38 ( -call :k_actinfo -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 %errorlevel%==0 ( -echo Applying SKU-ID Rearm [Successful] -) else ( -call :dk_color %Red% "Applying SKU-ID Rearm [Failed]" -) -call :dk_refresh - -echo: -call :k_checkexp -if defined _k38 ( -call :k_actinfo -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" - -::======================================================================================================================================== - -:k_final - -:: Remove the added Specific KMS Host (Local Host) 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]" -) || ( -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;" -%nul% reg delete "HKLM\%specific_kms%" /f -%nul% reg query "HKLM\%specific_kms%" && ( -echo Protect KMS38 From KMS [Successful] [Locked A Registry Key] -) || ( -call :dk_color %Red% "Protect KMS38 From KMS [Failed To Lock A Registry Key]" -) -) - -:: clipup.exe does not exist in server cor and acor editions by default, it was copied there with this script - -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]" -) else ( -echo Deleting copied clipup.exe file [Successful] -) -) - -for %%# in (175 407) do if %osSKU%==%%# ( -call :dk_color %Red% "%winos% does not support activation on non-azure platforms." -) - -goto :dk_done - -::======================================================================================================================================== - -:k_uninstall - -cls -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]);" -%nul% reg delete "HKLM\%specific_kms%" /f -) - -echo: -%nul% reg query "HKLM\%specific_kms%" && ( -call :dk_color %Red% "Removing Specific KMS Host [Failed]" -) || ( -echo Removing Specific KMS Host [Successful] -) - -goto :dk_done - -::======================================================================================================================================== - -:: This code runs to protect/undo below registry key for KMS38 protection -:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f - -:: KMS38 protection stops 180 days KMS Activation from replacing KMS38 activation - -:regdel: -param ( - [switch]$protect -) - -$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') -$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value - -if($protect) { -$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny") -} else { -$ruleArgs = @("$Admin", "FullControl", "Allow") -} - -$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f' -$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'ChangePermissions') -$acl = $key.GetAccessControl() - -$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs) -$acl.ResetAccessRule($rule) -$key.SetAccessControl($acl) -:regdel: - -::======================================================================================================================================== - -:: Check KMS activation status - -:k_actinfo - -set xpr= -for /f "tokens=* delims=" %%# in ('%psc% "$([DateTime]::Now.addMinutes(%gpr%)).ToString('yyyy-MM-dd HH:mm:ss')" %nul6%') do set "xpr=%%#" -call :dk_color %Green% "%winos% is activated till !xpr!" -exit /b - -:: Check remaining KMS activation grace period - -: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 %gpr% GTR 259200 (set _k38=1) else (set _k38=) -exit /b - -:: Get Windows installed key channel - -:dk_channel - -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get ProductKeyChannel /value %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=%%#" -exit /b - -::======================================================================================================================================== - -:: Get Product Key from pkeyhelper.dll for future new editions -:: It works on Windows 10 1803 (17134) and later builds. - -:dk_pkey - -call :dk_reflection - -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 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 - -set k=%1 -set m=[Runtime.InteropServices.Marshal] -set p=%SystemRoot%\System32\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); -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 - -:dk_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!]==[%%#] ( -set key=!pkey! -exit /b -) -) -exit /b - -::======================================================================================================================================== - -:: 1st column = Activation ID -:: 2nd column = GVLK (Generic volume licensing key) -:: 3rd column = SKU ID -:: 4th column = WMI Edition ID (For reference only) -:: 5th column = Build Branch name incase same Edition ID is used in different OS versions with different key (For reference only) -:: Separator = "_" - -:kms38data - -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 -) 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 -) -) -exit /b - -::======================================================================================================================================== - -:: Below code is used to get alternate edition name and key if current edition doesn't support KMS38 activation - -:: 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_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 -) 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% && ( -set altkey=%%E -set altedition=%%F -) || ( -set altedition=%%F -set notfoundaltactID=1 -) -) -) -) -exit /b - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:KMSActivation -@setlocal DisableDelayedExpansion -@echo off - -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 _uni= -set _args= -set _elev= -set _renetask= -set _renacttask= -set _unattended= -set _unattendedact= - -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 -) -) -) - -::======================================================================================================================================== - -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 2>nul | find /i "0x0" 1>nul && (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 - -::======================================================================================================================================== - -:: 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 %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") - -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - -::======================================================================================================================================== - -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( -%nceline% -echo Unable to find wmic.exe in the system. -if %winbuild% GEQ 22621 echo Make sure WMIC is enabled in optional features. -goto Done -) - -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 In MAS, Goto Troubleshoot and run Fix WMI option. -goto Done -) - -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 defined _uni goto _Complete_Uninstall - -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 - -::======================================================================================================================================== - -set "_title=Online KMS Activation %masver%" -set _gui= - -:_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 _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 _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 -) -) - -if defined _unattended ( -call :Activation_Start -timeout /t 2 -goto Done -) - -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 %vNextOverride% EQU 1 ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Red% "[Yes]" -) else ( -echo [7] Override Office vNext [Yes] -) -) else ( -if %sub_next% EQU 1 ( -call :_color2 %_White% " [7] Override Office vNext " %_Yellow% "[No]" -) else ( -echo [7] Override Office vNext [No] -) -) -echo. _______________________________________________ -echo. -echo. [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. -echo Press any key to exit... -pause >nul -exit /b - -:========================================================================================================================================= - -:Activation_Start - -@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 :Clear-KMS-Cache %nul% - -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" - -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 -) - -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=" -) - -setlocal EnableDelayedExpansion -pushd "!_work!" - -if not defined _unattended ( -mode con cols=98 lines=31 -%psc% "&%_buf%" -title %_title% -) else ( -title Online KMS Activation %masver% -) - -if defined _gui if %_Debug%==1 mode con cols=98 lines=30 - -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) -) 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 -) -@exit /b - -:Begin - -::======================================================================================================================================== - -set act_failed=0 -set /a act_attempt=0 - -echo. -echo Initializing... - -:: Check Internet connection. Works even if ICMP echo is disabled. - -call :setserv -for %%a in (%srvlist%) do ( -for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( -if not [%%#]==[] goto IntConnected -) -) - -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 defined _unattended ( -echo. -call :_color %_Red% "Internet is not connected, continuing the process anyway." -) else ( -%eline% -echo Internet is not connected. -echo: -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b -) - -: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 - -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 %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 %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 "_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 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 - -sc start sppsvc trigger=timer;sessionid=0 %_Nul3% - -goto TheEnd - -: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 - -: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%) -) -if %loc_off19% EQU 1 if %vol_off19% EQU 0 ( -if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%) -) -if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( -if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) -) -if %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 - -: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 - -: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 - -: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 - -: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 - -:oppoff -set "_qr=%_zz1% %spp% %_zz3% Description %_zz4%" -%_qr% %_Nul2% | findstr /i KMSCLIENT %_Nul1% && ( -set Off1ce=1 -exit /b -) -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 - -: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 - -: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 - -: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 - -: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 -) -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 -) - -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 %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 %1 EQU 15 if defined _C15R ( -set loc_off%1=1 -exit /b -) - -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 - -: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% - -: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 - -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 -) - -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 -) -) - -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 - -: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% -) -goto :eof - -:CheckFR - -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 - -: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 - -: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 - -:: Windows 10 [RS5] -:32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee -set "_key=M7XTQ%yh%FN8P6%yh%TTKYV%yh%9D4CC%yh%J462D" &:: Enterprise LTSC 2019 -exit /b - -:7103a333-b8c8-49cc-93ce-d37c09687f92 -set "_key=92NFX%yh%8DJQP%yh%P6BBQ%yh%THF9C%yh%7CG2H" &:: Enterprise LTSC 2019 N -exit /b - -:ec868e65-fadf-4759-b23e-93fe37f2cc29 -set "_key=CPWHC%yh%NT2C7%yh%VYW78%yh%DHDB2%yh%PG3GK" &:: Enterprise for Virtual Desktops -exit /b - -:0df4f814-3f57-4b8b-9a9d-fddadcd69fac -set "_key=NBTWJ%yh%3DR69%yh%3C4V8%yh%C26MC%yh%GQ9M6" &:: Lean -exit /b - -:: 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 - -:e4db50ea-bda1-4566-b047-0ca50abc6f07 -set "_key=7NBT4%yh%WGBQX%yh%MP4H7%yh%QXFF8%yh%YP3KX" &:: Enterprise Remote Server -exit /b - -:: 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 - -:: 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 - -:3f1afc82-f8ac-4f6c-8005-1d233e606eee -set "_key=6TP4R%yh%GNPTD%yh%KYYHQ%yh%7B7DP%yh%J447Y" &:: Pro Education -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 - -:7b9e1751-a8da-4f75-9560-5fadfe3d8e38 -set "_key=3KHY7%yh%WNT83%yh%DGQKR%yh%F7HPR%yh%844BM" &:: Home N -exit /b - -:cd918a57-a41b-4c82-8dce-1a538e221a83 -set "_key=7HNRX%yh%D7KGG%yh%3K4RQ%yh%4WPJ4%yh%YTDFH" &:: Home Single Language -exit /b - -:a9107544-f4a0-4053-a96a-1479abdef912 -set "_key=PVMJN%yh%6DFY6%yh%9CCP6%yh%7BKTT%yh%D3WVR" &:: Home China -exit /b - -:2de67392-b7a7-462a-b1ca-108dd189f588 -set "_key=W269N%yh%WFGWX%yh%YVC9B%yh%4J6C9%yh%T83GX" &:: Pro -exit /b - -:a80b5abf-76ad-428b-b05d-a47d2dffeebf -set "_key=MH37W%yh%N47XK%yh%V7XM9%yh%C7227%yh%GCQG9" &:: Pro N -exit /b - -:e0c42288-980c-4788-a014-c080d2e1926e -set "_key=NW6C2%yh%QMPVW%yh%D7KKK%yh%3GKT6%yh%VCFB2" &:: Education -exit /b - -:3c102355-d027-42c6-ad23-2e7ef8a02585 -set "_key=2WH4N%yh%8QGBV%yh%H22JP%yh%CT43Q%yh%MDWWJ" &:: Education N -exit /b - -:73111121-5638-40f6-bc11-f1d7b0d64300 -set "_key=NPPR9%yh%FWDCX%yh%D2C8J%yh%H872K%yh%2YT43" &:: Enterprise -exit /b - -:e272e3e2-732f-4c65-a8f0-484747d0d947 -set "_key=DPH2V%yh%TTNVB%yh%4X9Q3%yh%TJR4H%yh%KHJW4" &:: Enterprise N -exit /b - -:7b51a46c-0c04-4e8f-9af4-8496cca90d5e -set "_key=WNMTR%yh%4C88C%yh%JK8YV%yh%HQ7T2%yh%76DF9" &:: Enterprise 2015 LTSB -exit /b - -:87b838b7-41b6-4590-8318-5797951d8529 -set "_key=2F77B%yh%TNFGY%yh%69QQF%yh%B8YKP%yh%D69TJ" &:: Enterprise 2015 LTSB N -exit /b - -:: Windows Server 2022 [Fe] -:9bd77860-9b31-4b7b-96ad-2564017315bf -set "_key=VDYBN%yh%27WPP%yh%V4HQT%yh%9VMD4%yh%VMK7H" &:: Standard -exit /b - -: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 - -: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 - -:: Windows Server 2019 [RS5] -:de32eafd-aaee-4662-9444-c1befb41bde2 -set "_key=N69G4%yh%B89J2%yh%4G8F4%yh%WWYCC%yh%J464C" &:: Standard -exit /b - -: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 - -:73e3957c-fc0c-400d-9184-5f7b6f2eb409 -set "_key=N2KJX%yh%J94YW%yh%TQVFB%yh%DG9YT%yh%724CC" &:: Standard ACor -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 - -:8de8eb62-bbe0-40ac-ac17-f75595071ea3 -set "_key=GRFBW%yh%QNDC4%yh%6QBHG%yh%CCK3B%yh%2PR88" &:: ServerARM64 -exit /b - -: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 - -: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 - -:f7e88590-dfc7-4c78-bccb-6f3865b99d1a -set "_key=VHXM3%yh%NR6FT%yh%RY6RT%yh%CK882%yh%KW2CJ" &:: Embedded Industry Automotive -exit /b - -:e9942b32-2e55-4197-b0bd-5ff58cba8860 -set "_key=3PY8R%yh%QHNP9%yh%W7XQD%yh%G6DPH%yh%3J2C9" &:: with Bing -exit /b - -: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 - -:e58d87b5-8126-4580-80fb-861b22f79296 -set "_key=MX3RK%yh%9HNGX%yh%K3QKC%yh%6PJ3F%yh%W8D7B" &:: Pro for Students -exit /b - -: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 - -:21db6ba4-9a7b-4a14-9e29-64a60c59301d -set "_key=KNC87%yh%3J2TX%yh%XB4WP%yh%VCPJV%yh%M4FWM" &:: Essentials -exit /b - -:b743a2be-68d4-4dd3-af32-92425b7bb623 -set "_key=3NPTF%yh%33KPT%yh%GGBPR%yh%YX76B%yh%39KDD" &:: Cloud Storage -exit /b - -:: Windows 8 -:c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60 -set "_key=BN3D2%yh%R7TKB%yh%3YPBD%yh%8DRP2%yh%27GG4" &:: Core -exit /b - -:197390a0-65f6-4a95-bdc4-55d58a3b0253 -set "_key=8N2M2%yh%HWPGY%yh%7PGT9%yh%HGDD8%yh%GVGGY" &:: Core N -exit /b - -: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 - -:af35d7b7-5035-4b63-8972-f0b747b9f4dc -set "_key=DXHJF%yh%N9KQX%yh%MFPVR%yh%GHGQK%yh%Y7RKV" &:: Core ARM -exit /b - -:a98bcd6d-5343-4603-8afe-5908e4611112 -set "_key=NG4HW%yh%VH26C%yh%733KW%yh%K6F98%yh%J8CK4" &:: Pro -exit /b - -: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 - -:458e1bec-837a-45f6-b9d5-925ed5d299de -set "_key=32JNW%yh%9KQ84%yh%P47T8%yh%D8GGY%yh%CWCK7" &:: Enterprise -exit /b - -:e14997e7-800a-4cf7-ad10-de4b45b578db -set "_key=JMNMF%yh%RHW7P%yh%DMY6X%yh%RF3DR%yh%X2BQT" &:: Enterprise N -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 - -:: 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 - -:7d5486c7-e120-4771-b7f1-7b56c6d3170c -set "_key=HM7DN%yh%YVMH3%yh%46JC3%yh%XYTG7%yh%CYQJJ" &:: MultiPoint Standard -exit /b - -:95fd1c83-7df5-494a-be8b-1300e1c9d1cd -set "_key=XNH6W%yh%2V9GX%yh%RGJ4K%yh%Y8X6F%yh%QGJ2G" &:: MultiPoint Premium -exit /b - -:: Windows 7 -:b92e9980-b9d5-4821-9c94-140f632f6312 -set "_key=FJ82H%yh%XT6CR%yh%J8D7P%yh%XQJJ2%yh%GPDD4" &:: Professional -exit /b - -:54a09a0d-d57b-4c10-8b69-a842d6590ad5 -set "_key=MRPKT%yh%YTG23%yh%K7D7T%yh%X2JMM%yh%QY7MG" &:: Professional N -exit /b - -:5a041529-fef8-4d07-b06f-b59b573b32d2 -set "_key=W82YF%yh%2Q76Y%yh%63HXB%yh%FGJG9%yh%GF7QX" &:: Professional E -exit /b - -:ae2ee509-1b34-41c0-acb7-6d4650168915 -set "_key=33PXH%yh%7Y6KF%yh%2VJC9%yh%XBBR8%yh%HVTHH" &:: Enterprise -exit /b - -:1cb6d605-11b3-4e14-bb30-da91c8e3983a -set "_key=YDRBP%yh%3D83W%yh%TY26F%yh%D46B2%yh%XCKRJ" &:: Enterprise N -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 - -:e1a8296a-db37-44d1-8cce-7bc961d59c54 -set "_key=XGY72%yh%BRBBT%yh%FF8MH%yh%2GG8H%yh%W7KCW" &:: Embedded Standard -exit /b - -:aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395 -set "_key=73KQT%yh%CD9G6%yh%K7TQG%yh%66MRP%yh%CQ22C" &:: Embedded ThinPC -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 - -:68531fb9-5511-4989-97be-d11a0f55633f -set "_key=YC6KT%yh%GKW9T%yh%YTKYR%yh%T4X34%yh%R7VHC" &:: Standard -exit /b - -:7482e61b-c589-4b7f-8ecc-46d455ac3b87 -set "_key=74YFP%yh%3QFB3%yh%KQT8W%yh%PMXWJ%yh%7M648" &:: Datacenter -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 - -:f772515c-0e87-48d5-a676-e6962c3e1195 -set "_key=736RG%yh%XDKJK%yh%V34PF%yh%BHK87%yh%J6X3K" &:: MultiPoint Server - ServerEmbeddedSolution -exit /b - -:: Office 2021 -:fbdb3e18-a8ef-4fb3-9183-dffd60bd0984 -set "_key=FXYTK%yh%NJJ8C%yh%GB6DW%yh%3DYQT%yh%6F7TH" &:: Professional Plus -exit /b - -: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 -exit /b - -:6dd72704-f752-4b71-94c7-11cec6bfc355 -set "_key=J2JDC%yh%NJCYY%yh%9RGQ4%yh%YXWMH%yh%T3D4T" &:: Project Standard -exit /b - -:fb61ac9a-1688-45d2-8f6b-0674dbffa33c -set "_key=KNH8D%yh%FGHT4%yh%T8RK3%yh%CTDYJ%yh%K2HT4" &:: Visio Professional -exit /b - -:72fce797-1884-48dd-a860-b2f6a5efd3ca -set "_key=MJVNY%yh%BYWPY%yh%CWV6J%yh%2RKRT%yh%4M8QG" &:: Visio Standard -exit /b - -:1fe429d8-3fa7-4a39-b6f0-03dded42fe14 -set "_key=WM8YG%yh%YNGDD%yh%4JHDC%yh%PG3F4%yh%FC4T4" &:: Access -exit /b - -:ea71effc-69f1-4925-9991-2f5e319bbc24 -set "_key=NWG3X%yh%87C9K%yh%TC7YY%yh%BC2G7%yh%G6RVC" &:: Excel -exit /b - -:a5799e4c-f83c-4c6e-9516-dfe9b696150b -set "_key=C9FM6%yh%3N72F%yh%HFJXB%yh%TM3V9%yh%T86R9" &:: Outlook -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 - -:1f32a9af-1274-48bd-ba1e-1ab7508a23e8 -set "_key=HWCXN%yh%K3WBT%yh%WJBKY%yh%R8BD9%yh%XK29P" &:: Skype for Business -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 - -: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 - -:9d3e4cca-e172-46f1-a2f4-1d2107051444 -set "_key=G2KWX%yh%3NW6P%yh%PY93R%yh%JXK2T%yh%C9Y9V" &:: Publisher -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 - -:0bc88885-718c-491d-921f-6f214349e79c -set "_key=VQ9DP%yh%NVHPH%yh%T9HJC%yh%J9PDT%yh%KTQRG" &:: Pro Plus 2019 Preview -exit /b - -:fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9 -set "_key=XM2V9%yh%DN9HH%yh%QB449%yh%XDGKC%yh%W2RMW" &:: Project Pro 2019 Preview -exit /b - -:500f6619-ef93-4b75-bcb4-82819998a3ca -set "_key=N2CG9%yh%YD3YK%yh%936X4%yh%3WR82%yh%Q3X4H" &:: Visio Pro 2019 Preview -exit /b - -: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 - -:a3b44174-2451-4cd6-b25f-66638bfb9046 -set "_key=2XYX7%yh%NXXBK%yh%9CK7W%yh%K2TKW%yh%JFJ7G" &:: Visio Pro 2021 Preview -exit /b - -:: Office 2016 -:829b8110-0e6f-4349-bca4-42803577788d -set "_key=WGT24%yh%HCNMF%yh%FQ7XH%yh%6M8K7%yh%DRTW9" &:: Project Professional C2R-P -exit /b - -:cbbaca45-556a-4416-ad03-bda598eaa7c8 -set "_key=D8NRQ%yh%JTYM3%yh%7J2DX%yh%646CT%yh%6836M" &:: Project Standard C2R-P -exit /b - -: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 - -:e914ea6e-a5fa-4439-a394-a9bb3293ca09 -set "_key=DMTCJ%yh%KNRKX%yh%26982%yh%JYCKT%yh%P7KB6" &:: MondoR -exit /b - -:9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce -set "_key=HFTND%yh%W9MK4%yh%8B7MJ%yh%B6C4G%yh%XQBR2" &:: Mondo -exit /b - -:d450596f-894d-49e0-966a-fd39ed4c4c64 -set "_key=XQNVK%yh%8JYDB%yh%WJ9W3%yh%YJ8YR%yh%WFG99" &:: Professional Plus -exit /b - -: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 - -:da7ddabc-3fbe-4447-9e01-6ab7440b4cd4 -set "_key=GNFHQ%yh%F6YQM%yh%KQDGJ%yh%327XX%yh%KQBVC" &:: Project Standard -exit /b - -: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 - -:67c0fc0c-deba-401b-bf8b-9c8ad8395804 -set "_key=GNH9Y%yh%D2J4T%yh%FJHGG%yh%QRVH7%yh%QPFDW" &:: Access -exit /b - -: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 - -: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 - -:041a06cb-c5b8-4772-809f-416d03d16654 -set "_key=F47MM%yh%N3XJP%yh%TQXJ9%yh%BP99D%yh%8K837" &:: Publisher -exit /b - -: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 - -:: Office 2013 -:dc981c6b-fc8e-420f-aa43-f8f33e5c0923 -set "_key=42QTK%yh%RN8M7%yh%J3C4G%yh%BBGYM%yh%88CYV" &:: Mondo -exit /b - -: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 - -:4a5d124a-e620-44ba-b6ff-658961b33b9a -set "_key=FN8TT%yh%7WMH6%yh%2D4X9%yh%M337T%yh%2342K" &:: Project Professional -exit /b - -: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 - -: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 - -:f7461d52-7c2b-43b2-8744-ea958e0bd09a -set "_key=VGPNG%yh%Y7HQW%yh%9RHP7%yh%TKPV3%yh%BG7GB" &:: Excel -exit /b - -:fb4875ec-0c6b-450f-b82b-ab57d8d1677f -set "_key=H7R7V%yh%WPNXQ%yh%WCYYC%yh%76BGV%yh%VT7GH" &:: Groove -exit /b - -: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 - -:efe1f3e6-aea2-4144-a208-32aa872b6545 -set "_key=TGN6P%yh%8MMBC%yh%37P2F%yh%XHXXK%yh%P34VW" &:: OneNote -exit /b - -:771c3afa-50c5-443f-b151-ff2546d863a0 -set "_key=QPN8Q%yh%BJBTJ%yh%334K3%yh%93TGY%yh%2PMBT" &:: Outlook -exit /b - -:8c762649-97d1-4953-ad27-b7e2c25b972e -set "_key=4NT99%yh%8RJFH%yh%Q2VDH%yh%KYG2C%yh%4RD4F" &:: Powerpoint -exit /b - -:00c79ff1-6850-443d-bf61-71cde0de305f -set "_key=PN2WF%yh%29XG2%yh%T9HJ7%yh%JQPJR%yh%FCXK4" &:: Publisher -exit /b - -:d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3 -set "_key=6Q7VD%yh%NX8JD%yh%WJ2VH%yh%88V73%yh%4GBJ7" &:: Word -exit /b - -:: Office 2010 -:09ed9640-f020-400a-acd8-d7d867dfd9c2 -set "_key=YBJTT%yh%JG6MD%yh%V9Q7P%yh%DBKXJ%yh%38W9R" &:: Mondo -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 - -:9da2a678-fb6b-4e67-ab84-60dd6a9c819a -set "_key=V7QKV%yh%4XVVR%yh%XYV4D%yh%F7DFM%yh%8R6BM" &:: Standard -exit /b - -:df133ff7-bf14-4f95-afe3-7b48e7e331ef -set "_key=YGX6F%yh%PGV49%yh%PGW3J%yh%9BTGG%yh%VHKC6" &:: Project Professional -exit /b - -:5dc7bf61-5ec9-4996-9ccb-df806a2d0efe -set "_key=4HP3K%yh%88W3F%yh%W2K3D%yh%6677X%yh%F9PGB" &:: Project Standard -exit /b - -:92236105-bb67-494f-94c7-7f7a607929bd -set "_key=D9DWC%yh%HPYVV%yh%JGF4P%yh%BTWQB%yh%WX8BJ" &:: Visio Premium -exit /b - -:e558389c-83c3-4b29-adfe-5e4d7f46c358 -set "_key=7MCW8%yh%VRQVK%yh%G677T%yh%PDJCM%yh%Q8TCP" &:: Visio Professional -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 - -:cee5d470-6e3b-4fcc-8c2b-d17428568a9f -set "_key=H62QG%yh%HXVKF%yh%PP4HP%yh%66KMR%yh%CW9BM" &:: Excel -exit /b - -:8947d0b8-c33b-43e1-8c56-9b674c052832 -set "_key=QYYW6%yh%QP4CB%yh%MBV6G%yh%HYMCJ%yh%4T3J4" &:: Groove - SharePoint Workspace -exit /b - -:ca6b6639-4ad6-40ae-a575-14dee07f6430 -set "_key=K96W8%yh%67RPQ%yh%62T9Y%yh%J8FQJ%yh%BT37T" &:: InfoPath -exit /b - -:ab586f5c-5256-4632-962f-fefd8b49e6f4 -set "_key=Q4Y4M%yh%RHWJM%yh%PY37F%yh%MTKWH%yh%D3XHX" &:: OneNote -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 - -: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 - -:ea509e87-07a1-4a45-9edc-eba5a39f36af -set "_key=D6QFG%yh%VBYP2%yh%XQHM7%yh%J97RH%yh%VVRCK" &:: Small Business Basics -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. -) else ( -call :Clear-KMS-Cache -) -) - -if not [%Act_OK%]==[1] ( -echo. -echo In case of any issues, check https://mass%-%grave.dev/troubleshoot -) - -if defined _unattended exit /b - -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) -) - -if not defined _intcon ( -call :_color %_Red% "Internet is not connected." -exit /b -) - -if [%ERRORCODE%]==[-1073418124] ( -echo Checking Port 1688 connection, it may take a while... -echo. - -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. -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" - -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 - -: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 - -:: 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. - -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 -) - -:========================================================================================================================================== - -:Clear-KMS-Cache - -set OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform -set SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform - -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 KeyManagementServicePort -%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 -) -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 delete "HKLM\%OPPk%" /f /v KeyManagementServiceName -%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort -%nul% reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing -%nul% reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching -%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% - -set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" - -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 __________________________________________________________________________________________ -) - -set error_= -echo. -call :Clear-KMS-Cache -call :clearstuff - -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 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% -) - -If exist "%windir%\Online_KMS_Activation_Script\" ( -echo Deleting [Folder] %windir%\Online_KMS_Activation_Script\ -rmdir /s /q "%windir%\Online_KMS_Activation_Script\" %nul% -) - -if exist "%ProgramData%\Online_KMS_Activation.cmd" ( -echo Deleting [File] %ProgramData%\Online_KMS_Activation.cmd -del /f /q "%ProgramData%\Online_KMS_Activation.cmd" %nul% -) - -If exist "%ProgramData%\Online_KMS_Activation\" ( -echo Deleting [Folder] %ProgramData%\Online_KMS_Activation\ -rmdir /s /q "%ProgramData%\Online_KMS_Activation\" %nul% -) - -If exist "%ProgramData%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramData%\Activation-Renewal\ -rmdir /s /q "%ProgramData%\Activation-Renewal\" %nul% -) - -If exist "%ProgramFiles%\Activation-Renewal\" ( -echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ -rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% -) - -reg query "HKCR\DesktopBackground\shell\Activate Windows - Office" %nul% && ( -echo Deleting [Registry] HKCR\DesktopBackground\shell\Activate Windows - Office -Reg delete "HKCR\DesktopBackground\shell\Activate Windows - Office" /f %nul% -) - -reg query "%key%" /f Path /s | find /i "\Activation-Renewal" >nul && (set error_=1) -reg query "%key%" /f Path /s | find /i "\Activation-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% - -set error_= -set "_dest=%ProgramFiles%\Activation-Renewal" -set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" - -call :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 -) - -if not exist "%_dest%\" md "%_dest%\" %nul% -set "_temp=%SystemRoot%\Temp\_taskwork_%Random%" - -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) -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 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% - -::======================================================================================================================================== - -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 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% -) - -%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 __________________________________________________________________________________________ -) - -::======================================================================================================================================== - -:RenDone - -if defined _unattended exit /b - -echo. -call :_color %_Yellow% "Press any key to go back..." -pause >nul -exit /b - -::======================================================================================================================================== - -:createInfo.txt - -( -echo The use of this script is to renew your Windows/Office KMS license using online KMS. -echo: -echo If renewal/activation Scheduled tasks were created then following would exist, -echo: -echo - Scheduled tasks -echo Activation-Renewal [Renewal / Weekly] -echo Activation-Run_Once [Activation Task - deletes itself once activated] -echo The scheduled tasks runs only if the system is connected to the Internet. -echo: -echo - Files -echo C:\Program Files\Activation-Renewal\Activation_task.cmd -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: -echo Homepage: mass grave[.]dev -echo Email: windowsaddict@protonmail.com -)>"%_dest%\Info.txt" -exit /b - -::======================================================================================================================================== - -:renewal: - - - - Microsoft Corporation - 1999-01-01T12:00:00.34375 - WindowsAddict - 1.0 - Online K-M-S Activation-Renewal - Weekly Task - \Activation-Renewal - D:P(A;;FA;;;SY)(A;;FA;;;BA)(A;;FRFX;;;LS)(A;;FRFW;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)(A;;FR;;;S-1-5-4) - - - - 1999-01-01T12:00:00 - true - - - - - 1 - - - - - - S-1-5-18 - HighestAvailable - - - - IgnoreNew - false - false - true - true - true - - false - false - - true - true - true - false - false - true - false - PT10M - 7 - - PT2M - 3 - - - - - %ProgramFiles%\Activation-Renewal\Activation_task.cmd - Task - - - -:renewal: - -:run_once: - - - - Microsoft Corporation - 1999-01-01T12:00:00.34375 - WindowsAddict - 1.0 - Online K-M-S Activation Run Once - Run and Delete itself on first Internet Contact - \Activation-Run_Once - D:P(A;;FA;;;SY)(A;;FA;;;BA)(A;;FRFX;;;LS)(A;;FRFW;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)(A;;FR;;;S-1-5-4) - - - - true - - - - - S-1-5-18 - HighestAvailable - - - - IgnoreNew - false - false - true - true - true - - false - false - - true - true - true - false - false - true - false - PT10M - 7 - - PT2M - 3 - - - - - %ProgramFiles%\Activation-Renewal\Activation_task.cmd - Task - - - -:run_once: - -::======================================================================================================================================== - -:: Extract the text from batch script without character and file encoding issue - -:RenExport - -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" -exit /b - -::======================================================================================================================================== - -:_extracttask: -@echo off - -:: Renew K-M-S activation with Online servers via scheduled task - -::============================================================================ -:: -:: This script is a part of 'Microsoft_Activation_Scripts' (MAS) project. -:: -:: Homepage: mass grave[.]dev -:: Email: windowsaddict@protonmail.com -:: -::============================================================================ - - -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 -) - -:: Set Path variable, it helps if it is misconfigured in the system - -set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" -if exist "%SystemRoot%\Sysnative\reg.exe" ( -set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%" -) - ->nul fltmc || 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 - -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 -) - -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 -) - -setlocal EnableDelayedExpansion -if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" & exit - -::======================================================================================================================================== - -:_taskstart - -echo. -echo %date%, %time% - -set /a loop=1 -set /a max_loop=4 - -call :_tasksetserv - -:_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 -) -) - -nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul -if [%errorlevel%]==[0] goto _taskIntConnected - -if %loop%==%max_loop% ( -set _tserror=1 -goto _taskend -) - -echo. -echo Error: Internet is not connected -echo Waiting 30 seconds - -timeout /t 30 >nul -set /a loop=%loop%+1 -goto _intrepeat - -:_taskIntConnected - -::======================================================================================================================================== - -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - -::======================================================================================================================================== - -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" - -::======================================================================================================================================== - -:: Clean existing KMS cache from the registry / Set port value to 1688 - -%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 - -::======================================================================================================================================== - -:: Check WMI and sppsvc Errors - -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 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. -) - -::======================================================================================================================================== - -:: Check installed volume products activation ID's - -call :_taskgetids sppwid %slp% windows -call :_taskgetids sppoid %slp% office -call :_taskgetids osppid %ospp% office - -::======================================================================================================================================== - -echo. -echo Renewing KMS activation for all installed Volume products - -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 -) - -::======================================================================================================================================== - -:: Check KMS38 activation - -set gpr=0 -set _kms38=0 -if defined sppwid if %winbuild% GEQ 14393 ( -set _path=%slp% -set _actid=%sppwid% -call :_taskgetgrace -) - -if %gpr% NEQ 0 if %gpr% GTR 259200 ( -set _kms38=1 -call :_taskchkEnterpriseG _kms38 -) - -:: 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 %_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" -) - -::======================================================================================================================================== - -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 -) - -if defined sppoid ( -set _path=%slp% -for %%# in (%sppoid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) - -if defined osppid ( -set _path=%ospp% -for %%# in (%osppid%) do ( -echo. -set _actid=%%# -call :_actprod -call :_act -call :_actinfo -) -) - -if not defined sppoid if not defined osppid ( -echo. -echo Checking: Volume version of Office is not installed -) - -:_skipact - -::======================================================================================================================================== - -if defined run_once ( -echo. -echo Deleting Scheduled Task Activation-Run_Once -schtasks /delete /tn Activation-Run_Once /f %nul% -) - -::======================================================================================================================================== - -:_taskend - -echo. -echo Exiting -echo ______________________________________________________________________ - -if defined _tserror (exit /b 123456789) else (exit /b 0) - -::======================================================================================================================================== - -:_act - -set errorcode=12345 -set /a act_attempt=0 - -:_act2 - -if %act_attempt% GTR 4 exit /b - -if not [%act_ok%]==[1] ( -call :_taskgetserv -call :_taskregserv -) - -if not !server_num! GTR %max_servers% ( - -if [%1]==[act_win] if %_kms38% EQU 1 ( -set act_ok=1 -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 }" - -call set errorcode=!errorlevel! - -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 - -:_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 - -::======================================================================================================================================== - -:_actinfo - -if [%1]==[act_win] if %_kms38% EQU 1 ( -echo Windows is activated with KMS38 -exit /b -) - -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 -) - -if %errorcode% EQU -1073417728 ( -echo Product Activation Failed: 0xC004F200 -echo Windows needs to rebuild the activation-related files. -set _tserror=1 -exit /b -) - -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 -) - -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 -) - -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 - -::======================================================================================================================================== - -:_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) 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 - -:_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 - -:_taskchkEnterpriseG - -for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) -exit /b - -::======================================================================================================================================== - -:_taskregserv - -%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 -) -) -exit /b - -::======================================================================================================================================== - -:_tasksetserv - -:: 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" - -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 - -:_taskgetserv - -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 - -:: 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. - -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:1.9 -::======================================================================================================================================== -:_extracttask: - -:====================================================================================================================================================== - -:_color - -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 - -:_color2 - -if %_NCS% EQU 1 ( -echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( -call :batcol %~1 "%~2" %~3 "%~4" -) -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 - -:_batcol - -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% - -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 - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:_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] - -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 - -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 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 go back... -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. -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: - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:troubleshoot -@setlocal DisableDelayedExpansion -@echo off - -::======================================================================================================================================== - -cls -color 07 -title Troubleshoot %masver% - -set _args= -set _elev= - -set _args=%* -if defined _args set _args=%_args:"=% -if defined _args ( -for %%A in (%_args%) do ( -if /i "%%A"=="-el" set _elev=1 -) -) - -set "nul1=1>nul" -set "nul2=2>nul" -set "nul6=2^>nul" -set "nul=>nul 2>&1" - -set 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:" -set "line=_________________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") - -::======================================================================================================================================== - -:: 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" - -:: 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 Desktop location was not detected, aborting... -goto at_done -) - -setlocal EnableDelayedExpansion - -::======================================================================================================================================== - -:at_menu - -cls -color 07 -title Troubleshoot %masver% -mode con cols=77 lines=30 - -echo: -echo: -echo: -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: -echo: [0] %_exitmsg% -echo: _______________________________________________________________ -echo: -call :_color2 %_White% " " %_Green% "Enter a menu option in the 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%==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 - -::======================================================================================================================================== - -: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 -) - -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 :_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 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% - -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 - -%psc% Stop-Service TrustedInstaller -force %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% - -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 :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop." -goto :at_back - -::======================================================================================================================================== - -: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 - -cls -%psc% Stop-Service TrustedInstaller -force %nul% - -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 - -%psc% Stop-Service TrustedInstaller -force %nul% - -if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% - -call :compresslog cbs\CBS.log SFC_CBS %nul% - -if not exist "!desktop!\AT_Logs\SFC_CBS_%_time%.cab" ( -copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.log" %nul% -) - -echo: -call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." -goto :at_back - -::======================================================================================================================================== - -:retokens - -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^) - -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 - -::======================================================================================================================================== - -:: Rebuild ClipSVC Licences - -cls -:cleanlicensing - -echo: -echo %line% -echo: -call :_color %Blue% "Rebuilding ClipSVC Licences" -echo: - -if %winbuild% LSS 10240 ( -echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent. -echo Skipping... -goto :cleanvnext -) - -%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 -) - -echo Stopping ClipSVC service... -%psc% Stop-Service ClipSVC -force %nul% -timeout /t 2 %nul% - -echo: -echo Applying the command to Clean ClipSVC Licences... -echo rundll32 clipc.dll,ClipCleanUpState - -rundll32 clipc.dll,ClipCleanUpState - -if %winbuild% LEQ 10240 ( -echo [Successful] -) else ( -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( -call :_color %Red% "[Failed]" -) else ( -echo [Successful] -) -) - -:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after -:: system restart. It needs to be deleted to activate the system without restart. - -set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" - -reg query "%RegKey%" %nul% && %nul% call :regownstart -reg delete "%RegKey%" /f %nul% - -echo: -echo Deleting a Volatile ^& Protected Registry Key... -echo [%RegKey%] -reg query "%RegKey%" %nul% && ( -call :_color %Red% "[Failed]" -echo Restart the system, that will delete this registry key automatically. -) || ( -echo [Successful] -) - -:: Clear HWID token related registry to fix activation incase if there is any corruption - -echo: -echo Deleting a IdentityCRL Registry Key... -echo [%_ident%] -reg delete "%_ident%" /f %nul% -reg query "%_ident%" %nul% && ( -call :_color %Red% "[Failed]" -) || ( -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 :_color %Red% "[Failed]" -) else ( -echo [Successful] -) - -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] -) -) - -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 - -::======================================================================================================================================== - -:: Rebuild SPP Tokens - -echo: -echo %line% -echo: -call :_color %Blue% "Rebuilding SPP Licensing Tokens" -echo: - -call :scandat check - -if not defined token ( -call :_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= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" - -:: Check sppsvc permissions and apply fixes - -if %winbuild% GEQ 10240 ( - -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 :checkperms -if defined permerror ( -call :_color %Red% "[Failed To Fix]" -) else ( -echo [Successfully Fixed] -) -) else ( -echo [No Error Found] -) -) - -echo: -echo Stopping sppsvc service... -%psc% Stop-Service sppsvc -force %nul% - -echo: -call :scandat delete -call :scandat check - -if defined token ( -echo: -call :_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% -if %errorlevel% EQU 0 ( -echo [Successful] -) else ( -call :_color %Red% "[Failed]" -) - -call :scandat check - -echo: -if not defined token ( -call :_color %Red% "Failed to rebuilt tokens.dat file." -) else ( -echo tokens.dat file was rebuilt successfully. -) - -::======================================================================================================================================== - -:: 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 - -if not defined token ( -call :_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 :_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 :_color %Red% "Failed to rebuilt tokens.dat file." -) else ( -echo tokens.dat file was rebuilt successfully. -) - -::======================================================================================================================================== - -:repairoffice - -echo: -echo %line% -echo: -call :_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 ( -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 -) - -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 -) -) - -if %counter% GTR 1 ( -%eline% -echo Multiple office versions found. -echo It's recommended to install only one version of office. -echo ________________________________________________________________ -echo: -) - -if %counter% EQU 0 ( -echo: -echo Installed Office is not found. -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: -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 ________________________________________________________________ -echo: -start ms-settings:appsfeatures -) - -set c2r14= -if defined c2r14_68 set c2r14=1 -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 ________________________________________________________________ -echo: -start appwiz.cpl -) - -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 - -:repairend - -echo: -echo %line% -echo: -echo: -call :_color %Green% "Finished" -goto :at_back - -::======================================================================================================================================== - -:fixwmi - -cls -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... -goto :at_back -) - -echo: -echo Checking WMI -call :checkwmi - -:: Apply basic fix first and check - -if defined error ( -%psc% Stop-Service Winmgmt -force %nul% -winmgmt /salvagerepository %nul% -call :checkwmi -) - -if not defined error ( -echo [Working] -echo No need to apply this option. Aborting... -goto :at_back -) - -call :_color %Red% "[Not Responding]" - -set _corrupt= -sc start Winmgmt %nul% -if %errorlevel% EQU 1060 set _corrupt=1 -sc query Winmgmt %nul% || set _corrupt=1 -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt (reg query HKLM\SYSTEM\CurrentControlSet\Services\Winmgmt /v %%G %nul% || set _corrupt=1) - -echo: -if defined _corrupt ( -%eline% -echo Winmgmt service is corrupted. Aborting... -goto :at_back -) - -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 -) - -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% -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 Restarting... -shutdown -t 5 -r -exit -) - -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: -echo Enabling Winmgmt service -sc config Winmgmt start= auto %nul% -if %errorlevel% EQU 0 ( -echo [Successful] -) else ( -call :_color %Red% "[Failed]" -) - -call :checkwmi -if not defined error ( -echo: -echo Checking WMI -call :_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 :_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]" -) - -goto :at_back - -:registerobj - -:: 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 -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= -wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% -if %errorlevel% NEQ 0 (set error=1& exit /b) -winmgmt /verifyrepository %nul% -if %errorlevel% NEQ 0 (set error=1& exit /b) - -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% -cmd /c exit /b %errorlevel% -echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440" %nul1% -if %errorlevel% EQU 0 set error=1 -exit /b - -::======================================================================================================================================== - -:at_back - -echo: -echo %line% -echo: -call :_color %_Yellow% "Press any key to go back..." -pause %nul1% -goto :at_menu - -::======================================================================================================================================== - -:at_done - -echo: -echo Press any key to %_exitmsg%... -pause %nul1% -exit /b - -::======================================================================================================================================== - -:compresslog - -:: https://stackoverflow.com/a/46268232 - -set "ddf="%SystemRoot%\Temp\ddf"" -%nul% del /q /f %ddf% -echo/.New Cabinet>%ddf% -echo/.set Cabinet=ON>>%ddf% -echo/.set CabinetFileCountThreshold=0;>>%ddf% -echo/.set Compress=ON>>%ddf% -echo/.set CompressionType=LZX>>%ddf% -echo/.set CompressionLevel=7;>>%ddf% -echo/.set CompressionMemory=21;>>%ddf% -echo/.set FolderFileCountThreshold=0;>>%ddf% -echo/.set FolderSizeThreshold=0;>>%ddf% -echo/.set GenerateInf=OFF>>%ddf% -echo/.set InfFileName=nul>>%ddf% -echo/.set MaxCabinetSize=0;>>%ddf% -echo/.set MaxDiskFileCount=0;>>%ddf% -echo/.set MaxDiskSize=0;>>%ddf% -echo/.set MaxErrors=1;>>%ddf% -echo/.set RptFileName=nul>>%ddf% -echo/.set UniqueFiles=ON>>%ddf% -for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do ( - echo/"%%~fD" /inf=no;>>%ddf% -) -makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\AT_Logs\%2_%_time%.cab" -del /q /f %ddf% -exit /b - -::======================================================================================================================================== - -:checkperms - -set permerror= -if not exist "%tokenstore%\" set permerror=1 - -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 - -::======================================================================================================================================== - -:scandat - -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 ( - -if %1==check ( -if exist %%#tokens.dat set token=%%#tokens.dat -) - -if %1==delete ( -if exist %%# ( -%nul% dir /a-d /s "%%#*.dat" && ( -attrib -r -s -h "%%#*.dat" /S -del /S /F /Q "%%#*.dat" -) -) -) -) -exit /b - -:scandatospp - -set token= -for %%# in ( -%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\ -) do ( - -if %1==check ( -if exist %%#tokens.dat set token=%%#tokens.dat -) - -if %1==delete ( -if exist %%# ( -%nul% dir /a-d /s "%%#*.dat" && ( -attrib -r -s -h "%%#*.dat" /S -del /S /F /Q "%%#*.dat" -) -) -) -) -exit /b - -::======================================================================================================================================== - -:regownstart - -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" -exit /b - -:: Below code takes ownership of a volatile registry key and deletes it -:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState - -:regown: -$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 -$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null - -$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') -$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value -$Admin = New-Object System.Security.Principal.NTAccount($IDN) - -$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' -$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') - -$acl = $key.GetAccessControl() -$acl.SetOwner($Admin) -$key.SetAccessControl($acl) - -$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") -$acl.SetAccessRule($rule) -$key.SetAccessControl($acl) -:regown: - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:change_edition -@setlocal DisableDelayedExpansion -@echo off - -:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line -set _stg=0 - -::======================================================================================================================================== - -cls -color 07 -title Change Windows Edition %masver% - -set _args= -set _elev= - -set _args=%* -if defined _args set _args=%_args:"=% -if defined _args ( -for %%A in (%_args%) do ( -if /i "%%A"=="-el" set _elev=1 -) -) - -set "nul1=1>nul" -set "nul2=2>nul" -set "nul6=2^>nul" -set "nul=>nul 2>&1" - -set 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:" -set "line=echo ___________________________________________________________________________________________" -if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") - -::======================================================================================================================================== - -:: 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 -mode 98, 30 - -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..." -echo: -) - -::======================================================================================================================================== - -:: Check Activation IDs - -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_checksku - -if not defined osSKU ( -%eline% -echo SKU value was not detected properly. Aborting... -goto ced_done -) - -::======================================================================================================================================== - -:: Check Windows Edition - -set osedition= -set dismedition= -set dismnotworking= - -set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [int], @([String], [int], [int].MakeByRefType(), [String].MakeByRefType()), 1, 3); -set d1=%d1% $editionName = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformation('Kernel-EditionName', 0, [ref]0, [ref]$editionName); $editionName -if %winbuild% GEQ 14393 for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set osedition=%%s) -if "%osedition%"=="0" set osedition= - -if not defined osedition ( -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" -) - -:: Workaround for 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 "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 - -set _target= -set _dtarget= -set _ptarget= -set _ntarget= -set _wtarget= - -if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget= !_dtarget! %%a ") else (set "_dtarget= %%a ")) -if %winbuild% LSS 10240 for /f "tokens=4" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget= !_ptarget! %%a ") else (set "_ptarget= %%a ")) - -if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -call :ced_edilist -if /i "%osedition:~0,4%"=="Core" (set "_wtarget= Professional !_wtarget! ") -set "_dtarget= %_dtarget% !_wtarget! " -) - -::======================================================================================================================================== - -:: Block the change to/from 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 ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" ( -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! %%#") -) -) - -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." -echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition. -%line% -goto ced_done -) - -::======================================================================================================================================== - -:cedmenu2 - -cls -mode 98, 30 -set inpt= -set counter=0 -set verified=0 -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." -) -%line% -echo: - -for %%A in (%_ntarget%) do ( -set /a counter+=1 -echo [!counter!] %%A -set targetedition!counter!=%%A -) - -%line% -echo: -echo [0] %_exitmsg% -echo: -call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":" -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 - -::======================================================================================================================================== - -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 - -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 ( -%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 -) - -::======================================================================================================================================== - -:: 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 -) -) - -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 %_dismapi%==1 ( -call :dk_color %Green% "Notes-" -echo: -echo - Save your work before continue, system will auto restart. -echo: -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 %_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!]" - -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 -) -) - -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% - -goto ced_done - -::======================================================================================================================================== - -:cbsmethod - -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;}" - -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 ) - -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 - -echo: -echo Initializing... -echo: - -if %_stg%==0 (set stage=) else (set stage=-StageCurrent) -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;" -echo: -call :dk_color %Blue% "Incase of errors, you must restart your system before trying again." -echo Check this page for help. %mas%troubleshoot -%line% - -goto ced_done - -::======================================================================================================================================== - -: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;}" - -set key= -set _chan= -set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM" - -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 ( -%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 -) - -::======================================================================================================================================== - -%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 -) - -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 - -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 " -) -) -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: - -::======================================================================================================================================== - -:ced_windowskey - -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 -) -) -exit /b - -::======================================================================================================================================== - -: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/Gamers-Against-Weed/Set-WindowsCbsEdition - -:cbsxml:[ -param ( - [Parameter()] - [String]$SetEdition, - - [Parameter()] - [Switch]$GetTargetEditions, - - [Parameter()] - [Switch]$StageCurrent -) - -function Get-AssemblyIdentity { - param ( - [String]$PackageName - ) - - $PackageName = [String]$PackageName - $packageData = ($PackageName -split '~') - - if($packageData[3] -eq '') { - $packageData[3] = 'neutral' - } - - return "" -} - -function Get-SxsName { - param ( - [String]$PackageName - ) - - $name = ($PackageName -replace '[^A-z0-9\-\._]', '') - - if($name.Length -gt 40) { - $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '') - } - - return $name.ToLower() -} - -function Find-EditionXmlInSxs { - param ( - [String]$Edition - ) - - $candidates = @($Edition, 'Client', 'Server') - $winSxs = $Env:SystemRoot + '\WinSxS' - $allInSxs = Get-ChildItem -Path $winSxs | select Name - - foreach($candidate in $candidates) { - $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate" - $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35') - - if($packages.Length -eq 0) { - continue - } - - $package = $packages[-1].Name - $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml' - - if(Test-Path -Path $testPath -PathType Leaf) { - return $testPath - } - } - - return $null -} - -function Find-EditionXml { - param ( - [String]$Edition - ) - - $servicingEditions = $Env:SystemRoot + '\servicing\Editions' - $editionXml = $Edition + 'Edition.xml' - - $editionXmlInServicing = $servicingEditions + '\' + $editionXml - - if(Test-Path -Path $editionXmlInServicing -PathType Leaf) { - return $editionXmlInServicing - } - - return Find-EditionXmlInSxs -Edition $Edition -} - -function Write-UpgradeCandidates { - param ( - [HashTable]$InstallCandidates - ) - - $editionCount = 0 - Write-Host 'Editions that can be upgraded to:' - foreach($candidate in $InstallCandidates.Keys) { - Write-Host "Target Edition : $candidate" - $editionCount++ - } - - if($editionCount -eq 0) { - Write-Host '(no editions are available)' - } -} - -function Write-UpgradeXml { - param ( - [Array]$RemovalCandidates, - [Array]$InstallCandidates, - [Boolean]$Stage - ) - - $removeAction = 'remove' - if($Stage) { - $removeAction = 'stage' - } - - Write-Output '' - Write-Output '' - Write-Output '' - - 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 '' - } - - Write-Output '' - Write-Output '' -} - -function Write-Usage { - Get-Help $script:MyInvocation.MyCommand.Path -detailed -} - -$version = '1.0' -$getTargetsParam = $GetTargetEditions.IsPresent -$stageCurrentParam = $StageCurrent.IsPresent - -if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) { - Write-Usage - Exit 1 -} - -$removalCandidates = @(); -$installCandidates = @{}; - -$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' } -foreach($package in $packages) { - $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState - $packageName = ($package.Name -split '\\')[-1] - $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1] - - if($state -eq 0x40) { - if($null -eq $installCandidates[$packageEdition]) { - $installCandidates[$packageEdition] = @() - } - - if($false -eq ($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) - } -} - -if($getTargetsParam) { - Write-UpgradeCandidates -InstallCandidates $installCandidates - Exit -} - -if($false -eq ($installCandidates.Keys -contains $SetEdition)) { - Write-Error "The system cannot be upgraded to `"$SetEdition`"" - Exit 1 -} - -$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml' - -Write-UpgradeXml -RemovalCandidates $removalCandidates ` - -InstallCandidates $installCandidates[$SetEdition] ` - -Stage $stageCurrentParam >$xmlPath - -$editionXml = Find-EditionXml -Edition $SetEdition -if($null -eq $editionXml) { - Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...' -} - -Write-Host 'Starting the upgrade process. This may take a while...' - -DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath -$dismError = $LASTEXITCODE - -Remove-Item -Path $xmlPath -Force - -if(($dismError -ne 0) -and ($dismError -ne 3010)) { - Write-Error 'Failed to upgrade to the target edition' - Exit $dismError -} - -if($null -ne $editionXml) { - $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml' - Copy-Item -Path $editionXml -Destination $destination - - DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml - $dismError = $LASTEXITCODE - - if(($dismError -ne 0) -and ($dismError -ne 3010)) { - Write-Error 'Failed to apply edition specific settings' - Exit $dismError - } -} - -Restart-Computer -:cbsxml:] - -::======================================================================================================================================== - -:: Change edition using DISM API -:: Thanks to Alex (aka may, ave9858) - -:dismapi:[ -param ( - [Parameter()] - [String]$TargetEdition, - - [Parameter()] - [String]$Key -) - -$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) -$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) -$TB = $ModuleBuilder.DefineType(0) - -[void]$TB.DefinePInvokeMethod('DismInitialize', 'DismApi.dll', 22, 1, [int], @([int], [IntPtr], [IntPtr]), 1, 3) -[void]$TB.DefinePInvokeMethod('DismOpenSession', 'DismApi.dll', 22, 1, [int], @([String], [IntPtr], [IntPtr], [UInt32].MakeByRefType()), 1, 3) -[void]$TB.DefinePInvokeMethod('_DismSetEdition', 'DismApi.dll', 22, 1, [int], @([UInt32], [String], [String], [IntPtr], [IntPtr], [IntPtr]), 1, 3) -$Dism = $TB.CreateType() - -[void]$Dism::DismInitialize(2, 0, 0) -$Session = 0 -[void]$Dism::DismOpenSession('DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}', 0, 0, [ref]$Session) -if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) { - Restart-Computer -} -:dismapi:] - -::======================================================================================================================================== - -:: 1st column = Generic Retail/OEM/MAK/GVLK Key -:: 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 - -:changeeditiondata - -if %winbuild% GTR 17763 exit /b -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) - -set h= -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 ( - -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 - -:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -:MASend -echo: -if defined _MASunattended timeout /t 2 & exit /b -echo Press any key to exit... -pause >nul -exit /b - -::======================================================================================================================================== -:: Leave empty line below diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd new file mode 100644 index 0000000..848cc7d --- /dev/null +++ b/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd @@ -0,0 +1,10331 @@ +@::RANDOM-09dbb08f-d896-4653-b84f-24fc22f8d250 +@set masver=2.6 +@setlocal DisableDelayedExpansion +@echo off + + + +:: 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: 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 Microsoft_Activation_Scripts %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 +) +) + +if defined _args echo "%_args%" | find /i "/" >nul && set _unattended=1 + +::======================================================================================================================================== + +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" + +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 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) +) +) + +::======================================================================================================================================== + +if not exist "%SystemRoot%\Temp\" mkdir "%SystemRoot%\Temp" %nul% + +:: Run script with parameters in unattended mode + +set _elev= +if defined _args echo "%_args%" | find /i "/S" %nul% && (set "_silent=%nul%") || (set _silent=) +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 "/K-" %nul% && (setlocal & cls & (call :KMSActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/Ohook" %nul% && (setlocal & cls & (call :OhookActivation %_args% %_silent%) & endlocal) +exit /b +) + +::======================================================================================================================================== + +setlocal DisableDelayedExpansion + +:: Check desktop location + +set desktop= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b" +if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a" +set "_pdesk=%desktop:'=''%" + +setlocal EnableDelayedExpansion + +if not defined desktop ( +%eline% +echo Unable to detect Desktop location, aborting... +goto dk_done +) + +::======================================================================================================================================== + +:MainMenu + +cls +color 07 +title Microsoft %blank%Activation %blank%Scripts %masver% +if not defined terminal mode 76, 32 + +echo: +echo: +echo: +echo: +echo: ______________________________________________________________ +echo: +echo: Activation Methods: +echo: +echo: [1] HWID ^| Windows ^| Permanent +echo: [2] Ohook ^| Office ^| Permanent +echo: [3] KMS38 ^| Windows ^| Year 2038 +echo: [4] Online KMS ^| Windows / Office ^| 180 Days +echo: __________________________________________________ +echo: +echo: [5] Check Activation Status +echo: [6] Change Windows Edition +echo: [7] Change Office Edition +echo: [8] Troubleshoot +echo: [9] Extras +echo: [H] Help +echo: [0] Exit +echo: ______________________________________________________________ +echo: +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%==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 +if %_erl%==1 setlocal & call :HWIDActivation & cls & endlocal & goto :MainMenu +goto :MainMenu + +::======================================================================================================================================== + +:Extras + +cls +title Extras +if not defined terminal mode 76, 30 +echo: +echo: +echo: +echo: +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 :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0] :" +choice /C:120 /N +set _erl=%errorlevel% + +if %_erl%==3 goto :MainMenu +if %_erl%==2 start %mas%genuine-installation-media & goto :Extras +if %_erl%==1 goto :Extract$OEM$ +goto :Extras + +::======================================================================================================================================== + +:Extract$OEM$ + +cls +title Extract $OEM$ Folder +if not defined terminal mode 76, 30 + +if exist "!desktop!\$OEM$\" ( +%eline% +echo $OEM$ folder already exists on the Desktop. +echo _____________________________________________________ +echo: +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." +choice /c 0 /n +goto :Extras +) + +:Extract$OEM$2 + +cls +title Extract $OEM$ Folder +if not defined terminal mode 78, 30 +echo: +echo: +echo: +echo: +echo: Extract $OEM$ folder on the desktop +echo: ________________________________________________________ +echo: +echo: [1] HWID +echo: [2] Ohook +echo: [3] KMS38 +echo: [4] Online KMS +echo: +echo: [5] HWID ^(Windows^) ^+ Ohook ^(Office^) +echo: [6] HWID ^(Windows^) ^+ Online KMS ^(Office^) +echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^) +echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) +echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^) +echo: +call :dk_color2 %_White% " [R] " %_Green% "ReadMe" +echo: [0] Go Back +echo: ________________________________________________________ +echo: +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 &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 /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=/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) +goto :Extract$OEM$2 + +::======================================================================================================================================== + +:Extract$OEM$3 + +cls +set "_dir=!desktop!\$OEM$\$$\Setup\Scripts" +md "!_dir!\" + +:: 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 +echo fltmc ^>nul ^|^| exit /b +echo call "%%~dp0MAS_AIO.cmd" %para% +echo cd \ +echo ^(goto^) 2^>nul ^& ^(if "%%~dp0"=="%%SystemRoot%%\Setup\Scripts\" rd /s /q "%%~dp0"^) +)>"!_dir!\SetupComplete.cmd" + +set _error= +if not exist "!_dir!\MAS_AIO.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 + +if defined _error ( +%eline% +echo The script failed to create the $OEM$ folder. +if exist "!desktop!\$OEM$\.*" rmdir /s /q "!desktop!\$OEM$\" %nul% +) else ( +echo: +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: +echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), +echo Check this page %mas%oem-folder +) +echo ___________________________________________________________________ +echo: +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." +choice /c 0 /n +goto Extras + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:HWIDActivation + +:: To activate, run the script with "/HWID" parameter or change 0 to 1 in below line +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 + +:: If value is changed in above lines or parameter is used then script will run in unattended mode + +::======================================================================================================================================== + +cls +color 07 +title HWID Activation %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"=="/HWID" set _act=1 +if /i "%%A"=="/HWID-NoEditionChange" set _NoEditionChange=1 +if /i "%%A"=="-el" set _elev=1 +) +) + +for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) + +::======================================================================================================================================== + +if %winbuild% LSS 10240 ( +%eline% +echo Unsupported OS version detected [%winbuild%]. +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 on Windows Server. +call :dk_color %Blue% "Use KMS38 or Online KMS activation option." +goto dk_done +) + +setlocal EnableDelayedExpansion + +::======================================================================================================================================== + +cls +if not defined terminal ( +mode 110, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) +title HWID Activation %masver% + +echo: +echo Initializing... +call :dk_chkmal + +for %%# in ( +sppsvc.exe +ClipUp.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 +) +) + +::======================================================================================================================================== + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue + +::======================================================================================================================================== + +:: Check if system is permanently activated or not + +call :dk_checkperm +if defined _perm ( +cls +echo ___________________________________________________________________________________________ +echo: +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 Anyway [0] %_exitmsg% : " +if errorlevel 2 exit /b +) +cls + +::======================================================================================================================================== + +:: Check Evaluation version + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +%eline% +echo [%winos% ^| %winbuild%] +echo: +echo Evaluation editions cannot be activated outside of their evaluation period. +echo: +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +goto dk_done +) +) + +::======================================================================================================================================== + +set error= + +cls +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 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 ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for HWID activation." +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt" + +:: Client License Service (ClipSVC) +:: Microsoft Account Sign-in Assistant +:: Software Protection +:: CNG Key Isolation +:: Windows License Manager Service +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + +:: Detect Key + +set key= +set altkey= +set changekey= +set altapplist= +set altedition= +set notworking= + +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) +if defined altapplist call :hwiddata key +) + +if defined notworking call :hwidfallback +if not defined key call :hwidfallback + +if defined altkey (set key=%altkey%&set changekey=1&set notworking=) + +if defined notworking if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]" +) + +if not defined key ( +%eline% +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +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 %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +echo: +goto dk_done +) + +if defined notworking set error=1 + +::======================================================================================================================================== + +:: Install key + +echo: +if defined changekey ( +call :dk_color %Blue% "[%altedition%] edition product key will be used to enable HWID activation." +echo: +) + +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 + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b" +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b" + +set regionchange= +if not "%name%"=="US" ( +set regionchange=1 +%psc% "Set-WinHomeLocation -GeoId 244" %nul% +if !errorlevel! EQU 0 ( +echo Changing Windows Region To USA [Successful] +) else ( +call :dk_color %Red% "Changing Windows Region To USA [Failed]" +) +) + +::========================================================================================================================================== + +:: Generate GenuineTicket.xml and apply +:: 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) + +set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" +if not exist "%tdir%\" md "%tdir%\" %nul% + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% + +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...]" +echo [%encoded%] +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +goto :dl_final +) else ( +echo Generating GenuineTicket.xml [Successful] +) + +set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" + +%_xmlexist% ( +%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...]" +) +) + +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% +clipup -v -o + +set rebuildinfo= + +if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" +) + +%_xmlexist% ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" +) + +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking Ticket Migration [Failed]" +) + +if not defined altapplist if not defined showfix if defined rebuildinfo ( +set showfix=1 +call :dk_color %Blue% "%_fixmsg%" +) + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% + +::========================================================================================================================================== + +call :dk_product + +echo: +echo Activating... + +call :dk_act +call :dk_checkperm +if defined _perm ( +echo: +call :dk_color %Green% "%winos% is permanently activated with a digital license." +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= +ipconfig /flushdns %nul% +set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" + +for %%# in ( +login.live.com/ppsecure/deviceaddcredential.srf +purchase.mp.microsoft.com/v7.0/users/me/orders +) do if not defined resfail ( +set "d1=Add-Type -AssemblyName System.Net.Http;" +set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" +set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" +set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" +%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 +) + +if not defined resfail ( +%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 +) + +if defined resfail ( +set error=1 +echo: +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" +) +) + +::========================================================================================================================================== + +if %keyerror% EQU 0 if not defined _perm if defined _int ( + +reg query "%_ident%" %nul% || ( +set error=1 +echo: +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" +) + +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]" + +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 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%" +set fixes=%fixes% %mas%licensing-servers-issue +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +) +) +) + +::========================================================================================================================================== + +echo: +if defined _perm ( +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, 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%" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +) + +::======================================================================================================================================== + +:dl_final + +echo: + +if defined regionchange ( +%psc% "Set-WinHomeLocation -GeoId %nation%" %nul% +if !errorlevel! EQU 0 ( +echo Restoring Windows Region [Successful] +) else ( +call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - %nation%]" +) +) + +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= +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% +) +) + +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 %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 + +:: Activation command + +:dk_act + +set error_code= +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 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 + +:: Get Activation IDs from licensing files if not found through WMI + +:getactivationid: +$folderPath = "$env:SysPath\spp\tokens\skus" +$files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms" +$guids = @() +foreach ($file in $files) { + $content = Get-Content -Path $file.FullName -Raw + $matches = [regex]::Matches($content, 'name="productSkuId">\{([0-9a-fA-F\-]+)\}') + foreach ($match in $matches) { + $guids += $match.Groups[1].Value + } +} +$guids = $guids | Select-Object -Unique +$guidsString = $guids -join " " +$guidsString +:getactivationid: + +:: 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:#"=="" ( +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 + +set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') + +set winos= +for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) +echo "%winos%" | find /i "Windows" %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 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 + +: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_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 + +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 disabled services + +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=%%#")) +) + +:: 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=%%#") +) +) +) + +if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" + +if defined serv_cste ( +set error=1 +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" +) + +::======================================================================================================================================== + +:: 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 + +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 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 your system to fix this error." +set showfix=1 +) +) + +::======================================================================================================================================== + +:: 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.]" +) + + +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." +) +) + + +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.]" +) + + +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%] +) + + +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" +) +) + + +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 %osedition%==0 ( +call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" +) else ( + +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 Files [Not Found] [%osedition%]" +) +) +) + + +%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%" +) + + +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 %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%]" +) +) +) + +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]" +) + + +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]" +) + + +:: 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) 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 Checking SPP Interference 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% "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]" +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 +) + + +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" +) + + +:: 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% +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 +) +) + + +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!]" +) +) + + +if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +set error=1 +call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" +) + + +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!]" +) +) + + +:: 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 ( +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" +) +) + +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 +) +) + + +:: 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 +call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." +) + +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]::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: + +::======================================================================================================================================== + +: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 + +::======================================================================================================================================== + +:: 1st column = Activation ID +:: 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#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) +:: 9th column = Version name incase same Edition ID is used in different OS versions with different key +:: Separator = _ + + +:hwiddata + +set f= +for %%# in ( +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 ( +echo "!allapps! !altapplist!" | find /i "%%A" %nul1% && ( +if %%F==1 set notworking=1 +set key=%%B +) +) + +REM Generate ticket + +if %1==ticket if "%key%"=="%%B" ( +set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;PKeyIID=465145217131314304264339481117862266242033457260311819664735280;$([char]0)" +for /f "tokens=* delims=" %%i in ('%psc% [conv%f%ert]::ToBas%f%e64String([Text.En%f%coding]::Uni%f%code.GetBytes("""!string!"""^)^)') do set "encoded=%%i" +echo "!encoded!" | find "AAAA" %nul1% || exit /b + +1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z%%E=" >"%tdir%\GenuineTicket" +) + +) +) +exit /b + +::======================================================================================================================================== + +:: Below code is used to get alternate edition name and key if current edition doesn't support HWID activation + +:: 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 HWID Key +:: 6th column = Alternate Edition Name +:: Separator = _ + + +:hwidfallback + +set notfoundaltactID= +if %_NoEditionChange%==1 exit /b + +for %%# in ( +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 "!allapps! !altapplist!" | find /i "%%C" %nul1% && ( +echo "!allapps!" | find /i "%%D" %nul1% && ( +set altkey=%%E +set altedition=%%F +) || ( +set altedition=%%F +set notfoundaltactID=1 +) +) +) +) +exit /b + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:OhookActivation + +:: To activate Office with Ohook activation, run the script with "/Ohook" parameter or change 0 to 1 in below line +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 + +:: If value is changed in above lines or parameter is used then script will run in unattended mode + +::======================================================================================================================================== + +cls +color 07 +title Ohook Activation %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"=="/Ohook" set _act=1 +if /i "%%A"=="/Ohook-Uninstall" set _rem=1 +if /i "%%A"=="-el" set _elev=1 +) +) + +for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=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 +) + +::======================================================================================================================================== + +if %_rem%==1 goto :oh_uninstall + +:oh_menu + +if %_unattended%==0 ( +cls +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 +echo: +echo [2] Uninstall Ohook +echo ____________________________________________ +echo: +echo [3] Download Office +echo: +echo [0] %_exitmsg% +echo ____________________________________________________________ +echo: +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 &goto :oh_menu +if !_el!==2 goto :oh_uninstall +if !_el!==1 goto :oh_menu2 +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 + +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_product +call :dk_sppissue + +::======================================================================================================================================== + +set error= + +cls +echo: +call :dk_showosinfo + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + +set officeact=1 +call :dk_errorcheck + +:: Check unsupported office versions + +set o14msi= +set o14c2r= +set o16uwp= + +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office +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=Office 2010 MSI ) +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=Office 2010 MSI ) +%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 + +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP + +if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +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 + +call :oh_getpath + +sc query ClickToRunSvc %nul% +set error1=%errorlevel% + +if defined o16c2r if %error1% EQU 1060 ( +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" +set o16c2r= +set error=1 +) + +sc query OfficeSvc %nul% +set error2=%errorlevel% + +if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" +set o15c2r= +set error=1 +) + +if "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +set error=1 +echo: +if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +call :dk_color %Red% "Checking Supported Office Install [Not Found]" +) else ( +call :dk_color %Red% "Checking Installed Office [Not Found]" +) + +if defined ohub ( +echo: +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 the below URL and then try again." +echo: +set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto dk_done +) + +set multioffice= +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 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 :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") +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 ( +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" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) + +echo: +echo Activating Office... [C2R ^| %_version% ^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :starto16c2r +) + +call :oh_fixprids +call :oh_process +call :oh_hookinstall + +::======================================================================================================================================== + +:starto16c2r + +:: Process Office 16.0 C2R + +if not defined o16c2r goto :startmsi + +call :oh_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 ") +) +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" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) + +echo: +echo Activating 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 :startmsi +) + +call :oh_fixprids +call :oh_process +call :oh_hookinstall + +::======================================================================================================================================== + +:: 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 _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.]" +) +) + +::======================================================================================================================================== + +:: 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 "%kmskey%" /f /reg:32 %nul% +reg add "%kmskey%" /f /v KeyManagementServiceName /t REG_SZ /d "10.0.0.10" /reg:32 %nul% +) +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] +) +) + +::======================================================================================================================================== + +:startmsi + +if defined o15msi call :oh_processmsi 15 %o15msi_reg% +if defined o16msi call :oh_processmsi 16 %o16msi_reg% + +::======================================================================================================================================== + +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: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +goto :dk_done + +::======================================================================================================================================== + +:oh_uninstall + +cls +if not defined terminal mode 99, 32 +title Uninstall Ohook Activation %masver% + +set _present= +set _unerror= +call :oh_reset +call :oh_getpath + +echo: +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")) +if defined o15c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_15CHook=%%b\root\vfs")) +if defined o16msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_16MHook=%%b")) +if defined o15msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_15MHook=%%b")) + +if defined _16CHook (if exist "%_16CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\System\sppc*dll" & if exist "%_16CHook%\System\sppc*dll" set _unerror=1)) +if defined _16CHook (if exist "%_16CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\SystemX86\sppc*dll" & if exist "%_16CHook%\SystemX86\sppc*dll" set _unerror=1)) +if defined _15CHook (if exist "%_15CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\System\sppc*dll" & if exist "%_15CHook%\System\sppc*dll" set _unerror=1)) +if defined _15CHook (if exist "%_15CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\SystemX86\sppc*dll" & if exist "%_15CHook%\SystemX86\sppc*dll" set _unerror=1)) +if defined _16MHook (if exist "%_16MHook%sppc*dll" (set _present=1& del /s /f /q "%_16MHook%sppc*dll" & if exist "%_16MHook%sppc*dll" set _unerror=1)) +if defined _15MHook (if exist "%_15MHook%sppc*dll" (set _present=1& del /s /f /q "%_15MHook%sppc*dll" & if exist "%_15MHook%sppc*dll" set _unerror=1)) + +for %%# in (15 16) do ( +for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( +if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" (set _present=1& del /s /f /q "%%~A\Microsoft Office\Office%%#\sppc*dll" & if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set _unerror=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 _present=1& del /s /f /q "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" & if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set _unerror=1) +) +) +) + +reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( +echo: +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 + +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% +) +) +) +) + +set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" +reg query "%kmskey%" %nul% && ( +echo: +echo Deleting - Registry keys for preventing non-genuine banner +reg delete "%kmskey%" /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. +) else ( +if defined _unerror ( +call :dk_color %Red% "Failed to uninstall Ohook activation." +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, then restart your system and try again." +) else ( +call :dk_color %Blue% "Restart your system and try again." +) +) else ( +call :dk_color %Green% "Successfully uninstalled Ohook activation." +) +) +echo __________________________________________________________________________________________ + +goto :dk_done + +::======================================================================================================================================== + +:oh_reset + +set key= +set _oRoot= +set _oArch= +set _oIds= +set _oLPath= +set _hookPath= +set _hook= +set _sppcPath= +set _actid= +set _prod= +set _lic= +set _arr= +set _prids= +set _config= +set _version= +set _License= +set _oBranding= +exit /b + +::======================================================================================================================================== + +:oh_getpath + +set o16c2r= +set o15c2r= +set o16msi= +set o15msi= + +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) + +exit /b + +::======================================================================================================================================== + +:: 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") + +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 add %_prids% /t REG_SZ /d "%%#" /f %nul1% +) +) + +exit /b + +::======================================================================================================================================== + +:oh_installlic + +if not defined _oLPath exit /b + +if %oVer%==16 ( +"!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% +) else ( +"!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% +) + +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b + +:: Fallback to manual method to install licenses incase integrator.exe is not working + +set _License=%_License:XVolume=XC2RVL_% + +set _License=%_License:O365EduCloudRetail=O365EduCloudEDUR_% + +set _License=%_License:ProjectProRetail=ProjectProO365R_% +set _License=%_License:ProjectStdRetail=ProjectStdO365R_% +set _License=%_License:VisioProRetail=VisioProO365R_% +set _License=%_License:VisioStdRetail=VisioStdO365R_% + +if defined _preview set _License=%_License:Volume=PreviewVL_% + +set _License=%_License:Retail=R_% +set _License=%_License:Volume=VL_% + +for %%# in ("!_oLPath!\client-issuance-*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) + +for %%# in ("!_oLPath!\%_License%*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"!_oLPath!\%%~nx#"") else (set "_arr="!_oLPath!\%%~nx#"") +) + +%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]" +) + +exit /b + +::======================================================================================================================================== + +:oh_hookinstall + +set ierror= +set hasherror= + +if %_hook%==sppc32.dll set offset=2564 +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=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 ( +if not defined ierror set ierror=mklink +) + +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] +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% "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, then restart your system and try again." +) else ( +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system 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: +) + +if not defined exhook if not defined ierror ( +if defined hasherror ( +set error=1 +set ierror=1 +call :dk_color %Red% "Modifying Hash of Custom %_hook% [Failed]" +) else ( +echo Modifying Hash of Custom %_hook% [Successful] +) +) + +exit /b + +::======================================================================================================================================== + +:oh_process + +for %%# in (%_oIds%) do ( + +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= +set _License=%%# + +echo %%# | find /i "2024" %nul% && ( +if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview +) +set _prod=%%#!_preview! + +call :ohookdata getinfo !_prod! + +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 the latest version of MAS." +set fixes=%fixes% %mas% +call :dk_color %_Yellow% "%mas%" +) +) +) + +:: 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 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 + +::======================================================================================================================================== + +:oh_processmsi + +:: Process Office MSI Version + +call :oh_reset +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" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) + +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... [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...]" +exit /b +) + +call :oh_process +call :oh_hookinstall + +exit /b + +::======================================================================================================================================== + +: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 + +:: Below IDs are not checked for permanent activation +set _sortIds=!_sortIds:PreviewVL_=Volume_! +set _sortIds=!_sortIds:PreInstallR_=Retail_! + +::======================================================================================================================================== + +:oh_clearblock + +:: 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 _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 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%]" +) + +::========================== + +:: 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% "Restart your system 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% "Restart your system 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 +[void]$TypeBuilder.DefinePInvokeMethod('MapFileAndCheckSum', 'imagehlp.dll', 'Public, Static', [Reflection.CallingConventions]::Standard, [int], @([string], [int].MakeByRefType(), [int].MakeByRefType()), [Runtime.InteropServices.CallingConvention]::Winapi, [Runtime.InteropServices.CharSet]::Auto) + +# Create the type +$Imagehlp = $TypeBuilder.CreateType() + +# Offset information +$timestampOffset = 136 +$exportTimestampOffset = $offset +$checkSumOffset = 216 + +# Calculate timestamp +$currentTimestamp = [DateTime]::UtcNow +$unixTimestamp = [int]($currentTimestamp - (Get-Date -Year 1970 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0)).TotalSeconds + +# Change timestamps +$Writer.BaseStream.Position = $timestampOffset +$Writer.Write($unixTimestamp) + +$Writer.BaseStream.Position = $exportTimestampOffset +$Writer.Write($unixTimestamp) + +$Writer.Flush() + +# Write the current state of the MemoryStream to a temporary file +$tempFilePath = [System.IO.Path]::Combine($env:windir, "Temp", [System.IO.Path]::GetRandomFileName()) +[System.IO.File]::WriteAllBytes($tempFilePath, $MemoryStream.ToArray()) + +# Update hash using the temporary file +[int]$HeaderSum = 0 +[int]$CheckSum = 0 +[void]$Imagehlp::MapFileAndCheckSum($tempFilePath, [ref]$HeaderSum, [ref]$CheckSum) + +# If the checksums don't match, update the checksum in the MemoryStream +if ($HeaderSum -ne $CheckSum) { + $Writer.BaseStream.Position = $checkSumOffset + $Writer.Write($CheckSum) + $Writer.Flush() +} else { + Write-host Error found +} + +# Delete the temporary file +Remove-Item -Path $tempFilePath -Force + +# Get the modified bytes +$modifiedBytes = $MemoryStream.ToArray() + +# Write the modified bytes to the final file +[System.IO.File]::WriteAllBytes($PePath, $modifiedBytes) + +[void]$Imagehlp::MapFileAndCheckSum($PePath, [ref]$HeaderSum, [ref]$CheckSum) +if ($HeaderSum -ne $CheckSum) { + Write-host Error found +} + +$MemoryStream.Close() +:hexedit: + +::======================================================================================================================================== +:: +:: This below blocks of text is encoded in base64 format +:: The blocks in labels "sppc32.dll" and "sppc64.dll" contains below files +:: +:: 09865ea5993215965e8f27a74b8a41d15fd0f60f5f404cb7a8b3c7757acdab02 *sppc32.dll +:: 393a1fa26deb3663854e41f2b687c188a9eacd87b23f17ea09422c4715cb5a9f *sppc64.dll +:: +:: 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 +:: +:: stackoverflow.com/a/35335273 +:: Here you can check how to extract sppc.dll files from base64 +:: +:: For any further question, feel free to contact us on mass grave[.]dev/contactus +:: +::======================================================================================================================================== +:: +:: 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--------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----------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------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---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--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- +Bw-I--k-Cg-L--w-DQ-O--8-E--R-BI-Ew-U-BU-Fg-X-Bg-GQ-_-Bs-H--d-B4-Hw-g-CE-Ig-j-CQ-JQ-m-Cc-K--p-Co-Kw-s-C0-Lg-v-D--MQ-y-DM-N--1-DY-Nw-4-Dk-Og-7-Dw-PQ-+-D8-Q-BB-EI-c3BwYy5kbGw-U1BQQ1MuU0xDYWxsU2VydmVy-FNM +Q2FsbFNlcnZlcgBTUFBDUy5TTENsb3Nl-FNMQ2xvc2U-U1BQQ1MuU0xDb25zdW1lUmln_HQ-U0xDb25zdW1lUmln_HQ-U1BQQ1MuU0xEZXBvc2l0TWlncmF0_W9uQmxvYgBTTERlcG9z_XRN_WdyYXRpb25CbG9i-FNQUENTLlNMRGVwb3NpdE9mZmxpbmVDb25m_XJt +YXRpb25JZ-BTTERlcG9z_XRPZmZs_W5lQ29uZmlybWF0_W9uSWQ-U1BQQ1MuU0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklkRXg-U0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklkRXg-U1BQQ1MuU0xEZXBvc2l0U3RvcmVUb2tlbgBTTERlcG9z_XRTdG9y +ZVRv_2Vu-FNQUENTLlNMRmlyZUV2ZW50-FNMRmlyZUV2ZW50-FNQUENTLlNMR2F0_GVyTWlncmF0_W9uQmxvYgBTTEdhdGhlck1pZ3JhdGlvbkJsb2I-U1BQQ1MuU0xHYXRoZXJN_WdyYXRpb25CbG9iRXg-U0xHYXRoZXJN_WdyYXRpb25CbG9iRXg-U1BQQ1MuU0xH +ZW5lcmF0ZU9mZmxpbmVJbnN0YWxsYXRpb25JZ-BTTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklk-FNQUENTLlNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWRFe-BTTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklkRXg-U1BQQ1MuU0xHZXRBY3Rp +dmVM_WNlbnNlSW5mbwBTTEdldEFjdGl2ZUxpY2Vuc2VJbmZv-FNQUENTLlNMR2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbgBTTEdldEFwcGxpY2F0_W9uSW5mb3JtYXRpb24-U1BQQ1MuU0xHZXRBcHBs_WNhdGlvblBvbGljeQBTTEdldEFwcGxpY2F0_W9uUG9s_WN5 +-FNQUENTLlNMR2V0QXV0_GVudGljYXRpb25SZXN1bHQ-U0xHZXRBdXRoZW50_WNhdGlvblJlc3Vsd-BTUFBDUy5TTEdldEVuY3J5cHRlZFBJREV4-FNMR2V0RW5jcnlwdGVkUElERXg-U1BQQ1MuU0xHZXRHZW51_W5lSW5mb3JtYXRpb24-U0xHZXRHZW51_W5lSW5m +b3JtYXRpb24-U1BQQ1MuU0xHZXRJbnN0YWxsZWRQcm9kdWN0S2V5SWRz-FNMR2V0SW5zdGFsbGVkUHJvZHVjdEtleUlkcwBTUFBDUy5TTEdldExpY2Vuc2U-U0xHZXRM_WNlbnNl-FNQUENTLlNMR2V0TGljZW5zZUZpbGVJZ-BTTEdldExpY2Vuc2VG_WxlSWQ-U1BQ +Q1MuU0xHZXRM_WNlbnNlSW5mb3JtYXRpb24-U0xHZXRM_WNlbnNlSW5mb3JtYXRpb24-U0xHZXRM_WNlbnNpbmdTdGF0dXNJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFBLZXlJZ-BTTEdldFBLZXlJZ-BTUFBDUy5TTEdldFBLZXlJbmZvcm1hdGlvbgBTTEdldFBLZXlJ +bmZvcm1hdGlvbgBTUFBDUy5TTEdldFBvbGljeUluZm9ybWF0_W9u-FNMR2V0UG9s_WN5SW5mb3JtYXRpb24-U1BQQ1MuU0xHZXRQb2xpY3lJbmZvcm1hdGlvbkRXT1JE-FNMR2V0UG9s_WN5SW5mb3JtYXRpb25EV09SR-BTUFBDUy5TTEdldFByb2R1Y3RT_3VJbmZv +cm1hdGlvbgBTTEdldFByb2R1Y3RT_3VJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFNMSURM_XN0-FNMR2V0U0xJRExpc3Q-U1BQQ1MuU0xHZXRTZXJ2_WNlSW5mb3JtYXRpb24-U0xHZXRTZXJ2_WNlSW5mb3JtYXRpb24-U1BQQ1MuU0xJbnN0YWxsTGljZW5zZQBTTElu +c3RhbGxM_WNlbnNl-FNQUENTLlNMSW5zdGFsbFByb29mT2ZQdXJj_GFzZQBTTEluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U1BQQ1MuU0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNlRXg-U0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNlRXg-U1BQQ1MuU0xJc0dlbnVpbmVMb2Nh +bEV4-FNMSXNHZW51_W5lTG9jYWxFe-BTUFBDUy5TTExvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNMTG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U1BQQ1MuU0xPcGVu-FNMT3BlbgBTUFBDUy5TTFBlcnNpc3RBcHBs_WNhdGlvblBvbGlj_WVz-FNMUGVyc2lzdEFwcGxp +Y2F0_W9uUG9s_WNpZXM-U1BQQ1MuU0xQZXJz_XN0UlRTUGF5bG9hZE92ZXJy_WRl-FNMUGVyc2lzdFJUU1BheWxvYWRPdmVycmlkZQBTUFBDUy5TTFJlQXJt-FNMUmVBcm0-U1BQQ1MuU0xSZWdpc3RlckV2ZW50-FNMUmVn_XN0ZXJFdmVud-BTUFBDUy5TTFJlZ2lz +dGVyUGx1Z2lu-FNMUmVn_XN0ZXJQbHVn_W4-U1BQQ1MuU0xTZXRBdXRoZW50_WNhdGlvbkRhdGE-U0xTZXRBdXRoZW50_WNhdGlvbkRhdGE-U1BQQ1MuU0xTZXRDdXJyZW50UHJvZHVjdEtleQBTTFNldEN1cnJlbnRQcm9kdWN0S2V5-FNQUENTLlNMU2V0R2VudWlu +ZUluZm9ybWF0_W9u-FNMU2V0R2VudWluZUluZm9ybWF0_W9u-FNQUENTLlNMVW5pbnN0YWxsTGljZW5zZQBTTFVu_W5zdGFsbExpY2Vuc2U-U1BQQ1MuU0xVbmluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U0xVbmluc3RhbGxQcm9vZk9mUHVyY2hhc2U-U1BQQ1MuU0xV +bmxvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNMVW5sb2FkQXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5TTFVucmVn_XN0ZXJFdmVud-BTTFVucmVn_XN0ZXJFdmVud-BTUFBDUy5TTFVucmVn_XN0ZXJQbHVn_W4-U0xVbnJlZ2lzdGVyUGx1Z2lu-FNQUENTLlNMcEF1 +dGhlbnRpY2F0ZUdlbnVpbmVU_WNrZXRSZXNwb25zZQBTTHBBdXRoZW50_WNhdGVHZW51_W5lVGlj_2V0UmVzcG9uc2U-U1BQQ1MuU0xwQmVn_W5HZW51_W5lVGlj_2V0VHJhbnNhY3Rpb24-U0xwQmVn_W5HZW51_W5lVGlj_2V0VHJhbnNhY3Rpb24-U1BQQ1MuU0xw +Q2xlYXJBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTTHBDbGVhckFjdGl2YXRpb25JblByb2dyZXNz-FNQUENTLlNMcERlcG9z_XREb3dubGV2ZWxHZW51_W5lVGlj_2V0-FNMcERlcG9z_XREb3dubGV2ZWxHZW51_W5lVGlj_2V0-FNQUENTLlNMcERlcG9z_XRUb2tlbkFj +dGl2YXRpb25SZXNwb25zZQBTTHBEZXBvc2l0VG9rZW5BY3RpdmF0_W9uUmVzcG9uc2U-U1BQQ1MuU0xwR2VuZXJhdGVUb2tlbkFjdGl2YXRpb25D_GFsbGVuZ2U-U0xwR2VuZXJhdGVUb2tlbkFjdGl2YXRpb25D_GFsbGVuZ2U-U1BQQ1MuU0xwR2V0R2VudWluZUJs +b2I-U0xwR2V0R2VudWluZUJsb2I-U1BQQ1MuU0xwR2V0R2VudWluZUxvY2Fs-FNMcEdldEdlbnVpbmVMb2Nhb-BTUFBDUy5TTHBHZXRM_WNlbnNlQWNxdWlz_XRpb25JbmZv-FNMcEdldExpY2Vuc2VBY3F1_XNpdGlvbkluZm8-U1BQQ1MuU0xwR2V0TVNQ_WRJbmZv +cm1hdGlvbgBTTHBHZXRNU1BpZEluZm9ybWF0_W9u-FNQUENTLlNMcEdldE1hY2hpbmVVR1VJR-BTTHBHZXRNYWNo_W5lVUdVSUQ-U1BQQ1MuU0xwR2V0VG9rZW5BY3RpdmF0_W9uR3JhbnRJbmZv-FNMcEdldFRv_2VuQWN0_XZhdGlvbkdyYW50SW5mbwBTUFBDUy5T +THBJQUFjdGl2YXRlUHJvZHVjd-BTTHBJQUFjdGl2YXRlUHJvZHVjd-BTUFBDUy5TTHBJc0N1cnJlbnRJbnN0YWxsZWRQcm9kdWN0S2V5RGVmYXVsdEtleQBTTHBJc0N1cnJlbnRJbnN0YWxsZWRQcm9kdWN0S2V5RGVmYXVsdEtleQBTUFBDUy5TTHBQcm9jZXNzVk1Q +_XBlTWVzc2FnZQBTTHBQcm9jZXNzVk1Q_XBlTWVzc2FnZQBTUFBDUy5TTHBTZXRBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTTHBTZXRBY3RpdmF0_W9uSW5Qcm9ncmVzcwBTUFBDUy5TTHBUcmlnZ2VyU2VydmljZVdvcmtlcgBTTHBUcmlnZ2VyU2VydmljZVdvcmtlcgBT +UFBDUy5TTHBWTEFjdGl2YXRlUHJvZHVjd-BTTHBWTEFjdGl2YXRlUHJvZHVjd------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------FBg-------------Ohg--BsY---XG-------------- ++G---Hhg--BkY--------------MYQ--gG------------------------------iG---Kpg--------yG--------DUY--------Ihg--CqY--------Mhg--------1G---------C-FNMR2V0TGljZW5z_W5nU3RhdHVzSW5mb3JtYXRpb24--QBTTEdldFByb2R1 +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--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-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-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----MzBIMGkwdjBSMVox------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------- +:sppc32.dll: + +:======================================================================================================================================== + +:: 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--------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--------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------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---iB----B---CIE---ExE---x----TEQ--GRE--CB------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------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--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- +Mw-0-DU-Ng-3-Dg-OQ-6-Ds-P--9-D4-PwB--EE-QgBzcHBjLmRsb-BTUFBDUy5TTENhbGxTZXJ2ZXI-U0xDYWxsU2VydmVy-FNQUENTLlNMQ2xvc2U-U0xDbG9zZQBTUFBDUy5TTENvbnN1bWVS_Wdod-BTTENvbnN1bWVS_Wdod-BTUFBDUy5TTERlcG9z_XRN_Wdy +YXRpb25CbG9i-FNMRGVwb3NpdE1pZ3JhdGlvbkJsb2I-U1BQQ1MuU0xEZXBvc2l0T2ZmbGluZUNvbmZpcm1hdGlvbklk-FNMRGVwb3NpdE9mZmxpbmVDb25m_XJtYXRpb25JZ-BTUFBDUy5TTERlcG9z_XRPZmZs_W5lQ29uZmlybWF0_W9uSWRFe-BTTERlcG9z_XRP +ZmZs_W5lQ29uZmlybWF0_W9uSWRFe-BTUFBDUy5TTERlcG9z_XRTdG9yZVRv_2Vu-FNMRGVwb3NpdFN0b3JlVG9rZW4-U1BQQ1MuU0xG_XJlRXZlbnQ-U0xG_XJlRXZlbnQ-U1BQQ1MuU0xHYXRoZXJN_WdyYXRpb25CbG9i-FNMR2F0_GVyTWlncmF0_W9uQmxvYgBT +UFBDUy5TTEdhdGhlck1pZ3JhdGlvbkJsb2JFe-BTTEdhdGhlck1pZ3JhdGlvbkJsb2JFe-BTUFBDUy5TTEdlbmVyYXRlT2ZmbGluZUluc3RhbGxhdGlvbklk-FNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWQ-U1BQQ1MuU0xHZW5lcmF0ZU9mZmxpbmVJbnN0 +YWxsYXRpb25JZEV4-FNMR2VuZXJhdGVPZmZs_W5lSW5zdGFsbGF0_W9uSWRFe-BTUFBDUy5TTEdldEFjdGl2ZUxpY2Vuc2VJbmZv-FNMR2V0QWN0_XZlTGljZW5zZUluZm8-U1BQQ1MuU0xHZXRBcHBs_WNhdGlvbkluZm9ybWF0_W9u-FNMR2V0QXBwbGljYXRpb25J +bmZvcm1hdGlvbgBTUFBDUy5TTEdldEFwcGxpY2F0_W9uUG9s_WN5-FNMR2V0QXBwbGljYXRpb25Qb2xpY3k-U1BQQ1MuU0xHZXRBdXRoZW50_WNhdGlvblJlc3Vsd-BTTEdldEF1dGhlbnRpY2F0_W9uUmVzdWx0-FNQUENTLlNMR2V0RW5jcnlwdGVkUElERXg-U0xH +ZXRFbmNyeXB0ZWRQSURFe-BTUFBDUy5TTEdldEdlbnVpbmVJbmZvcm1hdGlvbgBTTEdldEdlbnVpbmVJbmZvcm1hdGlvbgBTUFBDUy5TTEdldEluc3RhbGxlZFByb2R1Y3RLZXlJZHM-U0xHZXRJbnN0YWxsZWRQcm9kdWN0S2V5SWRz-FNQUENTLlNMR2V0TGljZW5z +ZQBTTEdldExpY2Vuc2U-U1BQQ1MuU0xHZXRM_WNlbnNlRmlsZUlk-FNMR2V0TGljZW5zZUZpbGVJZ-BTUFBDUy5TTEdldExpY2Vuc2VJbmZvcm1hdGlvbgBTTEdldExpY2Vuc2VJbmZvcm1hdGlvbgBTTEdldExpY2Vuc2luZ1N0YXR1c0luZm9ybWF0_W9u-FNQUENT +LlNMR2V0UEtleUlk-FNMR2V0UEtleUlk-FNQUENTLlNMR2V0UEtleUluZm9ybWF0_W9u-FNMR2V0UEtleUluZm9ybWF0_W9u-FNQUENTLlNMR2V0UG9s_WN5SW5mb3JtYXRpb24-U0xHZXRQb2xpY3lJbmZvcm1hdGlvbgBTUFBDUy5TTEdldFBvbGljeUluZm9ybWF0 +_W9uRFdPUkQ-U0xHZXRQb2xpY3lJbmZvcm1hdGlvbkRXT1JE-FNQUENTLlNMR2V0UHJvZHVjdFNrdUluZm9ybWF0_W9u-FNMR2V0UHJvZHVjdFNrdUluZm9ybWF0_W9u-FNQUENTLlNMR2V0U0xJRExpc3Q-U0xHZXRTTElETGlzd-BTUFBDUy5TTEdldFNlcnZpY2VJ +bmZvcm1hdGlvbgBTTEdldFNlcnZpY2VJbmZvcm1hdGlvbgBTUFBDUy5TTEluc3RhbGxM_WNlbnNl-FNMSW5zdGFsbExpY2Vuc2U-U1BQQ1MuU0xJbnN0YWxsUHJvb2ZPZlB1cmNoYXNl-FNMSW5zdGFsbFByb29mT2ZQdXJj_GFzZQBTUFBDUy5TTEluc3RhbGxQcm9v +Zk9mUHVyY2hhc2VFe-BTTEluc3RhbGxQcm9vZk9mUHVyY2hhc2VFe-BTUFBDUy5TTElzR2VudWluZUxvY2FsRXg-U0xJc0dlbnVpbmVMb2NhbEV4-FNQUENTLlNMTG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xMb2FkQXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5T +TE9wZW4-U0xPcGVu-FNQUENTLlNMUGVyc2lzdEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xQZXJz_XN0QXBwbGljYXRpb25Qb2xpY2llcwBTUFBDUy5TTFBlcnNpc3RSVFNQYXlsb2FkT3ZlcnJpZGU-U0xQZXJz_XN0UlRTUGF5bG9hZE92ZXJy_WRl-FNQUENTLlNMUmVB +cm0-U0xSZUFybQBTUFBDUy5TTFJlZ2lzdGVyRXZlbnQ-U0xSZWdpc3RlckV2ZW50-FNQUENTLlNMUmVn_XN0ZXJQbHVn_W4-U0xSZWdpc3RlclBsdWdpbgBTUFBDUy5TTFNldEF1dGhlbnRpY2F0_W9uRGF0YQBTTFNldEF1dGhlbnRpY2F0_W9uRGF0YQBTUFBDUy5T +TFNldEN1cnJlbnRQcm9kdWN0S2V5-FNMU2V0Q3VycmVudFByb2R1Y3RLZXk-U1BQQ1MuU0xTZXRHZW51_W5lSW5mb3JtYXRpb24-U0xTZXRHZW51_W5lSW5mb3JtYXRpb24-U1BQQ1MuU0xVbmluc3RhbGxM_WNlbnNl-FNMVW5pbnN0YWxsTGljZW5zZQBTUFBDUy5T +TFVu_W5zdGFsbFByb29mT2ZQdXJj_GFzZQBTTFVu_W5zdGFsbFByb29mT2ZQdXJj_GFzZQBTUFBDUy5TTFVubG9hZEFwcGxpY2F0_W9uUG9s_WNpZXM-U0xVbmxvYWRBcHBs_WNhdGlvblBvbGlj_WVz-FNQUENTLlNMVW5yZWdpc3RlckV2ZW50-FNMVW5yZWdpc3Rl +ckV2ZW50-FNQUENTLlNMVW5yZWdpc3RlclBsdWdpbgBTTFVucmVn_XN0ZXJQbHVn_W4-U1BQQ1MuU0xwQXV0_GVudGljYXRlR2VudWluZVRpY2tldFJlc3BvbnNl-FNMcEF1dGhlbnRpY2F0ZUdlbnVpbmVU_WNrZXRSZXNwb25zZQBTUFBDUy5TTHBCZWdpbkdlbnVp +bmVU_WNrZXRUcmFuc2FjdGlvbgBTTHBCZWdpbkdlbnVpbmVU_WNrZXRUcmFuc2FjdGlvbgBTUFBDUy5TTHBDbGVhckFjdGl2YXRpb25JblByb2dyZXNz-FNMcENsZWFyQWN0_XZhdGlvbkluUHJvZ3Jlc3M-U1BQQ1MuU0xwRGVwb3NpdERvd25sZXZlbEdlbnVpbmVU +_WNrZXQ-U0xwRGVwb3NpdERvd25sZXZlbEdlbnVpbmVU_WNrZXQ-U1BQQ1MuU0xwRGVwb3NpdFRv_2VuQWN0_XZhdGlvblJlc3BvbnNl-FNMcERlcG9z_XRUb2tlbkFjdGl2YXRpb25SZXNwb25zZQBTUFBDUy5TTHBHZW5lcmF0ZVRv_2VuQWN0_XZhdGlvbkNoYWxs +ZW5nZQBTTHBHZW5lcmF0ZVRv_2VuQWN0_XZhdGlvbkNoYWxsZW5nZQBTUFBDUy5TTHBHZXRHZW51_W5lQmxvYgBTTHBHZXRHZW51_W5lQmxvYgBTUFBDUy5TTHBHZXRHZW51_W5lTG9jYWw-U0xwR2V0R2VudWluZUxvY2Fs-FNQUENTLlNMcEdldExpY2Vuc2VBY3F1 +_XNpdGlvbkluZm8-U0xwR2V0TGljZW5zZUFjcXVpc2l0_W9uSW5mbwBTUFBDUy5TTHBHZXRNU1BpZEluZm9ybWF0_W9u-FNMcEdldE1TUGlkSW5mb3JtYXRpb24-U1BQQ1MuU0xwR2V0TWFj_GluZVVHVUlE-FNMcEdldE1hY2hpbmVVR1VJR-BTUFBDUy5TTHBHZXRU +b2tlbkFjdGl2YXRpb25HcmFudEluZm8-U0xwR2V0VG9rZW5BY3RpdmF0_W9uR3JhbnRJbmZv-FNQUENTLlNMcElBQWN0_XZhdGVQcm9kdWN0-FNMcElBQWN0_XZhdGVQcm9kdWN0-FNQUENTLlNMcElzQ3VycmVudEluc3RhbGxlZFByb2R1Y3RLZXlEZWZhdWx0S2V5 +-FNMcElzQ3VycmVudEluc3RhbGxlZFByb2R1Y3RLZXlEZWZhdWx0S2V5-FNQUENTLlNMcFByb2Nlc3NWTVBpcGVNZXNzYWdl-FNMcFByb2Nlc3NWTVBpcGVNZXNzYWdl-FNQUENTLlNMcFNldEFjdGl2YXRpb25JblByb2dyZXNz-FNMcFNldEFjdGl2YXRpb25JblBy +b2dyZXNz-FNQUENTLlNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNMcFRy_WdnZXJTZXJ2_WNlV29y_2Vy-FNQUENTLlNMcFZMQWN0_XZhdGVQcm9kdWN0-FNMcFZMQWN0_XZhdGVQcm9kdWN0-------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------UH--------------IHE--Ihw--Boc--------------wcQ--oH---Hhw-------------ERx--Cwc-----------------------------D-c--------OJw--------------------cQ------------------ +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-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-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: + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:KMS38Activation + +:: To activate, run the script with "/KMS38" parameter or change 0 to 1 in below line +set _act=0 + +:: To remove KMS38 protection, run the script with /KMS38-RemoveProtection parameter or change 0 to 1 in below line +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 + +:: If value is changed in above lines or parameter is used then script will run in unattended mode + +::======================================================================================================================================== + +cls +color 07 +title KMS38 Activation %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"=="/KMS38" set _act=1 +if /i "%%A"=="/KMS38-RemoveProtection" set _rem=1 +if /i "%%A"=="/KMS38-NoEditionChange" set _NoEditionChange=1 +if /i "%%A"=="-el" set _elev=1 +) +) + +for %%A in (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) + +::======================================================================================================================================== + +set _k38= +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 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 +) + +::======================================================================================================================================== + +if %_rem%==1 goto :k_uninstall + +:k_menu + +if %_unattended%==0 ( +cls +if not defined terminal mode 76, 25 +title KMS38 Activation %masver% + +echo: +echo: +echo: +echo: +echo ____________________________________________________________ +echo: +echo [1] KMS38 Activation +echo ____________________________________________ +echo: +echo [2] Remove KM38 Protection +echo: +echo [0] %_exitmsg% +echo ____________________________________________________________ +echo: +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 +if !_el!==2 goto :k_uninstall +if !_el!==1 goto :k_menu2 +goto :k_menu +) + +::======================================================================================================================================== + +:k_menu2 + +cls +if not defined terminal ( +mode 110, 34 +if exist "%SysPath%\spp\store_test\" mode 134, 34 +) +title KMS38 Activation %masver% + +echo: +echo Initializing... +call :dk_chkmal + +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) + +if defined _fmiss ( +%eline% +echo [%_fmiss%] 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_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue + +::======================================================================================================================================== + +:: Check if system is permanently activated or not + +call :dk_checkperm +if defined _perm ( +cls +echo ___________________________________________________________________________________________ +echo: +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 Anyway [0] %_exitmsg% : " +if errorlevel 2 exit /b +) +cls + +::======================================================================================================================================== + +:: Check Evaluation version + +set _eval= +set _evalserv= + +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 _eval ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( +%eline% +echo [%winos% ^| %winbuild%] +if defined _evalserv ( +echo Server Evaluation cannot be activated. Convert it to full Server OS. +echo: +call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." +) else ( +echo Evaluation editions cannot be activated outside of their evaluation period. +echo: +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) +goto dk_done +) +) + +::======================================================================================================================================== + +:: Check clipup.exe for the detection and activation of server cor and acor editions + +if defined a_cor ( +if not exist "!_work!\clipup.exe" ( +%eline% +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. +set fixes=%fixes% %mas%kms38 +echo %mas%kms38 +goto dk_done +) +) + +::======================================================================================================================================== + +set error= + +cls +echo: +call :dk_showosinfo + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=ClipSVC sppsvc KeyIso Winmgmt" + +:: Client License Service (ClipSVC) +:: Software Protection +:: CNG Key Isolation +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + +:: Check if GVLK (KMS key) is already installed or not + +call :k_channel + +:: Detect Key + +set key= +set pkey= +set altkey= +set changekey= +set altedition= + +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 %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]" +) + +if not defined key if not defined _gvlk ( +%eline% +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +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 were not found in %SysPath%\spp\tokens\skus\ +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) +echo: +goto dk_done +) + +::======================================================================================================================================== + +:: Install key + +echo: +if defined changekey ( +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 %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 defined key ( +call :dk_inskey "[%key%]" +) + +::======================================================================================================================================== + +:: Check activation ID for setting specific KMS host + +set app= +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..." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :dk_done +) + +::======================================================================================================================================== + +:: Set specific KMS host to Local Host +:: By doing this, global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions + +echo: +%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])" +%nul% reg delete "HKLM\%specific_kms%" /f +) + +set k_error= +%nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" || set k_error=1 +%nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" || set k_error=1 + +if not defined k_error ( +echo Adding Specific KMS Host [LocalHost 127.0.0.2] [Successful] +) else ( +call :dk_color %Red% "Adding Specific KMS Host [LocalHost 127.0.0.2] [Failed]" +) + +::======================================================================================================================================== + +:: Copy clipup.exe to System32 directory to activate Server Cor/Acor editions + +if defined a_cor ( +set "_clipup=%systemroot%\System32\clipup.exe" +pushd "!_work!\" +copy /y /b "ClipUp.exe" "!_clipup!" %nul% +popd + +echo: +if exist "!_clipup!" ( +echo Copying clipup.exe File to [%systemroot%\System32\] [Successful] +) else ( +call :dk_color %Red% "Copying clipup.exe File to [%systemroot%\System32\] [Failed] Aborting..." +goto :k_final +) +) + +::======================================================================================================================================== + +:: Generate GenuineTicket.xml and apply +:: 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) + +set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" +if not exist "%tdir%\" md "%tdir%\" %nul% + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %nul% + +:: 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#manual-activation to see how it's generated + +set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA=" +set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA" +1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=%sessionId%;TimeStampClient=2022-10-11T12:00:00Z%signature%" >"%tdir%\GenuineTicket" + +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% + +if not exist "%tdir%\GenuineTicket.xml" ( +call :dk_color %Red% "Generating GenuineTicket.xml [Failed, aborting...]" +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +goto :k_final +) else ( +echo Generating GenuineTicket.xml [Successful] +) + +set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" + +:: Stop sppsvc + +%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] +) || ( +call :dk_color %Gray% "Stopping sppsvc Service [Failed]" +) + +%_xmlexist% ( +%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...]" +) +) + +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% +clipup -v -o + +set rebuildinfo= + +if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" +) + +%_xmlexist% ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" +) + +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( +set error=1 +set rebuildinfo=1 +call :dk_color %Red% "Checking Ticket Migration [Failed]" +) + +if not defined showfix if defined rebuildinfo ( +set showfix=1 +call :dk_color %Blue% "%_fixmsg%" +) + +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% + +::========================================================================================================================================== + +call :dk_product + +echo: +echo Activating... +echo: + +call :k_checkexp +if defined _k38 ( +call :k_actinfo +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 %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] +) else ( +call :dk_color %Red% "Applying SKU-ID Rearm [Failed]" +) +call :dk_refresh + +echo: +call :k_checkexp +if defined _k38 ( +call :k_actinfo +goto :k_final +) + +call :dk_color %Red% "Activation Failed" +if not defined error call :dk_color %Blue% "%_fixmsg%" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" + +::======================================================================================================================================== + +:k_final + +:: 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]" +) || ( +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" +%nul% reg delete "HKLM\%specific_kms%" /f +%nul% reg query "HKLM\%specific_kms%" && ( +echo Protect KMS38 From KMS [Successful] [Locked a Registry Key] +) || ( +call :dk_color %Red% "Protect KMS38 From KMS [Failed to Lock a Registry Key]" +) +) + +:: clipup.exe does not exist in server cor and acor editions by default, it was copied there with this script + +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]" +) else ( +echo Deleting Copied clipup.exe File [Successful] +) +) + +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 + +::======================================================================================================================================== + +:k_uninstall + +cls +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])" +%nul% reg delete "HKLM\%specific_kms%" /f +) + +echo: +%nul% reg query "HKLM\%specific_kms%" && ( +call :dk_color %Red% "Removing Specific KMS Host [Failed]" +) || ( +echo Removing Specific KMS Host [Successful] +) + +goto :dk_done + +::======================================================================================================================================== + +:: This code runs to protect/undo below registry key for KMS38 protection +:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f + +:: KMS38 protection stops 180 days KMS Activation from replacing KMS38 activation + +:regdel: +param ( + [switch]$protect +) + +$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') +$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value + +if($protect) { +$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny") +} else { +$ruleArgs = @("$Admin", "FullControl", "Allow") +} + +$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f' +$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'ChangePermissions') +$acl = $key.GetAccessControl() + +$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs) +$acl.ResetAccessRule($rule) +$key.SetAccessControl($acl) +:regdel: + +::======================================================================================================================================== + +:: Check KMS activation status + +:k_actinfo + +set xpr= +for /f "tokens=* delims=" %%# in ('%psc% "$([DateTime]::Now.addMinutes(%gpr%)).ToString('yyyy-MM-dd HH:mm:ss')" %nul6%') do set "xpr=%%#" +call :dk_color %Green% "%winos% is activated till !xpr!" +exit /b + +:: Check remaining KMS activation grace period + +:k_checkexp + +set gpr=0 +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 + +: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 Product Key from pkeyhelper.dll for future new editions +:: It works on Windows 10 1803 (17134) and later builds. + +:k_pkey + +call :dk_reflection + +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 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 + +:k_pkeychannel + +set k=%1 +set m=[Runtime.InteropServices.Marshal] +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); +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 +) +) +exit /b + +::======================================================================================================================================== + +:: 1st column = Activation ID +:: 2nd column = GVLK (Generic volume licensing key) +:: 3rd column = SKU ID +:: 4th column = WMI Edition ID (For reference only) +:: 5th column = Build Branch name incase same Edition ID is used in different OS versions with different key (For reference only) +:: Separator = "_" + +:kms38data + +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 +:: Old Preview editions from build 14393 - Generated keys +43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise +d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard +ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter +e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb +6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN +ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional +34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN +9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA +c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry +4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE +b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM +4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN +5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific +2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage +903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core +cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC +c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected +fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent +86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN +687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN +5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage +a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific +5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro +af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education +075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN +2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS +11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN +aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS +9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( +if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B +) +) +exit /b + +::======================================================================================================================================== + +:: Below code is used to get alternate edition name and key if current edition doesn't support KMS38 activation + +:: 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 + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:KMSActivation + +:: 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= + +:: Script will run in unattended mode if parameters are used OR value is changed in above lines FOR activation or uninstall. + +::======================================================================================================================================== + +cls +color 07 +set KS=K%blank%MS +title Online %KS% Activation %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) +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%%") +) + +for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) do (if "%%A"=="1" set _unattended=1) + +::======================================================================================================================================== + +if %_uni%==1 goto :ks_uninstall + +:ks_menu + +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% + +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]" +) +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: +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! + +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 +) + +::======================================================================================================================================== + +:ks_start + +cls +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 +) + +::======================================================================================================================================== + +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 + +::======================================================================================================================================== + +set error= + +cls +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 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 ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Online %KS% Activation." +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + +call :_taskclear-cache +call :_tasksetserv + +if not %_actwin%==1 goto :ks_office + +:: Process Windows +:: Check if system is permanently activated or not + +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 +) + +:: Check Evaluation version + +set _eval= +set _evalserv= + +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 _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 defined _evalserv ( +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." +) else ( +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) + +goto :ks_office +) +) + +::======================================================================================================================================== + +:: Check if GVLK is already installed or not + +call :k_channel + +:: Detect Key + +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." +) +) + +if not defined key if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Activation ID Not Found]" +) + +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 ( +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: +goto :ks_office +) + +::======================================================================================================================================== + +:: Install key + +if defined changekey ( +call :dk_color %Blue% "[%altedition%] edition product key will be used to enable %KS% activation." +echo: +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: +) + +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 defined key ( +call :dk_inskey "[%key%]" +) + +::======================================================================================================================================== + +: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 +) +) + +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 defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) + +:: Check unsupported office versions + +set o14c2r= +set o16uwp= + +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 + +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%]" +) + +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + +::======================================================================================================================================== + +:: 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 +) + +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 "%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 defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. +) +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 +) + +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]" +) + +::======================================================================================================================================== + +:: Process Office 15.0 C2R + +if not defined o15c2r goto :ks_starto16c2r + +call :ks_reset +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") +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 ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) + +set "_oLPath=%_oRoot%\Licenses" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto16c2r +) + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ks_process + +::======================================================================================================================================== + +: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 ") +) +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 "%_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] +) + +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." +) +call :_taskgetserv +call :_taskregserv +) + +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 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 not defined _C16R ( +call :_taskclear-cache +echo Cleared %KS% Server from the registry. +) +) +) + +:: https://learn.microsoft.com/azure/virtual-desktop/windows-10-multisession-faq + +if %_actwin%==1 for %%# in (407) do if %osSKU%==%%# ( +call :dk_color %Red% "%winos% does not support activation on non-azure platforms." +) + +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." +) + +:: 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 + +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 + +::======================================================================================================================================== + +: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 + +::======================================================================================================================================== + +:: 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%" +) + +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% +) +exit /b + +::======================================================================================================================================== + +:ks_setspp + +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 + +::======================================================================================================================================== + +: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 [%%#]" +) +) + + +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 [%%#]" +) +) + +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 [%%#] +) +) + +if not defined skipprocess ( +set key= +set _actid= +set _preview= +set _License=%%# +set _altoffid= + +echo %%# | find /i "2024" %nul% && ( +if exist "!_oLPath!\ProPlus2024PreviewVL_*.xrm-ms" if not exist "!_oLPath!\ProPlus2024VL_*.xrm-ms" set _preview=-Preview +) +set _prod=%%#!_preview! + +call :ksdata getinfo !_prod! + +if defined _altoffid ( +set _License=!_altoffid! +echo Converting Retail To Volume [!_prod! To !_altoffid!] +set _prod=!_altoffid! +call :ks_osppready +) + +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" +) +) +) + +exit /b + +::======================================================================================================================================== + +:ks_processmsi + +:: Process Office MSI Version + +call :ks_reset + +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( +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 + +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 :ksdata getmsiprod %2 +call :ks_msiretaildata getmsiret %2 + +echo: +echo Processing 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...]" +exit /b +) + +call :ks_process +exit /b + +::======================================================================================================================================== + +:ks_uninstall + +cls +if not defined terminal mode 91, 30 +title Online %KS% Complete Uninstall %masver% + +set "uline=__________________________________________________________________________________________" + +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% +) + +echo: +set error_= +call :_taskclear-cache +call :ks_clearstuff + +:: check KMS38 lock + +%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. +) + +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% +) + +goto :dk_done + +:ks_clearstuff + +set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" + +reg query "%key%" /f Path /s | find /i "\Activation-Renewal" %nul1% && ( +echo Deleting [Task] Activation-Renewal +schtasks /delete /tn Activation-Renewal /f %nul% +) + +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% +) + +If exist "%ProgramFiles%\Activation-Renewal\" ( +echo Deleting [Folder] %ProgramFiles%\Activation-Renewal\ +rmdir /s /q "%ProgramFiles%\Activation-Renewal\" %nul% +) + +:: Stuff from old MAS versions + +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% + +:: Check if all is removed + +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 + +::======================================================================================================================================== + +:_extracttask: +@echo off + +:: Renew K-M-S activation with Online servers via scheduled task + +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ + + +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 +) + +:: 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" + +>nul fltmc || 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 + +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 +) + +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 +) + +setlocal EnableDelayedExpansion +if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" +exit + +::======================================================================================================================================== + +:_taskstart + +echo: +echo %date%, %time% + +set /a loop=1 +set /a max_loop=4 + +call :_tasksetserv + +:_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 +) +) + +nslookup dns.msftncsi.com 2>nul | find "131.107.255.255" 1>nul +if "%errorlevel%"=="0" goto _taskIntConnected + +if %loop%==%max_loop% ( +set _tserror=1 +goto _taskend +) + +echo: +echo Error: Internet is not connected +echo Waiting 30 seconds + +timeout /t 30 >nul +set /a loop=%loop%+1 +goto _intrepeat + +:_taskIntConnected + +::======================================================================================================================================== + +call :_taskclear-cache + +:: Check WMI and sppsvc Errors + +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 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: +) + +::======================================================================================================================================== + +:: Check installed volume products activation ID's + +call :_taskgetids sppwid %slp% windows +call :_taskgetids sppoid %slp% office +call :_taskgetids osppid %ospp% office + +::======================================================================================================================================== + +echo: +echo Renewing K-M-S activation for all installed Volume products + +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 +) + +::======================================================================================================================================== + +call :_taskact + +:_skipact + +::======================================================================================================================================== + +if defined run_once ( +echo: +echo Deleting Scheduled Task Activation-Run_Once +schtasks /delete /tn Activation-Run_Once /f %nul% +) + +::======================================================================================================================================== + +:_taskend + +echo: +echo Exiting +echo ______________________________________________________________________ + +if defined _tserror (exit /b 123456789) else (exit /b 0) + +::======================================================================================================================================== + +:_act + +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" + +set _taskskip= +if "%_actprojvis%"=="1" ( +echo: %prodname% | find /i "Office" %nul% && ( +echo: %prodname% | findstr /i "Project Visio" %nul% || (set _taskskip=1& exit /b) +) +) + +if defined t_name Activating: %prodname% + +set errorcode=12345 +set /a act_attempt=0 + +:_act2 + +if %act_attempt% GTR 4 exit /b + +if not "%act_ok%"=="1" ( +if not defined _server call :_taskgetserv +call :_taskregserv +) + +if not !server_num! GTR %max_servers% ( + +if "%1"=="act_win" if %_kms38% EQU 1 ( +set act_ok=1 +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 }" + +call set errorcode=!errorlevel! + +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 +if not defined _server goto _act2 +) +exit /b + +::======================================================================================================================================== + +:_actinfo + +if "%1"=="act_win" if not defined t_name (set prodname=%winos%) + +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 +) + +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 +) + +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 +) + +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 +) + + +set gpr=0 +set gpr2=0 +call :_taskgetgrace +set /a "gpr2=(%gpr%+1440-1)/1440" + +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 +) + +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 :dk_color %Green% "%prodname% is successfully activated for %gpr2% days." +) +exit /b +) + +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 + +::======================================================================================================================================== + +:_taskact + +:: Check KMS38 activation + +set gpr=0 +set _kms38=0 +if defined sppwid if %winbuild% GEQ 14393 ( +set _path=%slp% +set _actid=%sppwid% +call :_taskgetgrace +) + +if %gpr% NEQ 0 if %gpr% GTR 259200 ( +set _kms38=1 +call :_taskchkEnterpriseG _kms38 +) + +:: 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 %_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" +) + +echo: +if defined sppwid ( +set _path=%slp% +set _actid=%sppwid% +call :_act act_win +call :_actinfo act_win +) else ( +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 +) +) + +if not defined sppoid if not defined osppid if defined t_name ( +echo: +echo Checking: Volume version of Office is not installed +) + +exit /b + +::======================================================================================================================================== + +:_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 + +:_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 + +:_taskchkEnterpriseG + +for %%# in (e0b2d383-d112-413f-8a80-97f373a5820c e38454fb-41a4-4f59-a5dc-25080e354730) do (if %sppwid%==%%# set %1=0) +exit /b + +::======================================================================================================================================== + +:: Clean existing K-M-S cache from the registry + +:_taskclear-cache + +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% +) + +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" + +%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 ( +%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 +%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f +) +%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServiceName +%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort +%nul% reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing +%nul% reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching +%nul% reg delete "HKLM\%OPPk%\%_oA14%" /f +%nul% reg delete "HKLM\%OPPk%\%_oApp%" /f + +exit /b + +::======================================================================================================================================== + +:_taskregserv + +if defined _server (set KMS_IP=%_server%) +if not defined _port set _port=1688 + +%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 + +%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 %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 +) +exit /b + +::======================================================================================================================================== + +:_tasksetserv + +:: Multi K-M-S servers integration and servers randomization + +set srvlist= +set -= + +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" + +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 + +:_taskgetserv + +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 + +:: 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: + +::======================================================================================================================================== + +:ks_renewal + +set error_= +set "_dest=%ProgramFiles%\Activation-Renewal" +set "key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" + +call :ks_clearstuff %nul% + +if defined error_ ( +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% +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 :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 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 :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 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_ ( +schtasks /delete /tn Activation-Renewal /f %nul% +schtasks /delete /tn Activation-Run_Once /f %nul% +rmdir /s /q "%_dest%\" %nul% +set error=1 +call :dk_color %Red% "Failed to install Renewal Task. Restart system / Try again." +exit /b +) + +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 + +:: Extract the text from batch script without character and file encoding issue + +:ks_RenExport + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::%~3);" +exit /b + +::======================================================================================================================================== + +:ks_createInfo.txt + +( +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: +echo - Scheduled tasks +echo Activation-Renewal [Renewal / Weekly] +echo Activation-Run_Once [Activation Task - deletes itself once activated] +echo The scheduled tasks runs only if the system is connected to the Internet. +echo: +echo - Files +echo C:\Program Files\Activation-Renewal\Activation_task.cmd +echo C:\Program Files\Activation-Renewal\Info.txt +echo C:\Program Files\Activation-Renewal\Logs.txt +echo ______________________________________________________________________________________________ +echo: +echo This Script is a part of MAS project. +echo: +echo Homepage: mass grave[.]dev +echo Email: mas.help@outlook.com +)>"%_dest%\Info.txt" +exit /b + +::======================================================================================================================================== + +:renewal: + + + + Microsoft Corporation + 1999-01-01T12:00:00.34375 + WindowsAddict + 1.0 + Online K-M-S Activation-Renewal - Weekly Task + \Activation-Renewal + D:P(A;;FA;;;SY)(A;;FA;;;BA)(A;;FRFX;;;LS)(A;;FRFW;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)(A;;FR;;;S-1-5-4) + + + + 1999-01-01T12:00:00 + true + + + + + 1 + + + + + + S-1-5-18 + HighestAvailable + + + + IgnoreNew + false + false + true + true + true + + false + false + + true + true + true + false + false + true + false + PT10M + 7 + + PT2M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:renewal: + +:run_once: + + + + Microsoft Corporation + 1999-01-01T12:00:00.34375 + WindowsAddict + 1.0 + Online K-M-S Activation Run Once - Run and Delete itself on first Internet Contact + \Activation-Run_Once + D:P(A;;FA;;;SY)(A;;FA;;;BA)(A;;FRFX;;;LS)(A;;FRFW;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)(A;;FR;;;S-1-5-4) + + + + true + + + + + S-1-5-18 + HighestAvailable + + + + IgnoreNew + false + false + true + true + true + + false + false + + true + true + true + false + false + true + false + PT10M + 7 + + PT2M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:run_once: + +::======================================================================================================================================== + +:: 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 = "_" + +:ks_msiretaildata + +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 + +::======================================================================================================================================== + +:: 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 +:: Old Preview editions - Generated keys +43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise +cde952c7-2f96-4d9d-8f2b-2d349f64fc51_VHF9H-NXBBB-63VJD-4V8GJ-2R%f%YK8___4_Enterprise +2a4403df-877f-4046-8271-db6fb6ec54c8_N896F-VG44B-HF8HC-XW23F-MW%f%8YB___4_Enterprise +d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard +ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter +8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise +e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb +2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC +6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN +c23947f3-3f2e-401f-a38c-f38fe0ecb0bd_NKX82-GPWWM-C2KPY-VG78C-FF%f%9R9__27_EnterpriseN +ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional +a4383e6b-dada-423d-a43d-f25678429676_Q8MK8-DNHMX-2XWHV-X66TM-CD%f%G33__48_Professional +34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN +64192251-81b0-4898-ac63-913cc3edf919_9CYB3-NFMRW-YFDG6-XRQFD-J4%f%YPJ__49_ProfessionalN +2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease +bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard +bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium +631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM +9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA +c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry +4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE +c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9_RNPX3-4GPFM-2DHXB-8WD8P-4R%f%DQX__91_EmbeddedIndustryE +5ca3e488-dbae-4fae-8282-a98fbcd21126_HM9NW-WY98Q-XDF7H-3QV6B-X4%f%QFF__91_EmbeddedIndustryE +b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM +3a9a9414-24bf-4836-866d-ba13a298efb0_4K89N-FMV8W-B3F9T-HKF64-DJ%f%X27__97_CoreARM +4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN +c6e3410d-e48d-41eb-8ca9-848397f46d02_3TGHP-NHXHM-2PMXX-8KR9M-G2%f%782__98_CoreN +5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific +c7a8a09a-571c-4ea8-babc-0cbe4d48a89d_H76BG-QBNM2-QRWJY-67W73-BG%f%7CQ__99_CoreCountrySpecific +2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage +b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSingleLanguage +903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core +6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core +cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC +cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC +827a0032-dced-4609-ab6e-16b9d8a40280_CC92N-X2Y7W-H4H32-QHV2X-3R%f%TT9_111_CoreConnected +c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected +49066601-00dc-4d2c-83a8-4343a7b990d1_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%WMR_112_ProfessionalStudent +fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent +f18bbe32-16dc-48d4-a27b-5f3966f82513_KJ3DB-VNXVJ-GJG94-RX4RF-K4%f%TVG_113_CoreConnectedN +86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN +bd64ebf7-d5ec-44c5-ba00-6813441c8c87_4K89N-FMV8W-B3F9T-HKF64-DJ%f%34M_114_ProfessionalStudentN +687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN +964a60f6-1505-4ddb-af03-6a9ce6997d3b_NKX82-GPWWM-C2KPY-T4PKC-7C%f%FYJ_115_CoreConnectedSingleLanguage +5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage +b5fe5eaa-14cc-4075-84ae-57c0206d1133_BJMNR-F3WG7-H8W83-27XXK-P3%f%8MC_116_CoreConnectedCountrySpecific +a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific +5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro +af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education +e8ced63e-420d-4ab6-8723-aaf165efb5eb_QBQ3Q-2NC74-MKH8F-DTQ34-QG%f%M3G_121_Education +075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN +3885bca5-11c1-4d4e-9395-df38f7f09a0e_7MFGN-34DMC-J8FCR-P4DKH-KH%f%J8F_122_EducationN +b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_ServerHI +2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS +75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS +11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN +4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN +b15187db-11c6-4f13-91ca-8121cebf5b88_JBDKF-6NCD6-49K3G-2TV79-BK%f%PB4_127_ProfessionalS +aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS +6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%PB8_128_ProfessionalSN +9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN +:: Missing keys for old preview editions +:: 38fbe2ac-465a-4ef7-b9d8-72044f2792b6 4 Enterprise +:: ea77973e-4930-4fa1-a899-02dfaeada1db 4 Enterprise +:: 92374131-ed4c-4d1b-846a-32f43c3eb90d 7 ServerStandard +:: cc64c548-1867-4777-a1cc-0022691bc2a0 8 ServerDatacenter +:: 9dce1f29-bb10-4be0-8027-35b953dd46d5 10 ServerEnterprise +:: bf9eda2f-74cc-4ba3-8967-cde30f18c230 15 ServerEnterpriseIA64 +:: 4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc 17 ServerWeb +:: 8372b47d-5221-41d8-88d0-3f924e50623e 18 ServerHPC +:: e4ecef68-4372-4740-98e8-6c157cd301c2 27 EnterpriseN +:: 957ec1e8-97cd-42a8-a091-01a30cf779da 48 Professional +:: 0ff4e536-a746-4018-b107-e81dd0b6d33a 49 ProfessionalN +::======================================================================================================================================== +:: 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 %1==chkprod if "%oVer%"=="%%C" if not defined foundprod ( +echo "%%D" | findstr /I "\<%2.*" %nul% && set foundprod=1 +) + +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 +) +) +) + +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 + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:check_actstatus + +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;}" +) + +%psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';iex ($f[1])" +goto dk_done + +: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: + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:troubleshoot + +set "line=_________________________________________________________________________________________________" + +:at_menu + +cls +title Troubleshoot %masver% +if not defined terminal mode 77, 30 + +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 + +::======================================================================================================================================== + +:dism_rest + +cls +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 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) +) + +echo: +if defined _int ( +echo Checking Internet Connection [Connected] +) else ( +call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" +) + +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% +) + +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^) + +echo: +echo %line% +echo: +echo Notes: +echo: +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 +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 +) + +%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 +) + +echo Stopping ClipSVC service... +%psc% Stop-Service ClipSVC -force %nul% +timeout /t 2 %nul% + +echo: +echo Applying the command to clean ClipSVC Licenses... +echo rundll32 clipc.dll,ClipCleanUpState + +rundll32 clipc.dll,ClipCleanUpState + +if %winbuild% LEQ 10240 ( +echo [Successful] +) else ( +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] +) +) + +:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after +:: system restart. It needs to be deleted to activate the system without restart. + +set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" + +reg query "%RegKey%" %nul% && %nul% call :regownstart +reg delete "%RegKey%" /f %nul% + +echo: +echo Deleting a Volatile ^& Protected Registry Key... +echo [%RegKey%] +reg query "%RegKey%" %nul% && ( +call :dk_color %Red% "[Failed]" +echo Restart your system, that will delete this registry key automatically. +) || ( +echo [Successful] +) + +:: 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% + +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 +) +) + +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% +) +) + +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 c2r14= +if defined c2r14_68 set c2r14=1 +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 the Repair option in Windows Settings for it. +echo ________________________________________________________________ +echo: +start appwiz.cpl +) + +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 + +:repairend + +echo: +echo %line% +echo: +echo: +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 +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 Rebuilding WMI is not recommended on Windows Server, aborting... +goto :at_back +) + +echo: +echo Checking WMI +call :checkwmi + +:: Apply basic fix first and check + +if defined error ( +%psc% Stop-Service Winmgmt -force %nul% +winmgmt /salvagerepository %nul% +call :checkwmi +) + +if not defined error ( +echo [Working] +echo No need to apply this option, aborting... +goto :at_back +) + +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) + +echo: +if defined _corrupt ( +%eline% +echo Winmgmt service is corrupted, aborting... +goto :at_back +) + +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 Restarting... +shutdown -t 5 -r +exit +) + +echo: +echo Deleting WMI repository +rmdir /s /q "%SysPath%\wbem\repository\" %nul% +if exist "%SysPath%\wbem\repository\" ( +call :dk_color %Red% "[Failed]" +) else ( +echo [Successful] +) + +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 + +::======================================================================================================================================== + +: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 + +::======================================================================================================================================== + +: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 + +:fixsppperms: +# Fix perms for Token Folder + +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 +} + +# 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' } + } + + ### 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 +} + +Take-Permissions "Users" "S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" "S-1-5-20" +:fixsppperms: + +::======================================================================================================================================== + +:scandat + +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 %1==check ( +if exist %%#tokens.dat set token=%%#tokens.dat +) + +if %1==delete ( +if exist %%# ( +%nul% dir /a-d /s "%%#*.dat" && ( +attrib -r -s -h "%%#*.dat" /S +del /S /F /Q "%%#*.dat" +) +) +) +) +exit /b + +:scandatospp + +set token= +for %%# in ( +%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\ +) do ( + +if %1==check ( +if exist %%#tokens.dat set token=%%#tokens.dat +) + +if %1==delete ( +if exist %%# ( +%nul% dir /a-d /s "%%#*.dat" && ( +attrib -r -s -h "%%#*.dat" /S +del /S /F /Q "%%#*.dat" +) +) +) +) +exit /b + +::======================================================================================================================================== + +:regownstart + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" +exit /b + +:: Below code takes ownership of a volatile registry key and deletes it +:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState + +:regown: +$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 +$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null + +$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') +$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value +$Admin = New-Object System.Security.Principal.NTAccount($IDN) + +$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' +$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') + +$acl = $key.GetAccessControl() +$acl.SetOwner($Admin) +$key.SetAccessControl($acl) + +$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") +$acl.SetAccessRule($rule) +$key.SetAccessControl($acl) +:regown: + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:change_winedition + +:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line +set _stg=0 + +set "line=echo ___________________________________________________________________________________________" + +cls +if not defined terminal mode 98, 30 +title Change Windows Edition %masver% + +echo: +echo Initializing... +echo: + +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 +) +) + +::======================================================================================================================================== + +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 Activation ID + +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 +) + +::======================================================================================================================================== + +:: Check Windows Edition and branch + +set osedition=0 +set dismedition= +set dismnotworking= + +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 +) + +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 + +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" + +::======================================================================================================================================== + +:: Get target editions list + +set _target= +set _dtarget= +set _ptarget= +set _ntarget= +set _wtarget= + +if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget= !_dtarget! %%a ") else (set "_dtarget= %%a ")) +if %winbuild% 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 _pro=Professional +if /i "%osedition%"=="CoreN" set _pro=ProfessionalN +set "_dtarget= %_dtarget% !_wtarget! !_pro! " +) + +::======================================================================================================================================== + +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%" ( +echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# " +) + +if defined _target ( +for %%# in (%_target%) do ( +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 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 +) + +::======================================================================================================================================== + +:cedmenu2 + +cls +if not defined terminal mode 98, 30 +set inpt= +set counter=0 +set verified=0 +set targetedition= + +%line% +echo: +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: + +for %%A in (%_ntarget%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A +) + +%line% +echo: +echo [0] %_exitmsg% +echo: +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 + +::======================================================================================================================================== + +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: +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 + +if not exist "%SysPath%\spp\tokens\skus\%targetedition%\" ( +echo %_wtarget% | find /i " %targetedition% " || ( +set _dismapi=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 [%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 +) + +::======================================================================================================================================== + +:: 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: +%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 -" +echo: +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% +echo: +choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : " +if !errorlevel!==1 exit /b +) + +::======================================================================================================================================== + +if %_dismapi%==0 ( +echo Installing %_chan% key [%key%] +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: +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" +) +) + +if %_dismapi%==1 ( +echo: +echo Applying the DISM API method with %_chan% key %key%. Please wait... +echo: + +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 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;}" +) + +call :ced_rebootflag +if defined rebootreq goto dk_done + +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: +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 + +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 + +::======================================================================================================================================== + +: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 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 ( +%eline% +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: + +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 :ced_postprep +%line% + +goto dk_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 Restart your system 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: +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 + +::======================================================================================================================================== + +:: 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 Make sure Windows is fully updated, restart the system and try again. +) +exit /b + +::======================================================================================================================================== + +: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 + +::======================================================================================================================================== + +: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/Gamers-Against-Weed/Set-WindowsCbsEdition + +:cbsxml:[ +param ( + [Parameter()] + [String]$SetEdition, + + [Parameter()] + [Switch]$GetTargetEditions, + + [Parameter()] + [Switch]$StageCurrent +) + +function Get-AssemblyIdentity { + param ( + [String]$PackageName + ) + + $PackageName = [String]$PackageName + $packageData = ($PackageName -split '~') + + if($packageData[3] -eq '') { + $packageData[3] = 'neutral' + } + + return "" +} + +function Get-SxsName { + param ( + [String]$PackageName + ) + + $name = ($PackageName -replace '[^A-z0-9\-\._]', '') + + if($name.Length -gt 40) { + $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '') + } + + return $name.ToLower() +} + +function Find-EditionXmlInSxs { + param ( + [String]$Edition + ) + + $candidates = @($Edition, 'Client', 'Server') + $winSxs = $Env:SystemRoot + '\WinSxS' + $allInSxs = Get-ChildItem -Path $winSxs | select Name + + foreach($candidate in $candidates) { + $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate" + $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35') + + if($packages.Length -eq 0) { + continue + } + + $package = $packages[-1].Name + $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml' + + if(Test-Path -Path $testPath -PathType Leaf) { + return $testPath + } + } + + return $null +} + +function Find-EditionXml { + param ( + [String]$Edition + ) + + $servicingEditions = $Env:SystemRoot + '\servicing\Editions' + $editionXml = $Edition + 'Edition.xml' + + $editionXmlInServicing = $servicingEditions + '\' + $editionXml + + if(Test-Path -Path $editionXmlInServicing -PathType Leaf) { + return $editionXmlInServicing + } + + return Find-EditionXmlInSxs -Edition $Edition +} + +function Write-UpgradeCandidates { + param ( + [HashTable]$InstallCandidates + ) + + $editionCount = 0 + Write-Host 'Editions that can be upgraded to:' + foreach($candidate in $InstallCandidates.Keys) { + Write-Host "Target Edition : $candidate" + $editionCount++ + } + + if($editionCount -eq 0) { + Write-Host '(no editions are available)' + } +} + +function Write-UpgradeXml { + param ( + [Array]$RemovalCandidates, + [Array]$InstallCandidates, + [Boolean]$Stage + ) + + $removeAction = 'remove' + if($Stage) { + $removeAction = 'stage' + } + + Write-Output '' + Write-Output '' + Write-Output '' + + 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 '' + } + + Write-Output '' + Write-Output '' +} + +function Write-Usage { + Get-Help $script:MyInvocation.MyCommand.Path -detailed +} + +$version = '1.0' +$getTargetsParam = $GetTargetEditions.IsPresent +$stageCurrentParam = $StageCurrent.IsPresent + +if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) { + Write-Usage + Exit 1 +} + +$removalCandidates = @(); +$installCandidates = @{}; + +$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' } +foreach($package in $packages) { + $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState + $packageName = ($package.Name -split '\\')[-1] + $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1] + + if($state -eq 0x40) { + if($null -eq $installCandidates[$packageEdition]) { + $installCandidates[$packageEdition] = @() + } + + if($false -eq ($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) + } +} + +if($getTargetsParam) { + Write-UpgradeCandidates -InstallCandidates $installCandidates + Exit +} + +if($false -eq ($installCandidates.Keys -contains $SetEdition)) { + Write-Error "The system cannot be upgraded to `"$SetEdition`"" + Exit 1 +} + +$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml' + +Write-UpgradeXml -RemovalCandidates $removalCandidates ` + -InstallCandidates $installCandidates[$SetEdition] ` + -Stage $stageCurrentParam >$xmlPath + +$editionXml = Find-EditionXml -Edition $SetEdition +if($null -eq $editionXml) { + Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...' +} + +Write-Host 'Starting the upgrade process. This may take a while...' + +DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath +$dismError = $LASTEXITCODE + +Remove-Item -Path $xmlPath -Force + +if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to upgrade to the target edition' + Exit $dismError +} + +if($null -ne $editionXml) { + $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml' + Copy-Item -Path $editionXml -Destination $destination + + DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml + $dismError = $LASTEXITCODE + + if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to apply edition specific settings' + Exit $dismError + } +} + +Restart-Computer +:cbsxml:] + +::======================================================================================================================================== + +:: Change edition using DISM API +:: Thanks to Alex (aka may, ave9858) + +:dismapi:[ +param ( + [Parameter()] + [String]$TargetEdition, + + [Parameter()] + [String]$Key +) + +$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) +$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) +$TB = $ModuleBuilder.DefineType(0) + +[void]$TB.DefinePInvokeMethod('DismInitialize', 'DismApi.dll', 22, 1, [int], @([int], [IntPtr], [IntPtr]), 1, 3) +[void]$TB.DefinePInvokeMethod('DismOpenSession', 'DismApi.dll', 22, 1, [int], @([String], [IntPtr], [IntPtr], [UInt32].MakeByRefType()), 1, 3) +[void]$TB.DefinePInvokeMethod('_DismSetEdition', 'DismApi.dll', 22, 1, [int], @([UInt32], [String], [String], [IntPtr], [IntPtr], [IntPtr]), 1, 3) +$Dism = $TB.CreateType() + +[void]$Dism::DismInitialize(2, 0, 0) +$Session = 0 +[void]$Dism::DismOpenSession('DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}', 0, 0, [ref]$Session) +if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) { + Restart-Computer +} +:dismapi:] + +::======================================================================================================================================== + +:: 1st column = Generic Retail/OEM/MAK/GVLK Key +:: 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 + +:changeeditiondata + +if %winbuild% GTR 17763 exit /b +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) + +set h= +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 ( + +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 + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +:change_offedition + +set "line=echo ___________________________________________________________________________________________" + +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: + +::======================================================================================================================================== +:: Leave empty line below From 8e3b4135f56d14b86ccaa96014bc5eb9b6b5f80d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 28 Aug 2024 08:30:14 +0530 Subject: [PATCH 78/91] Fix text alignment --- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index a95601d..78e7912 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -332,7 +332,7 @@ echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your 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 diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index c906b8a..70f1359 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -385,7 +385,7 @@ 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]" +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! diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 2017d8c..84e9f65 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -474,7 +474,8 @@ 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 Windows will activate itself again. +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. From f9f386a896f1b4233b806d28d7901b942aff6329 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 30 Aug 2024 02:58:38 +0530 Subject: [PATCH 79/91] Detect SPP's PerfOptions registry in IFEO, and remove it in troubleshoot script --- .../MAS_AIO-CRC32_43EF5026.cmd | 21 ++++++++++++++++--- .../Activators/HWID_Activation.cmd | 12 ++++++++--- .../Activators/KMS38_Activation.cmd | 12 ++++++++--- .../Activators/Ohook_Activation_AIO.cmd | 12 ++++++++--- .../Activators/Online_KMS_Activation.cmd | 12 ++++++++--- MAS/Separate-Files-Version/Troubleshoot.cmd | 9 ++++++++ 6 files changed, 63 insertions(+), 15 deletions(-) diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd b/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd index 848cc7d..069f43c 100644 --- a/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd +++ b/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd @@ -1594,11 +1594,17 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( +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 Checking SPP Interference In IFEO [%_sppint%] +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) @@ -1679,7 +1685,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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!]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System May Deactivate Later]" ) ) @@ -7848,6 +7854,15 @@ 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 diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 04d0023..c520226 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1359,11 +1359,17 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( +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 Checking SPP Interference In IFEO [%_sppint%] +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) @@ -1444,7 +1450,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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!]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System May Deactivate Later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 20f3766..ff2db4d 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1502,11 +1502,17 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( +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 Checking SPP Interference In IFEO [%_sppint%] +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) @@ -1587,7 +1593,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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!]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System May Deactivate Later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 78e7912..f15a121 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1811,11 +1811,17 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( +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 Checking SPP Interference In IFEO [%_sppint%] +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) @@ -1896,7 +1902,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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!]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System May Deactivate Later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 70f1359..f5eaf72 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2860,11 +2860,17 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( +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 Checking SPP Interference In IFEO [%_sppint%] +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) ) @@ -2945,7 +2951,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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!]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System May Deactivate Later]" ) ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 84e9f65..ae67278 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -648,6 +648,15 @@ 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 From 84f5516632f905ac70b39db85273c6e3e9ddd49b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 30 Aug 2024 03:11:05 +0530 Subject: [PATCH 80/91] Remove CRC32 from AIO name and use random letters in folder name (To avoid AV's detection in URL) --- .../MAS_AIO.cmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MAS/{All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd => All-In-One-Version-KL/MAS_AIO.cmd} (100%) diff --git a/MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd similarity index 100% rename from MAS/All-In-One-Version/MAS_AIO-CRC32_43EF5026.cmd rename to MAS/All-In-One-Version-KL/MAS_AIO.cmd From ec31fef9b9d4917ca5b99f68f18ab1c4a3e28c6b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 30 Aug 2024 03:22:35 +0530 Subject: [PATCH 81/91] Fix line alignment in KMS38 menu --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 069f43c..9f60f80 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3576,7 +3576,7 @@ echo: echo: echo: echo: -echo ____________________________________________________________ +echo: ______________________________________________________ echo: echo [1] KMS38 Activation echo ____________________________________________ @@ -3584,7 +3584,7 @@ echo: echo [2] Remove KM38 Protection echo: echo [0] %_exitmsg% -echo ____________________________________________________________ +echo: ______________________________________________________ echo: call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" choice /C:120 /N diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index ff2db4d..623b3d2 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -329,7 +329,7 @@ echo: echo: echo: echo: -echo ____________________________________________________________ +echo: ______________________________________________________ echo: echo [1] KMS38 Activation echo ____________________________________________ @@ -337,7 +337,7 @@ echo: echo [2] Remove KM38 Protection echo: echo [0] %_exitmsg% -echo ____________________________________________________________ +echo: ______________________________________________________ echo: call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" choice /C:120 /N From 2443e1e4713c0c8d9f2a5bf473f66bcc17c74309 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 1 Sep 2024 02:27:23 +0530 Subject: [PATCH 82/91] Remove preview keys It can cause issues with correct key detection and its not important anyways --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 104 ------------------ .../Activators/KMS38_Activation.cmd | 30 ----- .../Activators/Online_KMS_Activation.cmd | 74 ------------- 3 files changed, 208 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 9f60f80..3f75b5e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4225,36 +4225,6 @@ a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_Server 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 -:: Old Preview editions from build 14393 - Generated keys -43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise -d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard -ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter -e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb -6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN -ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional -34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN -9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA -c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry -4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE -b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM -4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN -5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific -2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage -903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core -cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC -c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected -fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent -86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN -687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN -5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage -a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific -5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro -af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education -075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN -2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS -11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN -aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS -9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B @@ -6249,80 +6219,6 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server 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 -:: Old Preview editions - Generated keys -43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise -cde952c7-2f96-4d9d-8f2b-2d349f64fc51_VHF9H-NXBBB-63VJD-4V8GJ-2R%f%YK8___4_Enterprise -2a4403df-877f-4046-8271-db6fb6ec54c8_N896F-VG44B-HF8HC-XW23F-MW%f%8YB___4_Enterprise -d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard -ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter -8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise -e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb -2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC -6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN -c23947f3-3f2e-401f-a38c-f38fe0ecb0bd_NKX82-GPWWM-C2KPY-VG78C-FF%f%9R9__27_EnterpriseN -ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional -a4383e6b-dada-423d-a43d-f25678429676_Q8MK8-DNHMX-2XWHV-X66TM-CD%f%G33__48_Professional -34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN -64192251-81b0-4898-ac63-913cc3edf919_9CYB3-NFMRW-YFDG6-XRQFD-J4%f%YPJ__49_ProfessionalN -2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease -bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard -bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium -631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM -9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA -c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry -4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE -c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9_RNPX3-4GPFM-2DHXB-8WD8P-4R%f%DQX__91_EmbeddedIndustryE -5ca3e488-dbae-4fae-8282-a98fbcd21126_HM9NW-WY98Q-XDF7H-3QV6B-X4%f%QFF__91_EmbeddedIndustryE -b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM -3a9a9414-24bf-4836-866d-ba13a298efb0_4K89N-FMV8W-B3F9T-HKF64-DJ%f%X27__97_CoreARM -4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN -c6e3410d-e48d-41eb-8ca9-848397f46d02_3TGHP-NHXHM-2PMXX-8KR9M-G2%f%782__98_CoreN -5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific -c7a8a09a-571c-4ea8-babc-0cbe4d48a89d_H76BG-QBNM2-QRWJY-67W73-BG%f%7CQ__99_CoreCountrySpecific -2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage -b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSingleLanguage -903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core -6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core -cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC -cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC -827a0032-dced-4609-ab6e-16b9d8a40280_CC92N-X2Y7W-H4H32-QHV2X-3R%f%TT9_111_CoreConnected -c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected -49066601-00dc-4d2c-83a8-4343a7b990d1_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%WMR_112_ProfessionalStudent -fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent -f18bbe32-16dc-48d4-a27b-5f3966f82513_KJ3DB-VNXVJ-GJG94-RX4RF-K4%f%TVG_113_CoreConnectedN -86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN -bd64ebf7-d5ec-44c5-ba00-6813441c8c87_4K89N-FMV8W-B3F9T-HKF64-DJ%f%34M_114_ProfessionalStudentN -687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN -964a60f6-1505-4ddb-af03-6a9ce6997d3b_NKX82-GPWWM-C2KPY-T4PKC-7C%f%FYJ_115_CoreConnectedSingleLanguage -5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage -b5fe5eaa-14cc-4075-84ae-57c0206d1133_BJMNR-F3WG7-H8W83-27XXK-P3%f%8MC_116_CoreConnectedCountrySpecific -a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific -5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro -af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education -e8ced63e-420d-4ab6-8723-aaf165efb5eb_QBQ3Q-2NC74-MKH8F-DTQ34-QG%f%M3G_121_Education -075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN -3885bca5-11c1-4d4e-9395-df38f7f09a0e_7MFGN-34DMC-J8FCR-P4DKH-KH%f%J8F_122_EducationN -b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_ServerHI -2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS -75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS -11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN -4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN -b15187db-11c6-4f13-91ca-8121cebf5b88_JBDKF-6NCD6-49K3G-2TV79-BK%f%PB4_127_ProfessionalS -aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS -6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%PB8_128_ProfessionalSN -9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN -:: Missing keys for old preview editions -:: 38fbe2ac-465a-4ef7-b9d8-72044f2792b6 4 Enterprise -:: ea77973e-4930-4fa1-a899-02dfaeada1db 4 Enterprise -:: 92374131-ed4c-4d1b-846a-32f43c3eb90d 7 ServerStandard -:: cc64c548-1867-4777-a1cc-0022691bc2a0 8 ServerDatacenter -:: 9dce1f29-bb10-4be0-8027-35b953dd46d5 10 ServerEnterprise -:: bf9eda2f-74cc-4ba3-8967-cde30f18c230 15 ServerEnterpriseIA64 -:: 4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc 17 ServerWeb -:: 8372b47d-5221-41d8-88d0-3f924e50623e 18 ServerHPC -:: e4ecef68-4372-4740-98e8-6c157cd301c2 27 EnterpriseN -:: 957ec1e8-97cd-42a8-a091-01a30cf779da 48 Professional -:: 0ff4e536-a746-4018-b107-e81dd0b6d33a 49 ProfessionalN ::======================================================================================================================================== :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 623b3d2..0869361 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1818,36 +1818,6 @@ a99cc1f0-7719-4306-9645-294102fbff95_FDNH6-VW9RW-BXPJ7-4XTYG-23%f%9TB_168_Server 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 -:: Old Preview editions from build 14393 - Generated keys -43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise -d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard -ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter -e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb -6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN -ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional -34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN -9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA -c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry -4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE -b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM -4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN -5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific -2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage -903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core -cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC -c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected -fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent -86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN -687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN -5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage -a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific -5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro -af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education -075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN -2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS -11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN -aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS -9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( if %1==key if not defined key echo "!allapps!" | find /i "%%A" %nul1% && set key=%%B diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index f5eaf72..68c988a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3377,80 +3377,6 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server 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 -:: Old Preview editions - Generated keys -43f2ab05-7c87-4d56-b27c-44d0f9a3dabd_JDTNC-PP77T-T9H2W-G4J2J-VH%f%7MW___4_Enterprise -cde952c7-2f96-4d9d-8f2b-2d349f64fc51_VHF9H-NXBBB-63VJD-4V8GJ-2R%f%YK8___4_Enterprise -2a4403df-877f-4046-8271-db6fb6ec54c8_N896F-VG44B-HF8HC-XW23F-MW%f%8YB___4_Enterprise -d3872724-5c08-4b1b-91f2-fc9eafed4990_3NMDC-G7C3W-68RGP-CQK9H-B7%f%QK9___7_ServerStandard -ba947c44-d19d-4786-b6ae-22770bc94c54_T8N4T-C6P4F-W48KM-CYJT9-KP%f%69Y___8_ServerDatacenter -8a409d61-30fe-4903-bdbc-1fb28603ba3a_NBBBB-BBBBB-BBBBB-BPTW9-H4%f%83R__10_ServerEnterprise -e5676f13-9b66-4a1f-8b0c-43490e236202_RN84D-7HCWY-FTCBK-J3GHK-RM%f%YVT__17_ServerWeb -2412bea9-b6e0-441e-8dc2-a13720b42de9_2FNVD-CPYC6-WXD8M-VJKXF-GX%f%TCB__18_ServerHPC -6ae51eeb-c268-4a21-9aae-df74c38b586d_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%P42__27_EnterpriseN -c23947f3-3f2e-401f-a38c-f38fe0ecb0bd_NKX82-GPWWM-C2KPY-VG78C-FF%f%9R9__27_EnterpriseN -ff808201-fec6-4fd4-ae16-abbddade5706_CC6JP-VN67C-8KCJ4-4V48V-HX%f%M9B__48_Professional -a4383e6b-dada-423d-a43d-f25678429676_Q8MK8-DNHMX-2XWHV-X66TM-CD%f%G33__48_Professional -34260150-69ac-49a3-8a0d-4a403ab55763_TNYKV-X79V3-CPD6X-Y2MRW-D9%f%M9H__49_ProfessionalN -64192251-81b0-4898-ac63-913cc3edf919_9CYB3-NFMRW-YFDG6-XRQFD-J4%f%YPJ__49_ProfessionalN -2b9c337f-7a1d-4271-90a3-c6855a2b8a1c_992NC-RYK89-M9XBG-4DCB3-GF%f%XVK__74_Prerelease -bfa6b683-56be-47b8-a22e-461b27b9cf11_2WFGX-YXN3B-BT46K-4DPYX-T8%f%W2J__76_ServerMultiPointStandard -bc20fb5b-4097-484f-84d2-55b18dac95eb_CQN7Q-KH97X-TH9G4-JRGWM-R6%f%T86__77_ServerMultiPointPremium -631ead72-a8ab-4df8-bbdf-372029989bdd_N92MW-K723D-FCBCQ-CGPPQ-3M%f%9VR__81_PrereleaseARM -9cc2564c-292e-4d8a-b9f9-1f5007d9409a_82CNJ-W82TW-BY23W-BVJ6W-W4%f%2Y2__86_EmbeddedIndustryA -c35a9336-fb02-48db-8f4d-245c17f03667_NXTJV-CRQYQ-W77JR-GG84R-HQ%f%VHX__89_EmbeddedIndustry -4daf1e3e-6be9-4848-8f5a-a18a0d2895e1_7MNJY-B88MV-WQKVP-BQ6DK-6C%f%M4G__91_EmbeddedIndustryE -c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9_RNPX3-4GPFM-2DHXB-8WD8P-4R%f%DQX__91_EmbeddedIndustryE -5ca3e488-dbae-4fae-8282-a98fbcd21126_HM9NW-WY98Q-XDF7H-3QV6B-X4%f%QFF__91_EmbeddedIndustryE -b554b49f-4d57-4f08-955e-87886f514d49_4QC36-NW3YH-D2Y9D-RJPC7-VV%f%BDF__97_CoreARM -3a9a9414-24bf-4836-866d-ba13a298efb0_4K89N-FMV8W-B3F9T-HKF64-DJ%f%X27__97_CoreARM -4dfd543d-caa6-4f69-a95f-5ddfe2b89567_KG3N2-VRJ6F-P36TD-6MMCF-PP%f%QX7__98_CoreN -c6e3410d-e48d-41eb-8ca9-848397f46d02_3TGHP-NHXHM-2PMXX-8KR9M-G2%f%782__98_CoreN -5fe40dd6-cf1f-4cf2-8729-92121ac2e997_XFNM6-P9FYP-MRF6P-MM6V2-27%f%KDP__99_CoreCountrySpecific -c7a8a09a-571c-4ea8-babc-0cbe4d48a89d_H76BG-QBNM2-QRWJY-67W73-BG%f%7CQ__99_CoreCountrySpecific -2cc171ef-db48-4adc-af09-7c574b37f139_N47PH-2Y8Q8-DGMMV-3PGD8-WB%f%6Q2_100_CoreSingleLanguage -b148c3f4-6248-4d2f-8c6d-31cce7ae95c3_N9722-BV9H6-WTJTT-FPB93-97%f%3PR_100_CoreSingleLanguage -903663f7-d2ab-49c9-8942-14aa9e0a9c72_VWCNX-7FKBD-FHJYG-XBR4B-88%f%GQH_101_Core -6496e59d-89dc-49eb-a353-09ceb9404845_HRNH7-WFBYW-BV7M2-XCT6H-X7%f%3PT_101_Core -cc17e18a-fa93-43d6-9179-72950a1e931a_FDF9N-KGHKC-R9G6Y-W2TGC-9Q%f%CCB_103_ProfessionalWMC -cf59a07b-1a2a-4be0-bfe0-423b5823e663_FDF9N-KGHKC-R9G6Y-W2TGC-9P%f%787_103_ProfessionalWMC -827a0032-dced-4609-ab6e-16b9d8a40280_CC92N-X2Y7W-H4H32-QHV2X-3R%f%TT9_111_CoreConnected -c436def1-0dcc-4849-9a59-8b6142eb70f3_2FNVD-CPYC6-WXD8M-T64BF-84%f%3GJ_111_CoreConnected -49066601-00dc-4d2c-83a8-4343a7b990d1_CF9DD-6CNW2-BJWJQ-CVCFX-Y7%f%WMR_112_ProfessionalStudent -fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8_HJN63-7Q4G4-VDW7X-TRMW8-GV%f%H3Q_112_ProfessionalStudent -f18bbe32-16dc-48d4-a27b-5f3966f82513_KJ3DB-VNXVJ-GJG94-RX4RF-K4%f%TVG_113_CoreConnectedN -86f72c8d-8363-4188-b574-1a53cb374711_JGRP6-TNJWX-KQWHJ-6D3FJ-RX%f%73B_113_CoreConnectedN -bd64ebf7-d5ec-44c5-ba00-6813441c8c87_4K89N-FMV8W-B3F9T-HKF64-DJ%f%34M_114_ProfessionalStudentN -687f6358-6a21-453a-a712-3b3b57123827_3K4DY-NVP2W-H8DGV-42K3B-2P%f%PK9_114_ProfessionalStudentN -964a60f6-1505-4ddb-af03-6a9ce6997d3b_NKX82-GPWWM-C2KPY-T4PKC-7C%f%FYJ_115_CoreConnectedSingleLanguage -5b120df4-ea3f-4e82-b0c0-6568f719730e_2N382-D6PKK-QTX4D-2JJYK-M9%f%73H_115_CoreConnectedSingleLanguage -b5fe5eaa-14cc-4075-84ae-57c0206d1133_BJMNR-F3WG7-H8W83-27XXK-P3%f%8MC_116_CoreConnectedCountrySpecific -a8651bfb-7fe0-40df-b156-87337ecd5acc_RPM6J-N62DM-DC6XH-2JXMG-23%f%66R_116_CoreConnectedCountrySpecific -5b2add49-b8f4-42e0-a77c-adad4efeeeb1_NT3V6-XMBK7-Q66MF-VMKR4-FC%f%26C_119_PPIPro -af43f7f0-3b1e-4266-a123-1fdb53f4323b_BNJR8-P8QHP-VQ4QY-MVPQP-8X%f%C37_121_Education -e8ced63e-420d-4ab6-8723-aaf165efb5eb_QBQ3Q-2NC74-MKH8F-DTQ34-QG%f%M3G_121_Education -075aca1f-05d7-42e5-a3ce-e349e7be7078_RFNBP-FDD7Q-6FHYQ-9M9Y7-MB%f%JH3_122_EducationN -3885bca5-11c1-4d4e-9395-df38f7f09a0e_7MFGN-34DMC-J8FCR-P4DKH-KH%f%J8F_122_EducationN -b995b62c-eae2-40aa-afb9-111889a84ef4_DW99Y-H7NT6-6B29D-8JQ8F-R3%f%K6T_124_ServerHI -2cf5af84-abab-4ff0-83f8-f040fb2576eb_NVYRQ-D2F32-6HGXW-DKGWM-R6%f%Y8H_125_EnterpriseS -75d003b0-dc66-42c0-b3a1-308a3f35741a_FQ32Q-MN6JD-FPVJ9-HJD4W-PK%f%CWY_125_EnterpriseS -11a37f09-fb7f-4002-bd84-f3ae71d11e90_NMBY8-V3CV7-BX6K6-2922Y-43%f%MCH_126_EnterpriseSN -4e4d5504-e7b1-419c-913d-3c80c15294fc_KGR4C-FWN4D-33RTK-XB6Q8-K2%f%FPT_126_EnterpriseSN -b15187db-11c6-4f13-91ca-8121cebf5b88_JBDKF-6NCD6-49K3G-2TV79-BK%f%PB4_127_ProfessionalS -aa234c15-ee34-4e5f-adb5-73afafb77143_DNJYG-CM8W6-4W3TX-VCK66-FV%f%WCC_127_ProfessionalS -6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b_2NWVW-QGF4T-9CPMB-WYDQ9-7X%f%PB8_128_ProfessionalSN -9f6a1bc9-5278-4991-88c9-7301c87a75ea_XB9DG-NPJ72-XRH69-7DF3Q-G8%f%3R4_128_ProfessionalSN -:: Missing keys for old preview editions -:: 38fbe2ac-465a-4ef7-b9d8-72044f2792b6 4 Enterprise -:: ea77973e-4930-4fa1-a899-02dfaeada1db 4 Enterprise -:: 92374131-ed4c-4d1b-846a-32f43c3eb90d 7 ServerStandard -:: cc64c548-1867-4777-a1cc-0022691bc2a0 8 ServerDatacenter -:: 9dce1f29-bb10-4be0-8027-35b953dd46d5 10 ServerEnterprise -:: bf9eda2f-74cc-4ba3-8967-cde30f18c230 15 ServerEnterpriseIA64 -:: 4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc 17 ServerWeb -:: 8372b47d-5221-41d8-88d0-3f924e50623e 18 ServerHPC -:: e4ecef68-4372-4740-98e8-6c157cd301c2 27 EnterpriseN -:: 957ec1e8-97cd-42a8-a091-01a30cf779da 48 Professional -:: 0ff4e536-a746-4018-b107-e81dd0b6d33a 49 ProfessionalN ::======================================================================================================================================== :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL From 00e81be52f4acc3a5e12be1e247797fa610108f9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 1 Sep 2024 02:39:12 +0530 Subject: [PATCH 83/91] Reword some sentences --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 22 +++++++++---------- .../Activators/HWID_Activation.cmd | 6 ++--- .../Activators/KMS38_Activation.cmd | 6 ++--- .../Activators/Ohook_Activation_AIO.cmd | 18 +++++++-------- .../Activators/Online_KMS_Activation.cmd | 10 ++++----- .../Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 7 files changed, 33 insertions(+), 33 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 3f75b5e..3649af5 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1438,7 +1438,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 your system to fix this error." +call :dk_color %Blue% "Restart your system using restart button to fix this error." set showfix=1 ) ) @@ -1599,7 +1599,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu ) if defined _sppint ( echo %_sppint% | find /i "PerfOptions" %nul% && ( -call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +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 ) || ( @@ -1685,7 +1685,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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 May Deactivate Later]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) @@ -2441,9 +2441,9 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then restart your system and try again." +call :dk_color %Blue% "If it is still not fixed, then Restart your system using restart button and try again." ) else ( -call :dk_color %Blue% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button and try again." ) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." @@ -2631,9 +2631,9 @@ 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, then restart your system and try again." +call :dk_color %Blue% "If it is still not fixed, then Restart your system using restart button and try again." ) else ( -if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system and try again." +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system using restart button 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: @@ -2922,13 +2922,13 @@ 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button and try again." ) exit /b @@ -7649,7 +7649,7 @@ echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( call :dk_color %Red% "[Failed]" -echo Restart your system, that will delete this registry key automatically. +echo Restart your system using restart button, that will delete this registry key automatically. ) || ( echo [Successful] ) @@ -8871,7 +8871,7 @@ for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% echo Failed to stop the TrustedInstaller service. -echo Restart your system and try again. +echo Restart your system using restart button and try again. set preperror=1 exit /b ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index c520226..2899e72 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1203,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 your system to fix this error." +call :dk_color %Blue% "Restart your system using restart button to fix this error." set showfix=1 ) ) @@ -1364,7 +1364,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu ) if defined _sppint ( echo %_sppint% | find /i "PerfOptions" %nul% && ( -call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +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 ) || ( @@ -1450,7 +1450,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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 May Deactivate Later]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 0869361..7611b55 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1346,7 +1346,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 your system to fix this error." +call :dk_color %Blue% "Restart your system using restart button to fix this error." set showfix=1 ) ) @@ -1507,7 +1507,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu ) if defined _sppint ( echo %_sppint% | find /i "PerfOptions" %nul% && ( -call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +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 ) || ( @@ -1593,7 +1593,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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 May Deactivate Later]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f15a121..aae4899 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -742,9 +742,9 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then restart your system and try again." +call :dk_color %Blue% "If it is still not fixed, then Restart your system using restart button and try again." ) else ( -call :dk_color %Blue% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button and try again." ) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." @@ -932,9 +932,9 @@ 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, then restart your system and try again." +call :dk_color %Blue% "If it is still not fixed, then Restart your system using restart button and try again." ) else ( -if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system and try again." +if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system using restart button 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: @@ -1223,13 +1223,13 @@ 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button and try again." ) exit /b @@ -1655,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 your system to fix this error." +call :dk_color %Blue% "Restart your system using restart button to fix this error." set showfix=1 ) ) @@ -1816,7 +1816,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu ) if defined _sppint ( echo %_sppint% | find /i "PerfOptions" %nul% && ( -call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +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 ) || ( @@ -1902,7 +1902,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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 May Deactivate Later]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 68c988a..0424c78 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1324,13 +1324,13 @@ 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button 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% "Restart your system and try again." +call :dk_color %Blue% "Restart your system using restart button and try again." ) exit /b @@ -2704,7 +2704,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 your system to fix this error." +call :dk_color %Blue% "Restart your system using restart button to fix this error." set showfix=1 ) ) @@ -2865,7 +2865,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu ) if defined _sppint ( echo %_sppint% | find /i "PerfOptions" %nul% && ( -call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System May Deactivate Later]" +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 ) || ( @@ -2951,7 +2951,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - 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 May Deactivate Later]" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 3f84673..6f496b3 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -700,7 +700,7 @@ for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% echo Failed to stop the TrustedInstaller service. -echo Restart your system and try again. +echo Restart your system using restart button and try again. set preperror=1 exit /b ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index ae67278..7a27c66 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -547,7 +547,7 @@ echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( call :dk_color %Red% "[Failed]" -echo Restart your system, that will delete this registry key automatically. +echo Restart your system using restart button, that will delete this registry key automatically. ) || ( echo [Successful] ) From 213bc50b4915baa4578c9501def2c3f1b27f849b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 1 Sep 2024 02:41:55 +0530 Subject: [PATCH 84/91] Update asdcorp's Set-WindowsCbsEdition link --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 3649af5..0a0199c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8962,7 +8962,7 @@ exit /b ::======================================================================================================================================== -:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition +:: https://github.com/asdcorp/Set-WindowsCbsEdition :cbsxml:[ param ( diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 6f496b3..50b69f0 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1004,7 +1004,7 @@ exit /b ::======================================================================================================================================== -:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition +:: https://github.com/asdcorp/Set-WindowsCbsEdition :cbsxml:[ param ( From fd8b81411c14e08ba302f893fcc318a1318129fc Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 1 Sep 2024 02:50:49 +0530 Subject: [PATCH 85/91] Reword the restart line --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 18 +++++++++--------- .../Activators/HWID_Activation.cmd | 2 +- .../Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 14 +++++++------- .../Activators/Online_KMS_Activation.cmd | 6 +++--- .../Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 0a0199c..6577247 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1438,7 +1438,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 your system using restart button to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) @@ -2441,9 +2441,9 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then Restart your system using restart button and try again." +call :dk_color %Blue% "If it is still not fixed, then Reboot your machine using the restart option and try again." ) else ( -call :dk_color %Blue% "Restart your system using restart button and try again." +call :dk_color %Blue% "Reboot your machine using the restart option and try again." ) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." @@ -2631,9 +2631,9 @@ 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, then Restart your system using restart button and try again." +call :dk_color %Blue% "If it is still not fixed, then Reboot your machine using the restart option and try again." ) else ( -if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system using restart button and try again." +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: @@ -2922,13 +2922,13 @@ 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% "Restart your system using restart button and try again." +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% "Restart your system using restart button and try again." +call :dk_color %Blue% "Reboot your machine using the restart option and try again." ) exit /b @@ -7649,7 +7649,7 @@ echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( call :dk_color %Red% "[Failed]" -echo Restart your system using restart button, that will delete this registry key automatically. +echo Reboot your machine using the restart option, that will delete this registry key automatically. ) || ( echo [Successful] ) @@ -8871,7 +8871,7 @@ for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% echo Failed to stop the TrustedInstaller service. -echo Restart your system using restart button and try again. +echo Reboot your machine using the restart option and try again. set preperror=1 exit /b ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2899e72..87871c3 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1203,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 your system using restart button to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 7611b55..fb870f5 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1346,7 +1346,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 your system using restart button to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index aae4899..c31b5d7 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -742,9 +742,9 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then Restart your system using restart button and try again." +call :dk_color %Blue% "If it is still not fixed, then Reboot your machine using the restart option and try again." ) else ( -call :dk_color %Blue% "Restart your system using restart button and try again." +call :dk_color %Blue% "Reboot your machine using the restart option and try again." ) ) else ( call :dk_color %Green% "Successfully uninstalled Ohook activation." @@ -932,9 +932,9 @@ 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, then Restart your system using restart button and try again." +call :dk_color %Blue% "If it is still not fixed, then Reboot your machine using the restart option and try again." ) else ( -if /i not "%ierror%"=="Copy" call :dk_color %Blue% "Restart your system using restart button and try again." +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: @@ -1223,13 +1223,13 @@ 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% "Restart your system using restart button and try again." +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% "Restart your system using restart button and try again." +call :dk_color %Blue% "Reboot your machine using the restart option and try again." ) exit /b @@ -1655,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 your system using restart button to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 0424c78..7e1f412 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1324,13 +1324,13 @@ 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% "Restart your system using restart button and try again." +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% "Restart your system using restart button and try again." +call :dk_color %Blue% "Reboot your machine using the restart option and try again." ) exit /b @@ -2704,7 +2704,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 your system using restart button to fix this error." +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 50b69f0..bf25353 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -700,7 +700,7 @@ for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time sc query TrustedInstaller | find /i "RUNNING" %nul% && ( %eline% echo Failed to stop the TrustedInstaller service. -echo Restart your system using restart button and try again. +echo Reboot your machine using the restart option and try again. set preperror=1 exit /b ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 7a27c66..a370876 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -547,7 +547,7 @@ echo Deleting a Volatile ^& Protected Registry Key... echo [%RegKey%] reg query "%RegKey%" %nul% && ( call :dk_color %Red% "[Failed]" -echo Restart your system using restart button, that will delete this registry key automatically. +echo Reboot your machine using the restart option, that will delete this registry key automatically. ) || ( echo [Successful] ) From 08443039aa1211bad52197716e40a1d0e4925b56 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 1 Sep 2024 03:24:58 +0530 Subject: [PATCH 86/91] Reword again --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 6577247..eb6d15f 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2441,7 +2441,7 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then Reboot your machine using the restart option 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." ) @@ -2631,7 +2631,7 @@ 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, then Reboot your machine using the restart option 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." diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index c31b5d7..8b6524c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -742,7 +742,7 @@ call :dk_color %Red% "Failed to uninstall Ohook activation." 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, then Reboot your machine using the restart option 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." ) @@ -932,7 +932,7 @@ 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, then Reboot your machine using the restart option 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." From 7044f37b441faba28ad583a14391029befc34ae5 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 5 Sep 2024 03:50:03 +0530 Subject: [PATCH 87/91] Add a line in main menu --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index eb6d15f..ce1047c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -313,7 +313,7 @@ goto dk_done cls color 07 title Microsoft %blank%Activation %blank%Scripts %masver% -if not defined terminal mode 76, 32 +if not defined terminal mode 76, 33 echo: echo: @@ -332,6 +332,8 @@ echo: 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 From 5d8a4634754d632df13b697c4cae96aecc730480 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 5 Sep 2024 04:44:49 +0530 Subject: [PATCH 88/91] Check signature of clipup.exe in Server Cor/Acor editions --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 15 +++++++++++++-- .../Activators/KMS38_Activation.cmd | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index ce1047c..f9d7f5e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3693,8 +3693,19 @@ if not exist "!_work!\clipup.exe" ( 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. -set fixes=%fixes% %mas%kms38 -echo %mas%kms38 +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" +goto dk_done +) +) + +:: Check file signature + +if defined a_cor ( +%psc% "if ((Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').Status -ne 'Valid') {Exit 3}" %nul% +if !errorlevel!==3 ( +%eline% +echo Valid digital signature not found in clipup.exe file. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index fb870f5..ec7d965 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -444,8 +444,19 @@ if not exist "!_work!\clipup.exe" ( 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. -set fixes=%fixes% %mas%kms38 -echo %mas%kms38 +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" +goto dk_done +) +) + +:: Check file signature + +if defined a_cor ( +%psc% "if ((Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').Status -ne 'Valid') {Exit 3}" %nul% +if !errorlevel!==3 ( +%eline% +echo Valid digital signature not found in clipup.exe file. +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) From 0afb09cbd1f31f15f82f07b10eb2b5014c9c3dca Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 5 Sep 2024 05:11:08 +0530 Subject: [PATCH 89/91] Use IsOSBinary check --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index f9d7f5e..28fb449 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3701,7 +3701,7 @@ goto dk_done :: Check file signature if defined a_cor ( -%psc% "if ((Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').Status -ne 'Valid') {Exit 3}" %nul% +%psc% "if (-not (Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').IsOSBinary) {Exit 3}" %nul% if !errorlevel!==3 ( %eline% echo Valid digital signature not found in clipup.exe file. diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index ec7d965..73c5dba 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -452,7 +452,7 @@ goto dk_done :: Check file signature if defined a_cor ( -%psc% "if ((Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').Status -ne 'Valid') {Exit 3}" %nul% +%psc% "if (-not (Get-AuthenticodeSignature -FilePath '!_work!\clipup.exe').IsOSBinary) {Exit 3}" %nul% if !errorlevel!==3 ( %eline% echo Valid digital signature not found in clipup.exe file. From ce669809bf05777230e71505e095a1bb7fc39eab Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 7 Sep 2024 06:03:06 +0530 Subject: [PATCH 90/91] 2.7 --- .gitattributes | 7 ++++--- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 10 files changed, 13 insertions(+), 12 deletions(-) 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/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 28fb449..05a9402 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,5 +1,5 @@ @::RANDOM-09dbb08f-d896-4653-b84f-24fc22f8d250 -@set masver=2.6 +@set masver=2.7 @setlocal DisableDelayedExpansion @echo off diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 87871c3..3cb7bc6 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 73c5dba..962a146 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 8b6524c..ec2e8c9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 7e1f412..306bb47 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 48ffc32..c10cfdf 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index bf25353..f32d110 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 2fb6381..53f68cd 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index a370876..46021c3 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=2.6 +@set masver=2.7 @echo off From b06c83622add745aed6d31149a79301664648437 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 7 Sep 2024 06:30:17 +0530 Subject: [PATCH 91/91] Update readme --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 1cda74e..374fa4e 100644 --- a/README.md +++ b/README.md @@ -14,19 +14,19 @@ ## Download / How to use it? -### Method 1 - PowerShell (Recommended) +### Method 1 - PowerShell (Windows 8 and later) ❤️ -- Right-click on the Windows start menu and select PowerShell or Terminal (Not CMD). -- Copy and paste the code below and press enter +1. Open PowerShell (Not CMD). To do that, right-click on the Windows start menu and select PowerShell or Terminal. +2. Copy and paste the code below and press enter ``` irm https://get.activated.win | iex ``` -or (deprecated, will be retired on Aug 31 2024, use above instead) +or (deprecated, will be retired on Dec 31 2024, use above instead) ``` irm https://massgrave.dev/get | iex ``` -- You will see the activation options. Follow the on-screen instructions. -- That's all. +3. You will see the activation options. Choose [1] HWID for Windows activation. Choose [2] Ohook for Office activation. +4. That's all. --- @@ -35,22 +35,22 @@ irm https://massgrave.dev/get | iex - The Powershell method does not work on Windows 7. Use the Method 2 - Traditional instead. - The URL get.activated.win may be blocked by some DNS services because it is a new domain. -### Method 2 - Traditional +### Method 2 - Traditional (Windows 7 and later) -- Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Bitbucket](https://bitbucket.org/WindowsAddict/microsoft-activation-scripts) -- Right-click on the downloaded zip file and extract -- In the extracted folder, find the folder named `All-In-One-Version` -- Run the file named `MAS_AIO-CRC32_XXXXXXXX.cmd` -- You will see the activation options, follow the on-screen instructions. -- That's all. +1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Bitbucket](https://bitbucket.org/WindowsAddict/microsoft-activation-scripts) or [Codeberg](https://codeberg.org/massgravel/Microsoft-Activation-Scripts) +2. Right-click on the downloaded zip file and extract +3. In the extracted folder, find the folder named `All-In-One-Version` +4. Run the file named `MAS_AIO.cmd` +5. You will see the activation options, follow the on-screen instructions. +6. That's all. To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches)
``` -Latest Version: 2.6 -Release date: 20-Apr-2024 +Latest Version: 2.7 +Release date: 6-Sep-2024 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot)