mirror of
https://github.com/massgravel/Microsoft-Activation-Scripts.git
synced 2026-01-14 20:11:46 +00:00
Compare commits
25 Commits
10b6e8b6dc
...
3.5
| Author | SHA1 | Date | |
|---|---|---|---|
| 793550725a | |||
| 3917497c82 | |||
| 28c2264d89 | |||
| a51ae62332 | |||
| ffcb641f17 | |||
| 53a2747338 | |||
| 3a99ea4eeb | |||
| e6eaeaa682 | |||
| e2c52b4ac8 | |||
| 31c47b9538 | |||
| 904e96d748 | |||
| 5e2cc4f5cf | |||
| c619a2c381 | |||
| 9c09432b01 | |||
| e476ac66a4 | |||
| dba7213a91 | |||
| 0f38fa3cef | |||
| 2dd41cc2c5 | |||
| d78e262f5b | |||
| fd1e146753 | |||
| bc781ad079 | |||
| 43cceb366e | |||
| 39bcefa02b | |||
| 2b37400aa8 | |||
| 1fb65d4f9c |
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -1,4 +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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,11 @@
|
||||
@set masver=3.4
|
||||
@set masver=3.5
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
::============================================================================
|
||||
::
|
||||
:: Homepage: mass grave[.]dev
|
||||
:: Homepage: mass<>grave<.>dev
|
||||
:: Email: mas.help@outlook.com
|
||||
::
|
||||
::============================================================================
|
||||
@ -50,6 +50,7 @@ set "_cmdf=%~f0"
|
||||
for %%# in (%*) do (
|
||||
if /i "%%#"=="re1" set re1=1
|
||||
if /i "%%#"=="re2" set re2=1
|
||||
if /i "%%#"=="-qedit" (set re1=1&set re2=1)
|
||||
)
|
||||
|
||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||
@ -173,6 +174,16 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
|
||||
sc query gcs | find /i "RUNNING" %nul% && (
|
||||
%eline%
|
||||
echo Windows Sandbox detected; activation is not supported.
|
||||
echo The script cannot run due to missing licensing components. Aborting...
|
||||
echo:
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LSS 10240 (
|
||||
%eline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -237,7 +248,7 @@ goto dk_done
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';& ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
@ -261,6 +272,9 @@ REM check Powershell core version
|
||||
|
||||
cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
|
||||
echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -275,13 +289,26 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check if .NET is working properly
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
|
||||
if !errorlevel!==3 (
|
||||
echo Windows Powershell failed to load .NET command. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
echo:
|
||||
echo Your antivirus software might be blocking the script, or PowerShell on your system might be corrupted.
|
||||
echo Your antivirus software might be blocking the script.
|
||||
echo:
|
||||
sc query sense | find /i "RUNNING" %nul% && (
|
||||
echo Installed Antivirus - Microsoft Defender for Endpoint
|
||||
@ -511,7 +538,7 @@ 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=[System.IO.File]::ReadAllText('!_batp!') -split ':getactivationid\:.*';& ([scriptblock]::Create($f[1]))"') do (set altapplist=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getactivationid\:.*';. ([scriptblock]::Create($f[1]))"') do (set altapplist=%%a)
|
||||
if defined altapplist call :hwiddata key
|
||||
)
|
||||
|
||||
@ -648,7 +675,9 @@ call :dk_color %Red% "Checking Ticket Migration [Failed]"
|
||||
|
||||
if not defined altapplist if not defined showfix if defined rebuildinfo (
|
||||
set showfix=1
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
echo:
|
||||
)
|
||||
|
||||
if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
|
||||
@ -718,8 +747,10 @@ licensing.mp.microsoft.com
|
||||
findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Blocked in Hosts]"
|
||||
)
|
||||
call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!"
|
||||
echo:
|
||||
set fixes=%fixes% %mas%licensing-servers-issue
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue"
|
||||
echo:
|
||||
)
|
||||
|
||||
::==========================================================================================================================================
|
||||
@ -732,13 +763,17 @@ reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWin
|
||||
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]"
|
||||
echo:
|
||||
call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it."
|
||||
echo:
|
||||
)
|
||||
|
||||
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]"
|
||||
echo:
|
||||
call :dk_color %Blue% "If you have used any tool to block Store, undo it."
|
||||
echo:
|
||||
)
|
||||
|
||||
set wcount=0
|
||||
@ -755,10 +790,14 @@ set error=1
|
||||
call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]"
|
||||
if !wcount! GTR 2 (
|
||||
call :dk_color %Red% "Windows seems to be infected with Mal%w%ware."
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
) else (
|
||||
echo:
|
||||
call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it."
|
||||
echo:
|
||||
)
|
||||
) else (
|
||||
%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null"
|
||||
@ -767,7 +806,9 @@ set error=1
|
||||
set wuerror=1
|
||||
sc start wuauserv %nul%
|
||||
call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]"
|
||||
echo:
|
||||
call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it."
|
||||
echo:
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -780,8 +821,10 @@ if %keyerror% EQU 0 if not defined _perm if defined _int (
|
||||
if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock if not defined resfail (
|
||||
echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && (
|
||||
call :dk_color %Red% "Checking Internet Issues [Found] %error_code%"
|
||||
echo:
|
||||
set fixes=%fixes% %mas%licensing-servers-issue
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue"
|
||||
echo:
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -836,7 +879,7 @@ goto :dk_done
|
||||
set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
|
||||
set psc=%ps% -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
|
||||
|
||||
set _slexe=sppsvc.exe& set _slser=sppsvc
|
||||
if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
|
||||
@ -925,7 +968,7 @@ for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Con
|
||||
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=[System.IO.File]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';& ([scriptblock]::Create($f[1]))" %nul2% | find /i "Subscription_is_activated" %nul% && (
|
||||
if %winbuild% GEQ 15063 %psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';. ([scriptblock]::Create($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%
|
||||
@ -988,9 +1031,11 @@ if %sps%==SoftwareLicensingService call :dk_refresh
|
||||
echo %keyecho% %~1 [Successful]
|
||||
) else (
|
||||
call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%"
|
||||
if not defined error (
|
||||
if not defined showfix (
|
||||
if defined altapplist call :dk_color %Red% "Activation ID not found for this key."
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
echo:
|
||||
set showfix=1
|
||||
)
|
||||
set error=1
|
||||
@ -1191,6 +1236,7 @@ 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 showfix=1)
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
@ -1211,40 +1257,118 @@ 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 %Red% "Checking Sandboxing [Found, script may not work properly]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
::==============================
|
||||
|
||||
:: Check WinPE mode
|
||||
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && (
|
||||
|
||||
call :dk_color %Red% "Checking WinPE [Found]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "WinPE mode found. Reboot the system and run in normal mode."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check Safe mode
|
||||
|
||||
if defined safeboot_option (
|
||||
call :dk_color %Red% "Checking Boot Mode [%safeboot_option%]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "Safe mode found. Reboot the system and run in normal mode."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check ImageState
|
||||
:: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-states
|
||||
|
||||
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" (
|
||||
call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]"
|
||||
echo "%imagestate%" | find /i "RESEAL" %nul% && (
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && (
|
||||
if not defined showfix (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
echo:
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check corrupt services
|
||||
|
||||
set serv_cor=
|
||||
for %%# in (%_serv%) do (
|
||||
set _regcorr=
|
||||
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
|
||||
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _regcorr (
|
||||
reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1&set _regcorr=-RegistryError)
|
||||
)
|
||||
|
||||
if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#"))
|
||||
if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#!_regcorr!") else (set "serv_cor=%%#!_regcorr!"))
|
||||
)
|
||||
|
||||
if defined serv_cor (
|
||||
set error=1
|
||||
set showfix=1
|
||||
call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]"
|
||||
|
||||
if not defined showfix (
|
||||
echo:
|
||||
if /i "%serv_cor%"=="sppsvc-RegistryError" (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
) else (
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
)
|
||||
echo:
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check disabled services
|
||||
|
||||
@ -1279,11 +1403,26 @@ 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%]"
|
||||
|
||||
if not defined showfix (
|
||||
echo:
|
||||
echo %serv_cste% | findstr /i "ClipSVC sppsvc" %nul% && (
|
||||
echo A registry fix has been applied to enable the disabled service.
|
||||
echo:
|
||||
call :dk_color %Blue% "Reboot your machine using the restart option to fix this error."
|
||||
) || (
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
)
|
||||
echo:
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: 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
|
||||
@ -1305,119 +1444,25 @@ if defined checkerror if defined serv_e (set "serv_e=!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% "Reboot your machine using the restart option to fix this error."
|
||||
|
||||
if not defined showfix (
|
||||
set listwospp=%_serv:sppsvc=%
|
||||
echo %serv_e% | findstr /i "!listwospp!" %nul% && (
|
||||
set showfix=1
|
||||
)
|
||||
echo %serv_e% | findstr /i "sppsvc-1060" %nul% && (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
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.]"
|
||||
)
|
||||
|
||||
|
||||
:: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-states
|
||||
|
||||
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" (
|
||||
call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]"
|
||||
echo "%imagestate%" | find /i "RESEAL" %nul% && (
|
||||
set error=1
|
||||
set showfix=1
|
||||
call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode."
|
||||
)
|
||||
echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && (
|
||||
echo:
|
||||
call :dk_color %Blue% "Reboot your machine using the restart option and run the script again."
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
call :dk_color2 %Blue% "If service error is still not fixed, do this - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
echo:
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
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=[System.IO.File]::ReadAllText('!_batp!') -split ':wpatest\:.*';& ([scriptblock]::Create($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 notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || (
|
||||
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% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
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 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 notwinact (
|
||||
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" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" (
|
||||
set skunotfound=1
|
||||
call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]"
|
||||
)
|
||||
|
||||
if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" (
|
||||
if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" (
|
||||
call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if %_wmic% EQU 1 wmic path %sps% get Version %nul%
|
||||
if %_wmic% EQU 0 %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%"
|
||||
)
|
||||
|
||||
:: Check WMI
|
||||
|
||||
set wmifailed=
|
||||
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1%
|
||||
@ -1425,166 +1470,94 @@ if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Objec
|
||||
|
||||
if %errorlevel% NEQ 0 set wmifailed=1
|
||||
echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %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 notwinact (
|
||||
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%]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option."
|
||||
echo:
|
||||
)
|
||||
) 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" (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
)
|
||||
|
||||
|
||||
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || (
|
||||
set error=1
|
||||
set showfix=1
|
||||
call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]"
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
)
|
||||
|
||||
|
||||
for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do (
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#"))
|
||||
)
|
||||
if defined _sppint (
|
||||
echo %_sppint% | find /i "PerfOptions" %nul% && (
|
||||
call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]"
|
||||
if not defined showfix call :dk_color %Blue% "%_fixmsg%"
|
||||
set showfix=1
|
||||
) || (
|
||||
echo Checking SPP In IFEO [%_sppint%]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if %winbuild% GEQ 7600 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 20 | Out-Null"
|
||||
)
|
||||
|
||||
:: Check SPP Registry Key
|
||||
|
||||
if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || (
|
||||
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]"
|
||||
call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found] [Most likely caused by gaming spoofers]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%issues_due_to_gaming_spoofers
|
||||
call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check TokenStore registry key
|
||||
|
||||
set tokenstore=
|
||||
if %winbuild% GEQ 7600 (
|
||||
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" (
|
||||
call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
echo:
|
||||
)
|
||||
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% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: This code creates token folder only if it's missing and sets default permission for it
|
||||
|
||||
if %winbuild% GEQ 7600 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%\]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if not defined notwinact (
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
if not defined apps (
|
||||
%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';& ([scriptblock]::Create($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 error=1
|
||||
set "_notfoundids=Not found"
|
||||
)
|
||||
call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if %winbuild% GEQ 7600 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" (
|
||||
%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || (
|
||||
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
|
||||
if "!taskinfo!"=="" set "taskinfo=Not Found"
|
||||
call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]"
|
||||
if not defined error call :dk_color %Blue% "Reboot your machine using the restart option."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: 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 if not defined ps32onArm (
|
||||
if %winbuild% GEQ 9200 if not defined toerr if not defined ps32onArm if exist "%tokenstore%\" (
|
||||
for %%# in (
|
||||
"%tokenstore%+FullControl"
|
||||
"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey"
|
||||
@ -1612,29 +1585,296 @@ 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
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
|
||||
if not defined showfix if defined wpaerror (
|
||||
::==============================
|
||||
|
||||
:: Check WPA Registry Errors
|
||||
|
||||
set chkalp=
|
||||
set wpainfo=NotFound
|
||||
for /f "delims=" %%a in ('%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':wpatest\:.*';. ([scriptblock]::Create($f[1]))" %nul6%') do (set wpainfo=%%a)
|
||||
for /f "delims=0123456789" %%i in ("%wpainfo%") do set chkalp=%%i
|
||||
|
||||
if defined chkalp (
|
||||
call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]"
|
||||
if not defined showfix (
|
||||
echo "%wpainfo%" | find /i "Error Found" %nul% && (
|
||||
echo:
|
||||
call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option."
|
||||
echo:
|
||||
set error=1
|
||||
set showfix=1
|
||||
call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option."
|
||||
)
|
||||
)
|
||||
set wpainfo=a
|
||||
)
|
||||
|
||||
if not defined chkalp (
|
||||
if %wpainfo% GEQ 5000 (
|
||||
call :dk_color %Gray% "Checking WPA Registry Count [%wpainfo%]"
|
||||
echo:
|
||||
call :dk_color %Blue% "A large number of WPA registries have been found, which may cause high CPU usage."
|
||||
call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option."
|
||||
echo:
|
||||
) else (
|
||||
echo Checking WPA Registry Count [%wpainfo%]
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check Rearm
|
||||
|
||||
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
|
||||
call :dk_color %Red% "Checking Rearm [System is Rearmed]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "Reboot your machine using the restart option to fix this error."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
|
||||
call :dk_color %Red% "Checking ClipSVC PersistedSystemState [Found]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "Reboot your machine using the restart option to fix this error."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check SoftwareLicensingService
|
||||
|
||||
if %_wmic% EQU 1 wmic path %sps% get Version %nul%
|
||||
if %_wmic% EQU 0 %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 (
|
||||
call :dk_color %Red% "Checking SoftwareLicensingService [Not Working] [%error_code%]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check Activation IDs
|
||||
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
|
||||
if not defined apps (
|
||||
%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';. ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
|
||||
if not defined _vis if !errorlevel! NEQ 0 set rlicfailed=1
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
)
|
||||
|
||||
if not defined apps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
|
||||
if not defined apps if defined allapps if not defined notwinact (
|
||||
call :dk_color %Gray% "Checking Activation IDs [Key Not Installed or Act ID Not Found]"
|
||||
)
|
||||
|
||||
if not defined apps if not defined allapps (
|
||||
call :dk_color %Red% "Checking Activation IDs [Not found]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
if not defined showfix if defined rlicfailed (
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option."
|
||||
echo:
|
||||
)
|
||||
|
||||
if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||
call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]"
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check Eval Windows
|
||||
|
||||
if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || (
|
||||
call :dk_color %Red% "Checking Eval Packages [License swapping found. Non-Eval licenses are installed in Eval Windows]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "License swapping is not the right way to upgrade to the full version. Learn the correct method at the link below."
|
||||
set fixes=%fixes% %mas%evaluation_editions
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check HKU\S-1-5-20\Software registry, in some systems it's missing and that causes Windows activation problems
|
||||
|
||||
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || (
|
||||
call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
echo:
|
||||
)
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check license and package files for the current edition
|
||||
|
||||
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 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 notwinact (
|
||||
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" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" (
|
||||
set skunotfound=1
|
||||
call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]"
|
||||
)
|
||||
if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" (
|
||||
if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" (
|
||||
call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check SKU value to find if there is any difference
|
||||
|
||||
if not defined notwinact (
|
||||
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%]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: 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" (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check SPP interference in IFEO
|
||||
|
||||
for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do (
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#"))
|
||||
)
|
||||
if defined _sppint (
|
||||
echo %_sppint% | find /i "PerfOptions" %nul% && (
|
||||
call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "%_fixmsg%"
|
||||
echo:
|
||||
)
|
||||
set showfix=1
|
||||
) || (
|
||||
echo Checking SPP In IFEO [%_sppint%]
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check and fix SkipRearm registry value
|
||||
|
||||
if %winbuild% GEQ 7600 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 %Gray% "Checking SkipRearm [Default 0 Value Not Found. Changing To 0]"
|
||||
%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null"
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
:: Check SvcRestartTask status, this task helps in making sure system remains activated
|
||||
|
||||
if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || (
|
||||
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
|
||||
if "!taskinfo!"=="" set "taskinfo=Not Found"
|
||||
|
||||
call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, system might deactivate later]"
|
||||
if not defined showfix (
|
||||
echo:
|
||||
call :dk_color %Blue% "Reboot your machine using the restart option and run the script again."
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
echo:
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
::==============================
|
||||
|
||||
exit /b
|
||||
|
||||
@ -1745,7 +1985,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#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)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,11 @@
|
||||
@set masver=3.4
|
||||
@set masver=3.5
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
::============================================================================
|
||||
::
|
||||
:: Homepage: mass grave[.]dev
|
||||
:: Homepage: mass<>grave<.>dev
|
||||
:: Email: mas.help@outlook.com
|
||||
::
|
||||
::============================================================================
|
||||
@ -37,6 +37,7 @@ set "_cmdf=%~f0"
|
||||
for %%# in (%*) do (
|
||||
if /i "%%#"=="re1" set re1=1
|
||||
if /i "%%#"=="re2" set re2=1
|
||||
if /i "%%#"=="-qedit" (set re1=1&set re2=1)
|
||||
)
|
||||
|
||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||
@ -135,6 +136,16 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
|
||||
sc query gcs | find /i "RUNNING" %nul% && (
|
||||
%eline%
|
||||
echo Windows Sandbox detected.
|
||||
echo The script cannot run due to missing licensing components. Aborting...
|
||||
echo:
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%eline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -190,7 +201,7 @@ goto dk_done
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';& ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
@ -214,6 +225,9 @@ REM check Powershell core version
|
||||
|
||||
cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
|
||||
echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -228,13 +242,26 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check if .NET is working properly
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
|
||||
if !errorlevel!==3 (
|
||||
echo Windows Powershell failed to load .NET command. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
echo:
|
||||
echo Your antivirus software might be blocking the script, or PowerShell on your system might be corrupted.
|
||||
echo Your antivirus software might be blocking the script.
|
||||
echo:
|
||||
sc query sense | find /i "RUNNING" %nul% && (
|
||||
echo Installed Antivirus - Microsoft Defender for Endpoint
|
||||
@ -549,9 +576,10 @@ goto :oe_edition
|
||||
:oe_editionchangepre
|
||||
|
||||
cls
|
||||
set editedition=
|
||||
call :ch_getinfo
|
||||
call :oe_tempcleanup
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getlist\:.*';& ([scriptblock]::Create($f[1]))"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getlist\:.*';. ([scriptblock]::Create($f[1]))"
|
||||
|
||||
:oe_editionchange
|
||||
|
||||
@ -625,7 +653,7 @@ cls
|
||||
set suites=
|
||||
echo %list% | find /i "Suites" %nul1% && (
|
||||
set suites=1
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getappnames\:.*';& ([scriptblock]::Create($f[1]))"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getappnames\:.*';. ([scriptblock]::Create($f[1]))"
|
||||
if not exist %SystemRoot%\Temp\getAppIds.txt (
|
||||
%eline%
|
||||
echo Failed to generate available apps list.
|
||||
@ -667,7 +695,8 @@ 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."
|
||||
call :dk_color %Gray% "To exclude the apps listed below from installation, toggle them from On to Off."
|
||||
if defined editedition call :dk_color %Gray% "Note: The On/Off status below does not reflect the current status of the installed apps."
|
||||
%line%
|
||||
if defined suites echo:
|
||||
if defined Access_st echo [A] Access : %Access_st%
|
||||
@ -794,7 +823,9 @@ goto :oe_goback
|
||||
:: 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"
|
||||
call :oe_getlangs
|
||||
|
||||
set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_allLangs% 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"
|
||||
@ -866,6 +897,7 @@ goto :oe_goback
|
||||
)
|
||||
|
||||
set change=0
|
||||
set editedition=1
|
||||
call :ch_getinfo
|
||||
cls
|
||||
|
||||
@ -971,13 +1003,8 @@ 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%"
|
||||
call :oe_getlangs %targetedition%
|
||||
set "c2rcommand="%_c2rExe%" platform=%_oArch% productstoremove=%targetedition%.16_%_allLangs%"
|
||||
|
||||
echo:
|
||||
echo Running the below command, please wait...
|
||||
@ -1106,7 +1133,7 @@ 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=[System.IO.File]::ReadAllText('!_batp!') -split ':getbuild\:.*';& ([scriptblock]::Create($f[1]))" %nul6%') do (set build=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getbuild\:.*';. ([scriptblock]::Create($f[1]))" %nul6%') do (set build=%%a)
|
||||
echo "%build%" | find /i "16." %nul% || set build=
|
||||
|
||||
echo:
|
||||
@ -1160,7 +1187,19 @@ goto :oe_goback
|
||||
set buildchk=0
|
||||
for /f "tokens=3 delims=." %%a in ("%build%") do set "buildchk=%%a"
|
||||
|
||||
set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%_firstoId%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% baseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% version.16=%build% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%targetFFN% %_firstoId%.excludedapps.16=%_firstoIdExcludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled"
|
||||
call :oe_getlangs %_firstoId%
|
||||
|
||||
echo %targetchannel% | find /i "2019 VL" %nul% && (
|
||||
for %%A in (en-gb es-mx fr-ca) do (
|
||||
echo %_allLangs% | find /i "%%A" %nul% && (
|
||||
%eline%
|
||||
echo [%%A] language is not supported on the Office 2019 Perpetual VL update channel. Aborting...
|
||||
goto :oe_goback
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%_firstoId%.16_%_allLangs% cdnbaseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% baseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% version.16=%build% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%targetFFN% %_firstoId%.excludedapps.16=%_firstoIdExcludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled"
|
||||
set "c2rclientupdate=!c2rcommand! scenario=CLIENTUPDATE"
|
||||
|
||||
if %clverchk% LSS %buildchk% (
|
||||
@ -1342,6 +1381,27 @@ exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check all the installed languages
|
||||
|
||||
:oe_getlangs
|
||||
|
||||
if "%1"=="" (
|
||||
set langreg=culture
|
||||
) else (
|
||||
set langreg=%1.16
|
||||
)
|
||||
|
||||
set _allLangs=
|
||||
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%\%langreg%" /f "-" /k ^| findstr /i "%langreg%\\.*-.*"') do (
|
||||
if defined _allLangs (set "_allLangs=!_allLangs!_%%a") else (set "_allLangs=%%a")
|
||||
)
|
||||
|
||||
set _allLangs=%_allLangs:.16=%
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check Internet connection
|
||||
|
||||
:oe_chkinternet
|
||||
@ -1488,7 +1548,7 @@ if ($appIdsList.Count -gt 0) {
|
||||
set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
|
||||
set psc=%ps% -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
|
||||
|
||||
set _slexe=sppsvc.exe& set _slser=sppsvc
|
||||
if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
@set masver=3.4
|
||||
@set masver=3.5
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
::============================================================================
|
||||
::
|
||||
:: Homepage: mass grave[.]dev
|
||||
:: Homepage: mass<>grave<.>dev
|
||||
:: Email: mas.help@outlook.com
|
||||
::
|
||||
::============================================================================
|
||||
@ -42,6 +42,7 @@ set "_cmdf=%~f0"
|
||||
for %%# in (%*) do (
|
||||
if /i "%%#"=="re1" set re1=1
|
||||
if /i "%%#"=="re2" set re2=1
|
||||
if /i "%%#"=="-qedit" (set re1=1&set re2=1)
|
||||
)
|
||||
|
||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||
@ -140,6 +141,16 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
|
||||
sc query gcs | find /i "RUNNING" %nul% && (
|
||||
%eline%
|
||||
echo Windows Sandbox detected.
|
||||
echo The script cannot run due to missing licensing components. Aborting...
|
||||
echo:
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%eline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -195,7 +206,7 @@ goto dk_done
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';& ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
@ -219,6 +230,9 @@ REM check Powershell core version
|
||||
|
||||
cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
|
||||
echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -233,13 +247,26 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check if .NET is working properly
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
|
||||
if !errorlevel!==3 (
|
||||
echo Windows Powershell failed to load .NET command. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
echo:
|
||||
echo Your antivirus software might be blocking the script, or PowerShell on your system might be corrupted.
|
||||
echo Your antivirus software might be blocking the script.
|
||||
echo:
|
||||
sc query sense | find /i "RUNNING" %nul% && (
|
||||
echo Installed Antivirus - Microsoft Defender for Endpoint
|
||||
@ -451,7 +478,7 @@ 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=[System.IO.File]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget= !_ptarget! %%a ") else (set "_ptarget= %%a "))
|
||||
if %winbuild% LSS 10240 for /f "tokens=4" %%a in ('%psc% "$f=[System.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" (
|
||||
if %winbuild% GEQ 17063 call :ced_edilist
|
||||
@ -657,7 +684,7 @@ echo:
|
||||
call :ced_prep
|
||||
if defined preperror goto dk_done
|
||||
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':dismapi\:.*';& ([ScriptBlock]::Create($f[1])) %targetedition% %key%"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':dismapi\:.*';. ([scriptblock]::Create($f[1])) %targetedition% %key%"
|
||||
call :ced_postprep
|
||||
)
|
||||
%line%
|
||||
@ -695,7 +722,7 @@ call :ced_prep
|
||||
if defined preperror goto dk_done
|
||||
|
||||
if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':cbsxml\:.*';. ([scriptblock]::Create($f[1])) -SetEdition %targetedition% %stage%"
|
||||
call :ced_postprep
|
||||
%line%
|
||||
|
||||
@ -844,7 +871,7 @@ exit /b
|
||||
set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
|
||||
set psc=%ps% -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
|
||||
|
||||
set _slexe=sppsvc.exe& set _slser=sppsvc
|
||||
if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
|
||||
@ -1361,55 +1388,55 @@ if %winbuild% GEQ 22000 exit /b
|
||||
)
|
||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
|
||||
|
||||
set h=
|
||||
set w=
|
||||
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
|
||||
KCNVH-YKWX8-GJJB9-H9FDT-6F7%h%W2__Volume:MAK_EnterpriseS_VB
|
||||
43TBQ-NH92J-XKTM7-KT3KK-P39%h%PB__OEM:NONSLP_EnterpriseS_RS5
|
||||
NK96Y-D9CD8-W44CQ-R8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1
|
||||
FWN7H-PF93Q-4GGP8-M8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH
|
||||
RQFNW-9TPM3-JQ73T-QV4VQ-DV9%h%PT__Volume:MAK_EnterpriseSN_VB
|
||||
M33WV-NHY3C-R7FPM-BQGPT-239%h%PG__Volume:MAK_EnterpriseSN_RS5
|
||||
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
|
||||
XQQYW-NFFMW-XJPBH-K8732-CKF%h%FD______OEM:DM_IoTEnterprise
|
||||
QPM6N-7J2WJ-P88HH-P3YRH-YY7%h%4H__OEM:NONSLP_IoTEnterpriseS
|
||||
K9VKN-3BGWV-Y624W-MCRMQ-BHD%h%CD______Retail_CloudEditionN
|
||||
KY7PN-VR6RX-83W6Y-6DDYQ-T6R%h%4W______Retail_CloudEdition
|
||||
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
|
||||
XGVPP-NMH47-7TTHJ-W3FW7-8HV%w%2C__OEM:NONSLP_Enterprise
|
||||
D6RD9-D4N8T-RT9QX-YW6YT-FCW%w%WJ______Retail_Starter
|
||||
3V6Q6-NQXCX-V8YXR-9QCYV-QPF%w%CT__Volume:MAK_EnterpriseN
|
||||
3NFXW-2T27M-2BDW6-4GHRV-68X%w%RX______Retail_StarterN
|
||||
VK7JG-NPHTM-C97JM-9MPGT-3V6%w%6T______Retail_Professional
|
||||
2B87N-8KFHP-DKV6R-Y2C8J-PKC%w%KT______Retail_ProfessionalN
|
||||
4CPRK-NM3K3-X6XXQ-RXX86-WXC%w%HW______Retail_CoreN
|
||||
N2434-X9D7W-8PF6X-8DV9T-8TY%w%MD______Retail_CoreCountrySpecific
|
||||
BT79Q-G7N6G-PGBYW-4YWX6-6F4%w%BT______Retail_CoreSingleLanguage
|
||||
YTMG3-N6DKC-DKB77-7M9GH-8HV%w%X7______Retail_Core
|
||||
XKCNC-J26Q9-KFHD2-FKTHY-KD7%w%2Y__OEM:NONSLP_PPIPro
|
||||
YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%w%BY______Retail_Education
|
||||
84NGF-MHBT6-FXBX8-QWJK7-DRR%w%8H______Retail_EducationN
|
||||
KCNVH-YKWX8-GJJB9-H9FDT-6F7%w%W2__Volume:MAK_EnterpriseS_VB
|
||||
43TBQ-NH92J-XKTM7-KT3KK-P39%w%PB__OEM:NONSLP_EnterpriseS_RS5
|
||||
NK96Y-D9CD8-W44CQ-R8YTK-DYJ%w%WX__OEM:NONSLP_EnterpriseS_RS1
|
||||
FWN7H-PF93Q-4GGP8-M8RF3-MDW%w%WW__OEM:NONSLP_EnterpriseS_TH
|
||||
RQFNW-9TPM3-JQ73T-QV4VQ-DV9%w%PT__Volume:MAK_EnterpriseSN_VB
|
||||
M33WV-NHY3C-R7FPM-BQGPT-239%w%PG__Volume:MAK_EnterpriseSN_RS5
|
||||
2DBW3-N2PJG-MVHW3-G7TDK-9HK%w%R4__Volume:MAK_EnterpriseSN_RS1
|
||||
NTX6B-BRYC2-K6786-F6MVQ-M7V%w%2X__Volume:MAK_EnterpriseSN_TH
|
||||
G3KNM-CHG6T-R36X3-9QDG6-8M8%w%K9______Retail_ProfessionalSingleLanguage
|
||||
HNGCC-Y38KG-QVK8D-WMWRK-X86%w%VK______Retail_ProfessionalCountrySpecific
|
||||
DXG7C-N36C4-C4HTG-X4T3X-2YV%w%77______Retail_ProfessionalWorkstation
|
||||
WYPNQ-8C467-V2W6J-TX4WX-WT2%w%RQ______Retail_ProfessionalWorkstationN
|
||||
8PTT6-RNW4C-6V7J2-C2D3X-MHB%w%PB______Retail_ProfessionalEducation
|
||||
GJTYN-HDMQY-FRR76-HVGC7-QPF%w%8P______Retail_ProfessionalEducationN
|
||||
C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%w%JC__Volume:MAK_EnterpriseG
|
||||
46PN6-R9BK9-CVHKB-HWQ9V-MBJ%w%Y8__Volume:MAK_EnterpriseGN
|
||||
NJCF7-PW8QT-3324D-688JX-2YV%w%66______Retail_ServerRdsh
|
||||
XQQYW-NFFMW-XJPBH-K8732-CKF%w%FD______OEM:DM_IoTEnterprise
|
||||
QPM6N-7J2WJ-P88HH-P3YRH-YY7%w%4H__OEM:NONSLP_IoTEnterpriseS
|
||||
K9VKN-3BGWV-Y624W-MCRMQ-BHD%w%CD______Retail_CloudEditionN
|
||||
KY7PN-VR6RX-83W6Y-6DDYQ-T6R%w%4W______Retail_CloudEdition
|
||||
V3WVW-N2PV2-CGWC3-34QGF-VMJ%w%2C______Retail_Cloud
|
||||
NH9J3-68WK7-6FB93-4K3DF-DJ4%w%F6______Retail_CloudN
|
||||
2HN6V-HGTM8-6C97C-RK67V-JQP%w%FD______Retail_CloudE
|
||||
WC2BQ-8NRM3-FDDYY-2BFGV-KHK%w%QY_Volume:GVLK_ServerStandard%Cor%_RS1
|
||||
CB7KF-BWN84-R7R2Y-793K2-8XD%w%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1
|
||||
JCKRF-N37P4-C2D82-9YXRT-4M6%w%3B_Volume:GVLK_ServerSolution_RS1
|
||||
QN4C6-GBJD2-FB422-GHWJK-GJG%w%2R_Volume:GVLK_ServerCloudStorage_RS1
|
||||
VP34G-4NPPG-79JTQ-864T4-R3M%w%QX_Volume:GVLK_ServerAzureCor_RS1
|
||||
9JQNQ-V8HQ6-PKB8H-GGHRY-R62%w%H6______Retail_ServerAzureNano_RS1
|
||||
VN8D3-PR82H-DB6BJ-J9P4M-92F%w%6J______Retail_ServerStorageStandard_RS1
|
||||
48TQX-NVK3R-D8QR3-GTHHM-8FH%w%XC______Retail_ServerStorageWorkgroup_RS1
|
||||
2HXDN-KRXHB-GPYC7-YCKFJ-7FV%w%DG_Volume:GVLK_ServerDatacenterACor_RS3
|
||||
PTXN8-JFHJM-4WC78-MPCBR-9W4%w%KR_Volume:GVLK_ServerStandardACor_RS3
|
||||
) do (
|
||||
for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ goto :E_Exit
|
||||
set "_batf=%~f0"
|
||||
set "_batp=%_batf:'=''%"
|
||||
setlocal EnableDelayedExpansion
|
||||
%_psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';& ([scriptblock]::Create($f[1]))"
|
||||
%_psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';. ([scriptblock]::Create($f[1]))"
|
||||
|
||||
:E_Exit
|
||||
echo.
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
@set masver=3.4
|
||||
@set masver=3.5
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
::============================================================================
|
||||
::
|
||||
:: Homepage: mass grave[.]dev
|
||||
:: Homepage: mass<>grave<.>dev
|
||||
:: Email: mas.help@outlook.com
|
||||
::
|
||||
::============================================================================
|
||||
@ -37,6 +37,7 @@ set "_cmdf=%~f0"
|
||||
for %%# in (%*) do (
|
||||
if /i "%%#"=="re1" set re1=1
|
||||
if /i "%%#"=="re2" set re2=1
|
||||
if /i "%%#"=="-qedit" (set re1=1&set re2=1)
|
||||
)
|
||||
|
||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||
@ -134,6 +135,16 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble
|
||||
goto done2
|
||||
)
|
||||
|
||||
if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
|
||||
sc query gcs | find /i "RUNNING" %nul% && (
|
||||
%eline%
|
||||
echo Windows Sandbox detected.
|
||||
echo The script cannot run due to missing licensing components. Aborting...
|
||||
echo:
|
||||
goto done2
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LSS 6001 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -206,7 +217,7 @@ goto done2
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';& ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
@ -230,6 +241,9 @@ REM check Powershell core version
|
||||
|
||||
cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
|
||||
echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto done2
|
||||
)
|
||||
|
||||
@ -244,13 +258,26 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_
|
||||
goto done2
|
||||
)
|
||||
|
||||
REM check if .NET is working properly
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
|
||||
if !errorlevel!==3 (
|
||||
echo Windows Powershell failed to load .NET command. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto done2
|
||||
)
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
echo:
|
||||
echo Your antivirus software might be blocking the script, or PowerShell on your system might be corrupted.
|
||||
echo Your antivirus software might be blocking the script.
|
||||
echo:
|
||||
sc query sense | find /i "RUNNING" %nul% && (
|
||||
echo Installed Antivirus - Microsoft Defender for Endpoint
|
||||
@ -769,7 +796,7 @@ exit /b
|
||||
set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
|
||||
set psc=%ps% -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
|
||||
|
||||
set _slexe=sppsvc.exe& set _slser=sppsvc
|
||||
if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
@set masver=3.4
|
||||
@set masver=3.5
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
::============================================================================
|
||||
::
|
||||
:: Homepage: mass grave[.]dev
|
||||
:: Homepage: mass<>grave<.>dev
|
||||
:: Email: mas.help@outlook.com
|
||||
::
|
||||
::============================================================================
|
||||
@ -37,6 +37,7 @@ set "_cmdf=%~f0"
|
||||
for %%# in (%*) do (
|
||||
if /i "%%#"=="re1" set re1=1
|
||||
if /i "%%#"=="re2" set re2=1
|
||||
if /i "%%#"=="-qedit" (set re1=1&set re2=1)
|
||||
)
|
||||
|
||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||
@ -135,6 +136,16 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
|
||||
sc query gcs | find /i "RUNNING" %nul% && (
|
||||
%eline%
|
||||
echo Windows Sandbox detected.
|
||||
echo The script cannot run due to missing licensing components. Aborting...
|
||||
echo:
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LSS 6001 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -207,7 +218,7 @@ goto dk_done
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';& ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
@ -231,6 +242,9 @@ REM check Powershell core version
|
||||
|
||||
cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
|
||||
echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -245,13 +259,26 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check if .NET is working properly
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
|
||||
if !errorlevel!==3 (
|
||||
echo Windows Powershell failed to load .NET command. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%in-place_repair_upgrade
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
|
||||
if /i "!tstresult2!"=="FullLanguage" (
|
||||
echo:
|
||||
echo Your antivirus software might be blocking the script, or PowerShell on your system might be corrupted.
|
||||
echo Your antivirus software might be blocking the script.
|
||||
echo:
|
||||
sc query sense | find /i "RUNNING" %nul% && (
|
||||
echo Installed Antivirus - Microsoft Defender for Endpoint
|
||||
@ -697,6 +724,25 @@ echo:
|
||||
call :dk_color %Blue% "Rebuilding SPP licensing tokens..."
|
||||
echo:
|
||||
|
||||
echo Clearing KMS Cache...
|
||||
echo:
|
||||
call :_taskclear-cache
|
||||
|
||||
%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
|
||||
echo Removing KMS38 protection...
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';. ([scriptblock]::Create($f[1]))"
|
||||
%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f
|
||||
%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
|
||||
call :dk_color %Red% "Failed to remove KMS38 protection."
|
||||
) || (
|
||||
echo Successfully removed KMS38 protection.
|
||||
echo Successfully cleared KMS Cache.
|
||||
)
|
||||
) || (
|
||||
echo Successfully cleared KMS Cache.
|
||||
)
|
||||
echo:
|
||||
|
||||
call :scandat check
|
||||
|
||||
if not defined token (
|
||||
@ -722,7 +768,7 @@ echo Checking SPP permission related issues...
|
||||
call :checkperms
|
||||
if defined permerror (
|
||||
call :dk_color %Red% "[!permerror!]"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':fixsppperms\:.*';& ([scriptblock]::Create($f[1]))" %nul%
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':fixsppperms\:.*';. ([scriptblock]::Create($f[1]))" %nul%
|
||||
call :checkperms
|
||||
if defined permerror (
|
||||
call :dk_color %Red% "[!permerror!] [Failed To Fix]"
|
||||
@ -792,8 +838,8 @@ if defined _vis (
|
||||
|
||||
echo:
|
||||
echo Reinstalling system licenses...
|
||||
%psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';& ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
|
||||
if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';& ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
|
||||
%psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';. ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
|
||||
if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';. ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
|
||||
if %errorlevel% EQU 0 (
|
||||
echo [Successful]
|
||||
) else (
|
||||
@ -1260,6 +1306,59 @@ exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Clean existing K-M-S cache from the registry
|
||||
|
||||
:_taskclear-cache
|
||||
|
||||
set w=
|
||||
for %%# in (SppE%w%xtComObj.exe sppsvc.exe SLsvc.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"
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" %nul% && (
|
||||
set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL"
|
||||
)
|
||||
)
|
||||
if not defined SPPk (
|
||||
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
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Fix SPP related registry and folder permissions
|
||||
|
||||
:fixsppperms:
|
||||
@ -1439,7 +1538,7 @@ exit /b
|
||||
|
||||
:regownstart
|
||||
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regown\:.*';& ([scriptblock]::Create($f[1]));"
|
||||
%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regown\:.*';. ([scriptblock]::Create($f[1]));"
|
||||
exit /b
|
||||
|
||||
:: Below code takes ownership of a volatile registry key and deletes it
|
||||
@ -1471,6 +1570,36 @@ $key.SetAccessControl($acl)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: This code runs to undo below registry key KMS38 protection
|
||||
:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
|
||||
:: This option is not used in KMS38 anymore, it's here only to remove previous versions protection.
|
||||
|
||||
: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:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:dk_color
|
||||
|
||||
if %_NCS% EQU 1 (
|
||||
@ -1527,7 +1656,7 @@ exit /b
|
||||
set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
|
||||
set psc=%ps% -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
|
||||
|
||||
set _slexe=sppsvc.exe& set _slser=sppsvc
|
||||
if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
|
||||
|
||||
61
README.md
61
README.md
@ -6,25 +6,42 @@
|
||||
|
||||
<hr>
|
||||
|
||||
## How to Activate Windows / Office?
|
||||
## How to Activate Windows / Office / Extended Updates (ESU)?
|
||||
|
||||
### Method 1 - PowerShell (Windows 8 and later) ❤️
|
||||
### Method 1 - PowerShell ❤️
|
||||
|
||||
1. **Open PowerShell**
|
||||
To do that, press the Windows key + X, then select PowerShell or Terminal.
|
||||
1. **Open PowerShell**
|
||||
Click the **Start Menu**, type `PowerShell`, then open it.
|
||||
|
||||
2. **Copy and paste the code below, then press enter.**
|
||||
```
|
||||
irm https://get.activated.win | iex
|
||||
```
|
||||
Alternatively, you can use the following (this will be deprecated in the future):
|
||||
```
|
||||
irm https://massgrave.dev/get | iex
|
||||
```
|
||||
2. **Copy and paste the code below, then press enter.**
|
||||
- For **Windows 8, 10, 11**: 📌
|
||||
```
|
||||
irm https://get.activated.win | iex
|
||||
```
|
||||
- For **Windows 7** and later:
|
||||
```
|
||||
iex ((New-Object Net.WebClient).DownloadString('https://get.activated.win'))
|
||||
```
|
||||
|
||||
3. You will see the activation options. Choose the activation options highlighted in green.
|
||||
<details>
|
||||
|
||||
4. That's all
|
||||
<summary>Script not launching❓Click here for info.</summary>
|
||||
|
||||
---
|
||||
|
||||
- If the above is blocked (by ISP/DNS), try this (needs **updated Windows 10 or 11**):
|
||||
```
|
||||
iex (curl.exe -s --doh-url https://1.1.1.1/dns-query https://get.activated.win | Out-String)
|
||||
```
|
||||
- If that fails or you have an older Windows, use the below-listed Method 2.
|
||||
|
||||
---
|
||||
|
||||
</details>
|
||||
|
||||
3. The activation menu will appear. **Choose the green-highlighted options** to activate Windows or Office.
|
||||
|
||||
4. **Done!**
|
||||
|
||||
---
|
||||
|
||||
@ -47,16 +64,14 @@ or
|
||||
|
||||
---
|
||||
|
||||
- To activate additional products such as **Office for macOS, Visual Studio, RDS CALs, and Windows XP**, check [here](https://massgrave.dev/unsupported_products_activation).
|
||||
- To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches).
|
||||
> [!TIP]
|
||||
> - Some ISPs/DNS block access to our domains. You can bypass this by enabling [DNS-over-HTTPS (DoH)](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/encrypted-dns-browsers/) in your browser.
|
||||
> - **Having trouble**❓Visit our [troubleshooting page](https://massgrave.dev/troubleshoot) or raise an issue on [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts/issues).
|
||||
|
||||
---
|
||||
|
||||
### Not working ❓
|
||||
|
||||
- If you are **unable to launch MAS** using the PowerShell method, please refer to **Method 2** listed above.
|
||||
- If MAS is launched and the script shows any errors, check for any troubleshooting steps mentioned in blue color and try to follow those.
|
||||
- If you have any issues, please feel free to reach out to us [here](https://massgrave.dev/troubleshoot).
|
||||
- To activate additional products such as **Office for macOS, Visual Studio, RDS CALs, and Windows XP**, check [here](https://massgrave.dev/unsupported_products_activation).
|
||||
- To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches).
|
||||
|
||||
---
|
||||
|
||||
@ -69,8 +84,8 @@ or
|
||||
---
|
||||
|
||||
```
|
||||
Latest Version: 3.4
|
||||
Release date: 3-June-2025
|
||||
Latest Version: 3.5
|
||||
Release date: 10-Aug-2025
|
||||
```
|
||||
|
||||
### [Troubleshooting / Help](https://massgrave.dev/troubleshoot)
|
||||
|
||||
Reference in New Issue
Block a user