mirror of
https://github.com/massgravel/Microsoft-Activation-Scripts.git
synced 2025-07-05 17:31:20 +01:00
Compare commits
40 Commits
2.9
...
c316b42e5c
Author | SHA1 | Date | |
---|---|---|---|
c316b42e5c | |||
3b739d7e2b | |||
8673fbbfda | |||
60dd549a49 | |||
1e3c0aaedf | |||
fe001e6c39 | |||
c4f33e96c4 | |||
69f1a206fb | |||
ab0cd24f89 | |||
55afa30fcd | |||
5e7e42a446 | |||
a9eda8f572 | |||
a5bcfdd3e6 | |||
8d67d62c15 | |||
6adb247334 | |||
6c8732dd06 | |||
9765e7d05f | |||
60c99742ce | |||
8f3f392517 | |||
af69d79c5c | |||
63045afc70 | |||
19c6612a47 | |||
9e6f386819 | |||
b5ba36c033 | |||
d10b6d691e | |||
de812acdc5 | |||
75c34cbf50 | |||
0d533338a1 | |||
411f387705 | |||
be44b2d887 | |||
0c88f6bc2c | |||
d31e4ab0cb | |||
9fd5a661ab | |||
b732e2c8d7 | |||
8e2677b1f9 | |||
f2e40bf88e | |||
a4f9b219ab | |||
7262a44ba2 | |||
37ec96504a | |||
051b4f673f |
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,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -124,7 +124,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -161,19 +161,29 @@ for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1)
|
||||
|
||||
call :dk_setvar
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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."
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
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."
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -209,33 +219,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -248,6 +231,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -258,34 +293,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -294,9 +328,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -312,7 +356,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -338,7 +382,7 @@ if not exist %SysPath%\%%# (
|
||||
echo [%SysPath%\%%#] file is missing, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
@ -363,7 +407,6 @@ 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:
|
||||
@ -382,9 +425,10 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2
|
||||
echo [%winos% ^| %winbuild%]
|
||||
echo:
|
||||
echo Evaluation editions cannot be activated outside of their evaluation period.
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period."
|
||||
echo:
|
||||
set fixes=%fixes% %mas%evaluation_editions
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
@ -465,13 +509,13 @@ 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.
|
||||
echo If you are, then try TSforge activation option from the main menu.
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
echo:
|
||||
goto dk_done
|
||||
@ -605,17 +649,18 @@ goto :dl_final
|
||||
|
||||
set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
|
||||
|
||||
if defined _int (
|
||||
if %keyerror% EQU 0 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 20 | Out-Null")
|
||||
call :dk_refresh
|
||||
call :dk_act
|
||||
call :dk_checkperm
|
||||
|
||||
reg query "%_ident%" %nul% || (
|
||||
set error=1
|
||||
echo:
|
||||
call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]"
|
||||
)
|
||||
)
|
||||
|
||||
::==========================================================================================================================================
|
||||
@ -623,43 +668,40 @@ 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 (
|
||||
licensing.mp.microsoft.com/v7.0/licenses/content
|
||||
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
|
||||
%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black; exit 3 } }"
|
||||
if !errorlevel!==3 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"
|
||||
for %%# in (
|
||||
live.com
|
||||
microsoft.com
|
||||
login.live.com
|
||||
purchase.mp.microsoft.com
|
||||
licensing.mp.microsoft.com
|
||||
) do (
|
||||
findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Blocked in Hosts]"
|
||||
)
|
||||
call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!"
|
||||
set fixes=%fixes% %mas%licensing-servers-issue
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue"
|
||||
)
|
||||
|
||||
::==========================================================================================================================================
|
||||
|
||||
if %keyerror% EQU 0 if not defined _perm if defined _int (
|
||||
:: Windows update and store block check
|
||||
|
||||
reg query "%_ident%" %nul% || (
|
||||
set error=1
|
||||
echo:
|
||||
call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]"
|
||||
)
|
||||
if %keyerror% EQU 0 if not defined _perm if defined _int (
|
||||
|
||||
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
|
||||
@ -675,40 +717,46 @@ call :dk_color %Blue% "If you have used any tool to block Store, undo it."
|
||||
)
|
||||
|
||||
set wcount=0
|
||||
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt (
|
||||
for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do (
|
||||
reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || (set wucorrupt=1&set /a wcount+=1)
|
||||
)
|
||||
|
||||
for %%G in (Parameters Security) do if not defined wucorrupt (
|
||||
for %%G in (Parameters Security) do (
|
||||
reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wucorrupt=1&set /a wcount+=1)
|
||||
)
|
||||
|
||||
if defined wucorrupt (
|
||||
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."
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
) else (
|
||||
call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it."
|
||||
)
|
||||
) else (
|
||||
%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null"
|
||||
sc query wuauserv | find /i "RUNNING" %nul% || (
|
||||
set error=1
|
||||
set wuerror=1
|
||||
sc start wuauserv %nul%
|
||||
call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]"
|
||||
call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM Check Internet related error codes
|
||||
::==========================================================================================================================================
|
||||
|
||||
if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock (
|
||||
:: Check Internet related error codes
|
||||
|
||||
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%"
|
||||
set fixes=%fixes% %mas%licensing-servers-issue
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue"
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -722,11 +770,11 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license.
|
||||
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."
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu instead."
|
||||
) else (
|
||||
if not defined error call :dk_color %Blue% "%_fixmsg%"
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
)
|
||||
|
||||
@ -760,7 +808,7 @@ goto :dk_done
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -1032,7 +1080,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
@ -1108,7 +1156,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
)
|
||||
|
||||
@ -1228,7 +1276,7 @@ set showfix=1
|
||||
)
|
||||
echo %serv_e% | findstr /i "sppsvc-1060" %nul% && (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
@ -1249,10 +1297,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option
|
||||
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
|
||||
set showfix=1
|
||||
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% && (
|
||||
@ -1281,12 +1329,11 @@ echo Checking WPA Registry Count [%wpainfo%]
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
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% || (
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
)
|
||||
|
||||
@ -1305,19 +1352,17 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation
|
||||
if "%osSKU%"=="165" set osedition=ProfessionalEducationN
|
||||
)
|
||||
|
||||
if not defined officeact (
|
||||
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" (
|
||||
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%]"
|
||||
)
|
||||
)
|
||||
@ -1348,7 +1393,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact (
|
||||
if not defined notwinact (
|
||||
if %winbuild% GEQ 10240 (
|
||||
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||
set /a "sum/=3"
|
||||
@ -1381,11 +1426,7 @@ 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" (
|
||||
if %winbuild% LSS 9200 (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
) else (
|
||||
call :dk_color %Red% "Checking Eval WLMS Service [Found]"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -1416,14 +1457,13 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT
|
||||
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"
|
||||
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"
|
||||
call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
@ -1438,7 +1478,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
|
||||
@ -1462,6 +1502,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined notwinact (
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
if not defined apps (
|
||||
%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul%
|
||||
@ -1470,12 +1511,13 @@ 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"
|
||||
)
|
||||
set error=1
|
||||
call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||
@ -1485,12 +1527,15 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke
|
||||
|
||||
|
||||
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."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -1558,7 +1603,7 @@ exit /b
|
||||
$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA")
|
||||
$count = 0
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$count++
|
||||
}
|
||||
}
|
||||
@ -1567,7 +1612,7 @@ $minBuildNumber = 14393
|
||||
if ($osVersion.Build -ge $minBuildNumber) {
|
||||
$subkeyHashTable = @{}
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$keyNumber = $subkeyName -replace '.*-', ''
|
||||
$subkeyHashTable[$keyNumber] = $true
|
||||
}
|
||||
@ -1581,7 +1626,7 @@ if ($osVersion.Build -ge $minBuildNumber) {
|
||||
}
|
||||
}
|
||||
$wpaKey.GetSubKeyNames() | ForEach-Object {
|
||||
if ($_ -match '.*-.*-.*-.*-.*-') {
|
||||
if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
if ($PSVersionTable.PSVersion.Major -lt 3) {
|
||||
cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1"
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -112,7 +112,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -127,7 +127,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -167,15 +167,25 @@ set _k38=
|
||||
call :dk_setvar
|
||||
set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f"
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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."
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
) else (
|
||||
call :dk_color %Blue% "Use HWID activation option."
|
||||
call :dk_color %Blue% "Use HWID activation option from the main menu."
|
||||
)
|
||||
goto dk_done
|
||||
)
|
||||
@ -212,33 +222,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -251,6 +234,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -261,34 +296,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -297,9 +331,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -315,7 +359,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
cls
|
||||
@ -378,7 +422,7 @@ if defined _fmiss (
|
||||
echo [%_fmiss%] file is missing, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -432,9 +476,10 @@ 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.
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period."
|
||||
echo:
|
||||
set fixes=%fixes% %mas%evaluation_editions
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
goto dk_done
|
||||
)
|
||||
@ -450,7 +495,7 @@ 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.
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%kms38"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
@ -462,7 +507,7 @@ if defined a_cor (
|
||||
if !errorlevel!==3 (
|
||||
%eline%
|
||||
echo Valid digital signature not found in clipup.exe file.
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
@ -530,18 +575,18 @@ if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1
|
||||
if defined skunotfound (
|
||||
call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\"
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
if defined sppks (
|
||||
call :dk_color %Red% "KMS38 activation is supported but failed to find the key."
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
if not defined skunotfound if not defined sppks (
|
||||
call :dk_color %Red% "This product does not support KMS38 activation."
|
||||
call :dk_color %Blue% "Make sure you are using the latest version of the script."
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
set fixes=%fixes% %mas%
|
||||
echo %mas%
|
||||
)
|
||||
@ -586,7 +631,7 @@ if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELE
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto :dk_done
|
||||
)
|
||||
|
||||
@ -754,7 +799,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -869,7 +914,7 @@ $key.SetAccessControl($acl)
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -1139,7 +1184,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
@ -1260,7 +1305,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
)
|
||||
|
||||
@ -1380,7 +1425,7 @@ set showfix=1
|
||||
)
|
||||
echo %serv_e% | findstr /i "sppsvc-1060" %nul% && (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
@ -1401,10 +1446,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option
|
||||
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
|
||||
set showfix=1
|
||||
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% && (
|
||||
@ -1433,12 +1478,11 @@ echo Checking WPA Registry Count [%wpainfo%]
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
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% || (
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
)
|
||||
|
||||
@ -1457,19 +1501,17 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation
|
||||
if "%osSKU%"=="165" set osedition=ProfessionalEducationN
|
||||
)
|
||||
|
||||
if not defined officeact (
|
||||
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" (
|
||||
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%]"
|
||||
)
|
||||
)
|
||||
@ -1500,7 +1542,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact (
|
||||
if not defined notwinact (
|
||||
if %winbuild% GEQ 10240 (
|
||||
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||
set /a "sum/=3"
|
||||
@ -1533,11 +1575,7 @@ 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" (
|
||||
if %winbuild% LSS 9200 (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
) else (
|
||||
call :dk_color %Red% "Checking Eval WLMS Service [Found]"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -1568,14 +1606,13 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT
|
||||
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"
|
||||
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"
|
||||
call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
@ -1590,7 +1627,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
|
||||
@ -1614,6 +1651,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined notwinact (
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
if not defined apps (
|
||||
%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul%
|
||||
@ -1622,12 +1660,13 @@ 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"
|
||||
)
|
||||
set error=1
|
||||
call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||
@ -1637,12 +1676,15 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke
|
||||
|
||||
|
||||
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."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -1710,7 +1752,7 @@ exit /b
|
||||
$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA")
|
||||
$count = 0
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$count++
|
||||
}
|
||||
}
|
||||
@ -1719,7 +1761,7 @@ $minBuildNumber = 14393
|
||||
if ($osVersion.Build -ge $minBuildNumber) {
|
||||
$subkeyHashTable = @{}
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$keyNumber = $subkeyName -replace '.*-', ''
|
||||
$subkeyHashTable[$keyNumber] = $true
|
||||
}
|
||||
@ -1733,7 +1775,7 @@ if ($osVersion.Build -ge $minBuildNumber) {
|
||||
}
|
||||
}
|
||||
$wpaKey.GetSubKeyNames() | ForEach-Object {
|
||||
if ($_ -match '.*-.*-.*-.*-.*-') {
|
||||
if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
if ($PSVersionTable.PSVersion.Major -lt 3) {
|
||||
cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1"
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -124,7 +124,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -161,6 +161,16 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1)
|
||||
|
||||
call :dk_setvar
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 9200 (
|
||||
%eline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -202,33 +212,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -241,6 +224,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -251,34 +286,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -287,9 +321,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -305,7 +349,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
cls
|
||||
@ -369,7 +413,7 @@ if not exist %SysPath%\sppsvc.exe (
|
||||
echo [%SysPath%\sppsvc.exe] file is missing, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -400,7 +444,8 @@ set "_serv=sppsvc Winmgmt"
|
||||
:: Software Protection
|
||||
:: Windows Management Instrumentation
|
||||
|
||||
set officeact=1
|
||||
set notwinact=1
|
||||
set ohookact=1
|
||||
call :dk_errorcheck
|
||||
|
||||
:: Check unsupported office versions
|
||||
@ -495,16 +540,6 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: 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
|
||||
@ -529,11 +564,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 /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll")
|
||||
if /i "%_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 /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll"
|
||||
) else (
|
||||
set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
)
|
||||
@ -579,11 +614,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 /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll")
|
||||
if /i "%_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 /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll"
|
||||
) else (
|
||||
set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
)
|
||||
@ -657,7 +692,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
goto :dk_done
|
||||
@ -973,11 +1008,6 @@ exit /b
|
||||
|
||||
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=
|
||||
@ -1002,12 +1032,11 @@ 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 (
|
||||
if defined winserver if defined _config if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" (
|
||||
echo %_oIds% | find /i "Retail" %nul1% && (
|
||||
set scaIsNeeded=1
|
||||
reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1%
|
||||
@ -1035,11 +1064,11 @@ 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 /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll")
|
||||
if /i "%_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 /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll"
|
||||
) else (
|
||||
set "_sppcPath=%SystemRoot%\System32\sppc.dll"
|
||||
)
|
||||
@ -1051,7 +1080,7 @@ 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
|
||||
call :msiofficedata %2
|
||||
|
||||
echo:
|
||||
echo Activating Office... [MSI ^| %_version% ^| %_oArch%]
|
||||
@ -1075,46 +1104,6 @@ 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
|
||||
@ -1240,7 +1229,7 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou
|
||||
set defname=DEFTEMP-%random%
|
||||
for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b"
|
||||
|
||||
if defined o16c2r if defined officeact (
|
||||
if defined o16c2r if defined ohookact (
|
||||
if exist "%defdat%\NTUSER.DAT" (
|
||||
reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul%
|
||||
reg query HKU\%defname%\Software %nul% && (
|
||||
@ -1276,11 +1265,8 @@ 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 /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' } | Select-Object -ExpandProperty 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 { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!"
|
||||
)
|
||||
|
||||
for %%# in (%apps%) do (
|
||||
@ -1298,7 +1284,7 @@ set upk_result=2
|
||||
)
|
||||
)
|
||||
|
||||
if defined officeact if not %upk_result%==0 echo:
|
||||
if defined ohookact 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
|
||||
@ -1350,7 +1336,7 @@ exit /b
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -1529,7 +1515,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
@ -1589,7 +1575,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
)
|
||||
|
||||
@ -1709,7 +1695,7 @@ set showfix=1
|
||||
)
|
||||
echo %serv_e% | findstr /i "sppsvc-1060" %nul% && (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
@ -1730,10 +1716,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option
|
||||
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
|
||||
set showfix=1
|
||||
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% && (
|
||||
@ -1762,12 +1748,11 @@ echo Checking WPA Registry Count [%wpainfo%]
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
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% || (
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
)
|
||||
|
||||
@ -1786,19 +1771,17 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation
|
||||
if "%osSKU%"=="165" set osedition=ProfessionalEducationN
|
||||
)
|
||||
|
||||
if not defined officeact (
|
||||
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" (
|
||||
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%]"
|
||||
)
|
||||
)
|
||||
@ -1829,7 +1812,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact (
|
||||
if not defined notwinact (
|
||||
if %winbuild% GEQ 10240 (
|
||||
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||
set /a "sum/=3"
|
||||
@ -1862,11 +1845,7 @@ 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" (
|
||||
if %winbuild% LSS 9200 (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
) else (
|
||||
call :dk_color %Red% "Checking Eval WLMS Service [Found]"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -1897,14 +1876,13 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT
|
||||
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"
|
||||
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"
|
||||
call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
@ -1919,7 +1897,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
|
||||
@ -1943,6 +1921,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined notwinact (
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
if not defined apps (
|
||||
%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul%
|
||||
@ -1951,12 +1930,13 @@ 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"
|
||||
)
|
||||
set error=1
|
||||
call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||
@ -1966,12 +1946,15 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke
|
||||
|
||||
|
||||
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."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -2039,7 +2022,7 @@ exit /b
|
||||
$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA")
|
||||
$count = 0
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$count++
|
||||
}
|
||||
}
|
||||
@ -2048,7 +2031,7 @@ $minBuildNumber = 14393
|
||||
if ($osVersion.Build -ge $minBuildNumber) {
|
||||
$subkeyHashTable = @{}
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$keyNumber = $subkeyName -replace '.*-', ''
|
||||
$subkeyHashTable[$keyNumber] = $true
|
||||
}
|
||||
@ -2062,7 +2045,7 @@ if ($osVersion.Build -ge $minBuildNumber) {
|
||||
}
|
||||
}
|
||||
$wpaKey.GetSubKeyNames() | ForEach-Object {
|
||||
if ($_ -match '.*-.*-.*-.*-.*-') {
|
||||
if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
if ($PSVersionTable.PSVersion.Major -lt 3) {
|
||||
cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1"
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
@ -2144,6 +2127,7 @@ set f=
|
||||
for %%# in (
|
||||
:: Office 2013
|
||||
15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail
|
||||
15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail
|
||||
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
|
||||
@ -2151,6 +2135,8 @@ for %%# in (
|
||||
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_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_B92QY-NKYFQ-6KTKH-VWW2Q-3P%f%B3B_OEM-ARM_______HomeStudentARMRetail
|
||||
15_ebef9f05-5273-404a-9253-c5e252f50555_QPG96-CNT7M-KH36K-KY4HQ-M7%f%TBR_OEM-ARM_______HomeStudentPlusARMRetail
|
||||
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
|
||||
@ -2207,6 +2193,8 @@ for %%# in (
|
||||
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_090896a0-ea98-48ac-b545-ba5da0eb0c9c_PBQPJ-NC22K-69MXD-KWMRF-WF%f%G77_OEM-ARM_______HomeStudentARMRetail
|
||||
16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_6F2NY-7RTX4-MD9KM-TJ43H-94%f%TBT_OEM-ARM_______HomeStudentPlusARMRetail
|
||||
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
|
||||
@ -2253,6 +2241,8 @@ for %%# in (
|
||||
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_6303d14a-afad-431f-8434-81052a65f575_DJTNY-4HDWM-TDWB2-8PWC2-W2%f%RRT_OEM-ARM_______HomeStudentARM2019Retail
|
||||
16_215c841d-ffc1-4f03-bd11-5b27b6ab64cc_NM8WT-CFHB2-QBGXK-J8W6J-GV%f%K8F_OEM-ARM_______HomeStudentPlusARM2019Retail
|
||||
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
|
||||
@ -2282,11 +2272,14 @@ for %%# in (
|
||||
:: 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_844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D_Bypass________AccessRuntime2021Retail
|
||||
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_0c7af60d-0664-49fc-9b01-41b2dea81380_THNKC-KFR6C-Y86Q9-W8CB3-GF%f%7PD_MAK-AE________OneNote2021Volume
|
||||
16_778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H_Bypass________OneNoteFree2021Retail
|
||||
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
|
||||
@ -2354,20 +2347,144 @@ 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)
|
||||
)
|
||||
)
|
||||
)
|
||||
exit /b
|
||||
|
||||
if %1==findactivated if %oVer%==%%A (
|
||||
echo "!_FsortIds!" | find /i "-%%E-" %nul% && (
|
||||
set actiProds%oVer%=!actiProds%oVer%! -%%E-
|
||||
::========================================================================================================================================
|
||||
|
||||
:: 1st column = Office version number
|
||||
:: 2nd column = Activation ID
|
||||
:: 3rd column = Product ID from branding.xml
|
||||
:: 4th column = Edition
|
||||
:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only)
|
||||
:: Separator = "_"
|
||||
|
||||
:msiofficedata
|
||||
|
||||
for %%# in (
|
||||
:: Office 2013
|
||||
15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail
|
||||
15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail
|
||||
15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume
|
||||
15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail
|
||||
15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume
|
||||
15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail
|
||||
15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume
|
||||
15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
|
||||
15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail
|
||||
15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail
|
||||
15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail
|
||||
15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail
|
||||
15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail
|
||||
15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume
|
||||
15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail
|
||||
15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail
|
||||
15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail
|
||||
15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume
|
||||
15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail
|
||||
15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume
|
||||
15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail
|
||||
15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail
|
||||
15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume
|
||||
15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail
|
||||
15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume
|
||||
15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
|
||||
15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail
|
||||
15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail
|
||||
15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume
|
||||
15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
|
||||
15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail
|
||||
15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail
|
||||
15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume
|
||||
15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail
|
||||
15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume
|
||||
15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail
|
||||
15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume
|
||||
15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail
|
||||
15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume
|
||||
15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail
|
||||
15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail
|
||||
15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume
|
||||
15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail
|
||||
15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume
|
||||
15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail
|
||||
15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume
|
||||
15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail
|
||||
15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume
|
||||
:: Office 365 - 15.0 version
|
||||
15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail
|
||||
15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
|
||||
15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
|
||||
15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail
|
||||
:: Office 365 - 16.0 version
|
||||
16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail
|
||||
16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail
|
||||
16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
|
||||
16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
|
||||
16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail
|
||||
:: Office 2016
|
||||
16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail
|
||||
16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail
|
||||
16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume
|
||||
16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail
|
||||
16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume
|
||||
16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
|
||||
16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail
|
||||
16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail
|
||||
16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail
|
||||
16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail
|
||||
16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail
|
||||
16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail
|
||||
16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume
|
||||
16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail
|
||||
16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail
|
||||
16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume
|
||||
16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail
|
||||
16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume
|
||||
16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
|
||||
16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail
|
||||
16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail
|
||||
16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume
|
||||
16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
|
||||
16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail
|
||||
16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail
|
||||
16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume
|
||||
16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume
|
||||
16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail
|
||||
16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume
|
||||
16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume
|
||||
16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail
|
||||
16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume
|
||||
16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail
|
||||
16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume
|
||||
16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail
|
||||
16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail
|
||||
16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume
|
||||
16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail
|
||||
16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail
|
||||
16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume
|
||||
16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail
|
||||
16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume
|
||||
16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume
|
||||
16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail
|
||||
16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume
|
||||
16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume
|
||||
16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail
|
||||
16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume
|
||||
) do (
|
||||
for /f "tokens=1-5 delims=_" %%A in ("%%#") do (
|
||||
|
||||
set getIds=1
|
||||
if "%oVer%"=="%%A" (
|
||||
if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=)
|
||||
|
||||
if defined getIds (
|
||||
reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && (
|
||||
reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && (
|
||||
if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -134,7 +134,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -149,7 +149,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -192,6 +192,16 @@ for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) do (if "%%A"=
|
||||
|
||||
call :dk_setvar
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -231,33 +241,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -270,6 +253,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -280,34 +315,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -316,9 +350,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -334,7 +378,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -429,7 +473,7 @@ if not exist %SysPath%\sppsvc.exe (
|
||||
echo [%SysPath%\sppsvc.exe] file is missing, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -483,6 +527,7 @@ set "_serv=sppsvc Winmgmt"
|
||||
:: Software Protection
|
||||
:: Windows Management Instrumentation
|
||||
|
||||
if %_actwin%==0 set notwinact=1
|
||||
call :dk_errorcheck
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -519,8 +564,9 @@ call :dk_color %Red% "Checking Evaluation Edition [Evaluation editio
|
||||
if defined _evalserv (
|
||||
call :dk_color %Blue% "Go back to main menu and use [Change Edition] option."
|
||||
) else (
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period."
|
||||
set fixes=%fixes% %mas%evaluation_editions
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
|
||||
goto :ks_office
|
||||
@ -570,21 +616,18 @@ if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Componen
|
||||
if defined skunotfound (
|
||||
call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\"
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
if defined sppks (
|
||||
call :dk_color %Red% "%KS% activation is supported but failed to find the %KS% key."
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
if not defined skunotfound if not defined sppks (
|
||||
call :dk_color %Red% "This product does not support %KS% activation."
|
||||
if %winbuild% LSS 9200 (
|
||||
call :dk_color2 %Blue% "Use the alternative activator listed here - " %_Yellow% " %mas%unsupported_products_activation"
|
||||
)
|
||||
set fixes=%fixes% %mas%unsupported_products_activation
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
)
|
||||
echo:
|
||||
goto :ks_office
|
||||
@ -1196,7 +1239,7 @@ for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if ex
|
||||
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
|
||||
call :msiofficedata %2 getmsiret
|
||||
|
||||
echo:
|
||||
echo Processing Office... [MSI ^| %_version% ^| %_oArch%]
|
||||
@ -1393,7 +1436,7 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou
|
||||
set defname=DEFTEMP-%random%
|
||||
for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b"
|
||||
|
||||
if defined o16c2r if defined officeact (
|
||||
if defined o16c2r if defined ohookact (
|
||||
if exist "%defdat%\NTUSER.DAT" (
|
||||
reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul%
|
||||
reg query HKU\%defname%\Software %nul% && (
|
||||
@ -1429,11 +1472,8 @@ 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 /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' } | Select-Object -ExpandProperty 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 { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!"
|
||||
)
|
||||
|
||||
for %%# in (%apps%) do (
|
||||
@ -1451,7 +1491,7 @@ set upk_result=2
|
||||
)
|
||||
)
|
||||
|
||||
if defined officeact if not %upk_result%==0 echo:
|
||||
if defined ohookact 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
|
||||
@ -1615,7 +1655,7 @@ 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 psc=powershell.exe -nop -c
|
||||
|
||||
set run_once=
|
||||
set t_name=Renewal Task
|
||||
@ -1830,8 +1870,7 @@ 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"
|
||||
call :dk_color %Blue% "Use TSforge activation option from the main menu."
|
||||
)
|
||||
set oemerr=1
|
||||
set showfix=1
|
||||
@ -2302,7 +2341,7 @@ exit /b
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -2569,7 +2608,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
@ -2690,7 +2729,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
echo:
|
||||
)
|
||||
|
||||
@ -2810,7 +2849,7 @@ set showfix=1
|
||||
)
|
||||
echo %serv_e% | findstr /i "sppsvc-1060" %nul% && (
|
||||
set fixes=%fixes% %mas%fix_service
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service"
|
||||
set showfix=1
|
||||
)
|
||||
)
|
||||
@ -2831,10 +2870,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option
|
||||
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
|
||||
set showfix=1
|
||||
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% && (
|
||||
@ -2863,12 +2902,11 @@ echo Checking WPA Registry Count [%wpainfo%]
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
|
||||
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% || (
|
||||
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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions"
|
||||
)
|
||||
)
|
||||
|
||||
@ -2887,19 +2925,17 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation
|
||||
if "%osSKU%"=="165" set osedition=ProfessionalEducationN
|
||||
)
|
||||
|
||||
if not defined officeact (
|
||||
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" (
|
||||
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%]"
|
||||
)
|
||||
)
|
||||
@ -2930,7 +2966,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined officeact (
|
||||
if not defined notwinact (
|
||||
if %winbuild% GEQ 10240 (
|
||||
%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%"
|
||||
set /a "sum/=3"
|
||||
@ -2963,11 +2999,7 @@ 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" (
|
||||
if %winbuild% LSS 9200 (
|
||||
echo Checking Eval WLMS Service [Found]
|
||||
) else (
|
||||
call :dk_color %Red% "Checking Eval WLMS Service [Found]"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -2998,14 +3030,13 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT
|
||||
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"
|
||||
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"
|
||||
call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers"
|
||||
set error=1
|
||||
set showfix=1
|
||||
)
|
||||
@ -3020,7 +3051,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
|
||||
@ -3044,6 +3075,7 @@ set showfix=1
|
||||
)
|
||||
|
||||
|
||||
if not defined notwinact (
|
||||
call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f
|
||||
if not defined apps (
|
||||
%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul%
|
||||
@ -3052,12 +3084,13 @@ 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"
|
||||
)
|
||||
set error=1
|
||||
call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" (
|
||||
@ -3067,12 +3100,15 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke
|
||||
|
||||
|
||||
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."
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -3140,7 +3176,7 @@ exit /b
|
||||
$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA")
|
||||
$count = 0
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$count++
|
||||
}
|
||||
}
|
||||
@ -3149,7 +3185,7 @@ $minBuildNumber = 14393
|
||||
if ($osVersion.Build -ge $minBuildNumber) {
|
||||
$subkeyHashTable = @{}
|
||||
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
|
||||
if ($subkeyName -match '.*-.*-.*-.*-.*-') {
|
||||
if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
$keyNumber = $subkeyName -replace '.*-', ''
|
||||
$subkeyHashTable[$keyNumber] = $true
|
||||
}
|
||||
@ -3163,7 +3199,7 @@ if ($osVersion.Build -ge $minBuildNumber) {
|
||||
}
|
||||
}
|
||||
$wpaKey.GetSubKeyNames() | ForEach-Object {
|
||||
if ($_ -match '.*-.*-.*-.*-.*-') {
|
||||
if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') {
|
||||
if ($PSVersionTable.PSVersion.Major -lt 3) {
|
||||
cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1"
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
@ -3234,127 +3270,195 @@ exit /b
|
||||
|
||||
:: 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)
|
||||
:: 3rd column = Product ID from branding.xml
|
||||
:: 4th column = Edition
|
||||
:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only)
|
||||
:: Separator = "_"
|
||||
|
||||
:ks_msiretaildata
|
||||
:: EditionID Notes:
|
||||
:: For Office 2013 and later, all Edition IDs are clearly defined, and each ID corresponds to its specific licensing.
|
||||
|
||||
:: In Office 2010, the situation is a bit more complicated.
|
||||
:: Products typically fall into two separate categories: Volume License (VL) and Non-VL. This is because a single installation cannot include both Retail and VL licensing types.
|
||||
:: Some Edition IDs share the same primary product ID. For example, installing ProPlusVL also installs ProPlusAcadVL licenses, as both use 0011 as the primary product ID.
|
||||
:: Therefore, in the script, we grouped VL and Non-VL versions by primary product ID and selected the highest Edition ID when multiple Edition IDs existed for the same primary product ID.
|
||||
|
||||
:: There are a few exceptions to this 2010 rule: Visio (Premium, Pro, Standard) and OEM-SingleImage.
|
||||
|
||||
:: For Visio, the issue is that branding.xml lists incorrect primary product IDs. The correct primary product ID for all three Visio variants is 0057. Based on the criteria above, we chose Visio-Premium as the representative Edition ID among the three.
|
||||
:: For OEM-SingleImage, it installs multiple Edition IDs and uses 003D as the primary product ID. Following our method, we selected the highest available Edition ID—ProfessionalR in this case.
|
||||
|
||||
:msiofficedata
|
||||
|
||||
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
|
||||
14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR
|
||||
14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR
|
||||
14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL
|
||||
14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR
|
||||
14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL
|
||||
14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR
|
||||
14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL
|
||||
14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR]
|
||||
14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR
|
||||
14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR]
|
||||
14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_0029_HSExcelR
|
||||
14_25fe4611-b44d-49cc-ae87-2143d299194e_00A3_HSOneNoteR
|
||||
14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_0037_HSPowerPointR
|
||||
14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_002B_HSWordR
|
||||
14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR
|
||||
14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL
|
||||
14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR
|
||||
14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL
|
||||
14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception
|
||||
14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR
|
||||
14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL
|
||||
14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR
|
||||
14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL
|
||||
14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR]
|
||||
14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR
|
||||
14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL
|
||||
14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR]
|
||||
14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR]
|
||||
14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR
|
||||
14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL
|
||||
14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR
|
||||
14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL
|
||||
14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R]
|
||||
14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR
|
||||
14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL]
|
||||
14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR
|
||||
14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL
|
||||
14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR]
|
||||
14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL
|
||||
14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR
|
||||
14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR
|
||||
14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL]
|
||||
14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR
|
||||
14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception
|
||||
14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception
|
||||
14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR
|
||||
14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL
|
||||
:: 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
|
||||
15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail
|
||||
15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail
|
||||
15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume
|
||||
15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail
|
||||
15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume
|
||||
15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail
|
||||
15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume
|
||||
15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
|
||||
15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail
|
||||
15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail
|
||||
15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail
|
||||
15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail
|
||||
15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail
|
||||
15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume
|
||||
15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail
|
||||
15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail
|
||||
15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail
|
||||
15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume
|
||||
15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail
|
||||
15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume
|
||||
15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail
|
||||
15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail
|
||||
15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume
|
||||
15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail
|
||||
15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume
|
||||
15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
|
||||
15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail
|
||||
15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail
|
||||
15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume
|
||||
15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
|
||||
15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail
|
||||
15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail
|
||||
15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume
|
||||
15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail
|
||||
15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume
|
||||
15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail
|
||||
15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume
|
||||
15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail
|
||||
15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume
|
||||
15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail
|
||||
15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail
|
||||
15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume
|
||||
15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail
|
||||
15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume
|
||||
15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail
|
||||
15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume
|
||||
15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail
|
||||
15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume
|
||||
:: 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
|
||||
15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail
|
||||
15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
|
||||
15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
|
||||
15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_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
|
||||
16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail
|
||||
16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail
|
||||
16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
|
||||
16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
|
||||
16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_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
|
||||
16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail
|
||||
16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail
|
||||
16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume
|
||||
16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail
|
||||
16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume
|
||||
16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
|
||||
16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail
|
||||
16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail
|
||||
16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail
|
||||
16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail
|
||||
16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail
|
||||
16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail
|
||||
16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume
|
||||
16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail
|
||||
16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail
|
||||
16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume
|
||||
16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail
|
||||
16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume
|
||||
16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
|
||||
16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail
|
||||
16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail
|
||||
16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume
|
||||
16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
|
||||
16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail
|
||||
16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail
|
||||
16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume
|
||||
16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume
|
||||
16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail
|
||||
16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume
|
||||
16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume
|
||||
16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail
|
||||
16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume
|
||||
16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail
|
||||
16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume
|
||||
16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail
|
||||
16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail
|
||||
16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume
|
||||
16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail
|
||||
16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail
|
||||
16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume
|
||||
16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail
|
||||
16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume
|
||||
16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume
|
||||
16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail
|
||||
16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume
|
||||
16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume
|
||||
16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail
|
||||
16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume
|
||||
) 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
|
||||
set getIds=1
|
||||
if "%oVer%"=="%%A" (
|
||||
if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=)
|
||||
|
||||
if defined getIds (
|
||||
reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && (
|
||||
reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && (
|
||||
if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D)
|
||||
)
|
||||
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)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -3518,6 +3622,7 @@ ea509e87-07a1-4a45-9edc-eba5a39f36af_D6QFG-VBYP2-XQHM7-J97RH-VV%f%RCK__14_SmallB
|
||||
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-
|
||||
259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP__15_AccessRuntimeRetail_[Bypass]
|
||||
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-
|
||||
@ -3535,7 +3640,7 @@ efe1f3e6-aea2-4144-a208-32aa872b6545_TGN6P-8MMBC-37P2F-XHXXK-P3%f%4VW__15_OneNot
|
||||
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-
|
||||
b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-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-
|
||||
@ -3558,7 +3663,7 @@ d450596f-894d-49e0-966a-fd39ed4c4c64_XQNVK-8JYDB-WJ9W3-YJ8YR-WF%f%G99__16_ProPlu
|
||||
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-
|
||||
dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-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-
|
||||
@ -3576,14 +3681,17 @@ c8f8a301-19f5-4132-96ce-2de9d4adbd33_7HD7K-N4PVK-BHBCQ-YWQRW-XW%f%4VK__16_Outloo
|
||||
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-
|
||||
6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudentARM2019Retail-HomeStudentPlusARM2019Retail-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
|
||||
:: OneNote2021Volume KMS license is not available
|
||||
844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D__16_AccessRuntime2021Retail_[Bypass]
|
||||
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-
|
||||
778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H__16_OneNoteFree2021Retail_[Bypass]
|
||||
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-
|
||||
|
@ -1,12 +0,0 @@
|
||||
--------------------------------------------------------------------------------------
|
||||
Activation Type Supported Product Activation Period
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
HWID - Windows 10-11 - Permanent
|
||||
Ohook - Office - Permanent
|
||||
KMS38 - Windows 10-11-Server - Till the Year 2038
|
||||
Online KMS - Windows / Office - 180 Days. Lifetime With Renewal Task
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
For more details, use the respective docs section here https://massgrave.dev/
|
7441
MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd
Normal file
7441
MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd
Normal file
File diff suppressed because it is too large
Load Diff
14
MAS/Separate-Files-Version/Activators/_ReadMe.txt
Normal file
14
MAS/Separate-Files-Version/Activators/_ReadMe.txt
Normal file
@ -0,0 +1,14 @@
|
||||
--------------------------------------------------------------------------------------
|
||||
Activation Type Supported Product Activation Period
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
HWID - Windows 10-11 - Permanent
|
||||
Ohook - Office - Permanent
|
||||
TSforge - Windows / ESU / Office - Permanent
|
||||
KMS38 - Windows 10-11-Server - Till the Year 2038
|
||||
Online KMS - Windows / Office - 180 Days. Lifetime With Renewal Task
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
Check the below link for more details:
|
||||
https://massgrave.dev/chart
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -84,7 +84,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -123,6 +123,16 @@ set "line=echo _________________________________________________________________
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -162,33 +172,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -201,6 +184,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -211,34 +246,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -247,9 +281,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -265,7 +309,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -284,7 +328,7 @@ if not exist %SysPath%\sppsvc.exe (
|
||||
echo [%SysPath%\sppsvc.exe] file is missing. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -322,7 +366,7 @@ if %osedition%==0 (
|
||||
echo Failed to detect OS Edition. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -395,7 +439,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -409,7 +453,7 @@ echo Unsupported Office %verchk% is installed on your Windows build version %win
|
||||
echo Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -515,7 +559,7 @@ if not exist %SystemRoot%\Temp\%list%.txt (
|
||||
echo Failed to generate available editions list.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto :oe_goback
|
||||
)
|
||||
|
||||
@ -580,7 +624,7 @@ if not exist %SystemRoot%\Temp\getAppIds.txt (
|
||||
echo Failed to generate available apps list.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto :oe_goback
|
||||
)
|
||||
)
|
||||
@ -762,7 +806,7 @@ 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 :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
call :oe_tempcleanup
|
||||
@ -905,7 +949,7 @@ echo %c2rcommand%
|
||||
if %errorlevel% NEQ 0 (
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
|
||||
goto :oe_goback
|
||||
@ -1053,7 +1097,7 @@ echo:
|
||||
echo %updcommand%
|
||||
%updcommand%
|
||||
echo:
|
||||
echo Help - %mas%troubleshoot
|
||||
echo Check this webpage for help - %mas%troubleshoot
|
||||
goto :oe_goback
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -1308,7 +1352,7 @@ if ($appIdsList.Count -gt 0) {
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -1377,7 +1421,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Common lines used in PowerShell reflection code
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -89,7 +89,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -128,6 +128,16 @@ set "line=echo _________________________________________________________________
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -167,33 +177,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -206,6 +189,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -216,34 +251,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -252,9 +286,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -270,7 +314,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -311,7 +355,7 @@ if not exist %SysPath%\%%# (
|
||||
echo [%SysPath%\%%#] file is missing, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
)
|
||||
@ -344,7 +388,7 @@ if not defined allapps (
|
||||
echo Failed to find activation IDs. Aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -367,7 +411,7 @@ if not defined osedition (
|
||||
echo Failed to detect OS edition, aborting...
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -393,7 +437,7 @@ if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-Ta
|
||||
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 %winbuild% GEQ 17063 call :ced_edilist
|
||||
if /i "%osedition:~0,4%"=="Core" set _pro=Professional
|
||||
if /i "%osedition%"=="CoreN" set _pro=ProfessionalN
|
||||
set "_dtarget= %_dtarget% !_wtarget! !_pro! "
|
||||
@ -506,7 +550,7 @@ set _dismapi=0
|
||||
|
||||
:: Check if DISM API or slmgr.vbs is required for edition upgrade
|
||||
|
||||
if not exist "%SysPath%\spp\tokens\skus\%targetedition%\" (
|
||||
if not exist "%SysPath%\spp\tokens\skus\%targetedition%\%targetedition%*.xrm-ms" (
|
||||
echo %_wtarget% | find /i " %targetedition% " || (
|
||||
set _dismapi=1
|
||||
)
|
||||
@ -529,7 +573,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -584,7 +628,7 @@ call :dk_color %Gray% "Reboot is required to fully change the edition."
|
||||
call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]"
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
)
|
||||
)
|
||||
|
||||
@ -665,7 +709,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
@ -741,7 +785,7 @@ 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"
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%change_edition_issues"
|
||||
exit /b
|
||||
|
||||
:compresslog
|
||||
@ -780,7 +824,7 @@ exit /b
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
@ -876,7 +920,7 @@ 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 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}"
|
||||
%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
|
||||
exit /b
|
||||
|
||||
:: Common lines used in PowerShell reflection code
|
||||
|
@ -47,20 +47,40 @@ choice /c 0 /n
|
||||
exit /b
|
||||
|
||||
:sppmgr:
|
||||
param (
|
||||
[Parameter()]
|
||||
[switch]
|
||||
$All,
|
||||
[Parameter()]
|
||||
[switch]
|
||||
$Dlv,
|
||||
[Parameter()]
|
||||
[switch]
|
||||
$IID,
|
||||
[Parameter()]
|
||||
[switch]
|
||||
$Pass
|
||||
)
|
||||
|
||||
function CONOUT($strObj)
|
||||
{
|
||||
Out-Host -Input $strObj
|
||||
}
|
||||
|
||||
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.'
|
||||
"==== ERROR ====`r`n"
|
||||
"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.'
|
||||
"==== ERROR ====`r`n"
|
||||
"Windows PowerShell is not running in Full Language Mode."
|
||||
ExitScript 1
|
||||
}
|
||||
|
||||
@ -68,21 +88,34 @@ $winbuild = 1
|
||||
try {
|
||||
$winbuild = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$env:SystemRoot\System32\kernel32.dll").FileBuildPart
|
||||
} catch {
|
||||
$winbuild = [int](Get-WmiObject Win32_OperatingSystem).BuildNumber
|
||||
$winbuild = [int]([wmi]'Win32_OperatingSystem=@').BuildNumber
|
||||
}
|
||||
|
||||
if ($winbuild -EQ 1) {
|
||||
Write-Host "==== ERROR ====`r`n"
|
||||
Write-Host 'Could not detect Windows build.'
|
||||
"==== ERROR ====`r`n"
|
||||
"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.'
|
||||
"==== ERROR ====`r`n"
|
||||
"This build of Windows is not supported by this script."
|
||||
ExitScript 1
|
||||
}
|
||||
|
||||
if ($All.IsPresent)
|
||||
{
|
||||
$isAll = {CONOUT "`r"}
|
||||
$noAll = {$null}
|
||||
}
|
||||
else
|
||||
{
|
||||
$isAll = {$null}
|
||||
$noAll = {CONOUT "`r"}
|
||||
}
|
||||
$Dlv = $Dlv.IsPresent
|
||||
$IID = $IID.IsPresent -Or $Dlv.IsPresent
|
||||
|
||||
$NT6 = $winbuild -GE 6000
|
||||
$NT7 = $winbuild -GE 7600
|
||||
$NT9 = $winbuild -GE 9600
|
||||
@ -94,10 +127,10 @@ $line3 = "____________________________________________________________"
|
||||
|
||||
function echoWindows
|
||||
{
|
||||
Write-Host "$line2"
|
||||
Write-Host "=== Windows Status ==="
|
||||
Write-Host "$line2"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line2"
|
||||
CONOUT "=== Windows Status ==="
|
||||
CONOUT "$line2"
|
||||
& $noAll
|
||||
}
|
||||
|
||||
function echoOffice
|
||||
@ -106,18 +139,22 @@ function echoOffice
|
||||
return
|
||||
}
|
||||
|
||||
if ($All.IsPresent) {Write-Host}
|
||||
Write-Host "$line2"
|
||||
Write-Host "=== Office Status ==="
|
||||
Write-Host "$line2"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
& $isAll
|
||||
CONOUT "$line2"
|
||||
CONOUT "=== Office Status ==="
|
||||
CONOUT "$line2"
|
||||
& $noAll
|
||||
|
||||
$script:doMSG = 0
|
||||
}
|
||||
|
||||
function strGetRegistry($strKey, $strName)
|
||||
{
|
||||
Get-ItemProperty -EA 0 $strKey | select -EA 0 -Expand $strName
|
||||
try {
|
||||
return [Microsoft.Win32.Registry]::GetValue($strKey, $strName, $null)
|
||||
} catch {
|
||||
return $null
|
||||
}
|
||||
}
|
||||
|
||||
function CheckOhook
|
||||
@ -148,55 +185,57 @@ function CheckOhook
|
||||
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}
|
||||
& $isAll
|
||||
CONOUT "$line2"
|
||||
CONOUT "=== Office Ohook Status ==="
|
||||
CONOUT "$line2"
|
||||
$host.UI.WriteLine('Yellow', 'Black', "`r`nOhook for permanent Office activation is installed.`r`nYou can ignore the below mentioned Office activation status.")
|
||||
& $noAll
|
||||
}
|
||||
|
||||
#region WMI
|
||||
function DetectID($strSLP, $strAppId, [ref]$strAppVar)
|
||||
function DetectID($strSLP, $strAppId)
|
||||
{
|
||||
$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
|
||||
}
|
||||
$ppk = (" AND PartialProductKey <> NULL)", ")")[$All.IsPresent]
|
||||
$fltr = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId'"
|
||||
$clause = $fltr + $ppk
|
||||
$sWmi = [wmisearcher]$clause
|
||||
$sWmi.Options.Rewindable = $false
|
||||
return ($sWmi.Get().Count -GT 0)
|
||||
}
|
||||
|
||||
function GetID($strSLP, $strAppId, $strProperty = "ID")
|
||||
function GetID($strSLP, $strAppId)
|
||||
{
|
||||
$NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001)
|
||||
$IDs = [Collections.ArrayList]@()
|
||||
$isAdd = (" AND LicenseDependsOn <> NULL)", ")")[$NT5]
|
||||
$noAdd = " AND LicenseDependsOn IS NULL)"
|
||||
$query = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId' AND PartialProductKey"
|
||||
|
||||
if ($All.IsPresent) {
|
||||
$fltr = "ApplicationID='$strAppId' AND PartialProductKey IS NULL"
|
||||
$clause = $fltr
|
||||
$fltr = $query + " IS NULL"
|
||||
$clause = $fltr + $isAdd
|
||||
$sWmi = [wmisearcher]$clause
|
||||
$sWmi.Options.Rewindable = $false
|
||||
try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {}
|
||||
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 += $_}
|
||||
$clause = $fltr + $noAdd
|
||||
$sWmi = [wmisearcher]$clause
|
||||
$sWmi.Options.Rewindable = $false
|
||||
try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
$fltr = "ApplicationID='$strAppId' AND PartialProductKey <> NULL"
|
||||
$clause = $fltr
|
||||
$fltr = $query + " <> NULL"
|
||||
$clause = $fltr + $isAdd
|
||||
$sWmi = [wmisearcher]$clause
|
||||
$sWmi.Options.Rewindable = $false
|
||||
try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {}
|
||||
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 += $_}
|
||||
$clause = $fltr + $noAdd
|
||||
$sWmi = [wmisearcher]$clause
|
||||
$sWmi.Options.Rewindable = $false
|
||||
try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {}
|
||||
}
|
||||
|
||||
return $IDs
|
||||
@ -233,38 +272,45 @@ function DetectSubscription {
|
||||
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"
|
||||
CONOUT "`nSubscription information:"
|
||||
CONOUT " Edition: $SubMsgEdition"
|
||||
CONOUT " Type : $SubMsgType"
|
||||
CONOUT " Status : $SubMsgStatus"
|
||||
CONOUT " Expiry : $SubMsgExpiry"
|
||||
}
|
||||
|
||||
function DetectAdbaClient
|
||||
{
|
||||
CONOUT "`nAD Activation client information:"
|
||||
CONOUT " Object Name: $ADActivationObjectName"
|
||||
CONOUT " Domain Name: $ADActivationObjectDN"
|
||||
CONOUT " CSVLK Extended PID: $ADActivationCsvlkPid"
|
||||
CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuId"
|
||||
}
|
||||
|
||||
function DetectAvmClient
|
||||
{
|
||||
Write-Host
|
||||
Write-Host "Automatic VM Activation client information:"
|
||||
CONOUT "`nAutomatic VM Activation client information:"
|
||||
if (-Not [String]::IsNullOrEmpty($IAID)) {
|
||||
Write-Host " Guest IAID: $IAID"
|
||||
CONOUT " Guest IAID: $IAID"
|
||||
} else {
|
||||
Write-Host " Guest IAID: Not Available"
|
||||
CONOUT " Guest IAID: Not Available"
|
||||
}
|
||||
if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) {
|
||||
Write-Host " Host machine name: $AutomaticVMActivationHostMachineName"
|
||||
CONOUT " Host machine name: $AutomaticVMActivationHostMachineName"
|
||||
} else {
|
||||
Write-Host " Host machine name: Not Available"
|
||||
CONOUT " 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"
|
||||
CONOUT " Activation time: $EED UTC"
|
||||
} else {
|
||||
Write-Host " Activation time: Not Available"
|
||||
CONOUT " Activation time: Not Available"
|
||||
}
|
||||
if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) {
|
||||
Write-Host " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2"
|
||||
CONOUT " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2"
|
||||
} else {
|
||||
Write-Host " Host Digital PID2: Not Available"
|
||||
CONOUT " Host Digital PID2: Not Available"
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,32 +340,30 @@ function DetectKmsHost
|
||||
$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"
|
||||
CONOUT "`nKey Management Service host information:"
|
||||
CONOUT " Current count: $KeyManagementServiceCurrentCount"
|
||||
CONOUT " Listening on Port: $KeyManagementServiceListeningPort"
|
||||
CONOUT " DNS publishing: $KeyManagementServiceDnsPublishing"
|
||||
CONOUT " 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"
|
||||
CONOUT "`nKey Management Service cumulative requests received from clients:"
|
||||
CONOUT " Total: $KeyManagementServiceTotalRequests"
|
||||
CONOUT " Failed: $KeyManagementServiceFailedRequests"
|
||||
CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests"
|
||||
CONOUT " Licensed: $KeyManagementServiceLicensedRequests"
|
||||
CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests"
|
||||
CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests"
|
||||
CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests"
|
||||
if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"}
|
||||
}
|
||||
}
|
||||
|
||||
function DetectKmsClient
|
||||
{
|
||||
if ($null -NE $VLActivationTypeEnabled) {Write-Host "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"}
|
||||
Write-Host
|
||||
if ($null -NE $VLActivationTypeEnabled) {CONOUT "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"}
|
||||
CONOUT "`r"
|
||||
if ($LicenseStatus -NE 1) {
|
||||
Write-Host "Please activate the product in order to update KMS client information values."
|
||||
CONOUT "Please activate the product in order to update KMS client information values."
|
||||
return
|
||||
}
|
||||
|
||||
@ -352,33 +396,42 @@ function DetectKmsClient
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Key Management Service client information:"
|
||||
Write-Host " Client Machine ID (CMID): $($objSvc.ClientMachineID)"
|
||||
CONOUT "Key Management Service client information:"
|
||||
CONOUT " Client Machine ID (CMID): $($objSvc.ClientMachineID)"
|
||||
if ($null -EQ $KmsReg) {
|
||||
Write-Host " $KmsDns"
|
||||
Write-Host " Registered KMS machine name: KMS name not available"
|
||||
CONOUT " $KmsDns"
|
||||
CONOUT " Registered KMS machine name: KMS name not available"
|
||||
} else {
|
||||
Write-Host " $KmsReg"
|
||||
CONOUT " $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"}
|
||||
if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"}
|
||||
CONOUT " KMS machine extended PID: $KeyManagementServiceProductKeyID"
|
||||
CONOUT " Activation interval: $VLActivationInterval minutes"
|
||||
CONOUT " Renewal interval: $VLRenewalInterval minutes"
|
||||
if ($null -NE $KeyManagementServiceHostCaching) {CONOUT " KMS host caching: $KeyManagementServiceHostCaching"}
|
||||
if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {CONOUT " 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}
|
||||
try
|
||||
{
|
||||
$objPrd = [wmisearcher]"SELECT * FROM $strSLP WHERE ID='$strID'"
|
||||
$objPrd.Options.Rewindable = $false
|
||||
$objPrd.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} }
|
||||
$objPrd.Dispose()
|
||||
}
|
||||
catch
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
$winID = ($ApplicationID -EQ $winApp)
|
||||
$winPR = ($winID -And -Not $LicenseIsAddon)
|
||||
$Vista = ($winID -And $NT6 -And -Not $NT7)
|
||||
$NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001)
|
||||
$reapp = ("Windows", "App")[!$winID]
|
||||
$prmnt = ("machine", "product")[!$winPR]
|
||||
|
||||
if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"}
|
||||
if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"}
|
||||
@ -403,7 +456,7 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
$LicenseInf = "Licensed"
|
||||
$LicenseMsg = $null
|
||||
if ($GracePeriodRemaining -EQ 0) {
|
||||
if ($winPR) {$ExpireMsg = "The machine is permanently activated."} else {$ExpireMsg = "The product is permanently activated."}
|
||||
$ExpireMsg = "The $prmnt is permanently activated."
|
||||
} else {
|
||||
$LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))"
|
||||
if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"}
|
||||
@ -424,8 +477,9 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
if ($LicenseStatus -EQ 5 -And -Not $NT5) {
|
||||
$LicenseInf = "Notification"
|
||||
$LicenseMsg = "Notification Reason: $LicenseReason"
|
||||
if ($LicenseReason -EQ "0xC004F00F") {if ($null -NE $cKmsClient) {$LicenseMsg = $LicenseMsg + " (KMS license expired)."} else {$LicenseMsg = $LicenseMsg + " (hardware out of tolerance)."}}
|
||||
if ($LicenseReason -EQ "0xC004F200") {$LicenseMsg = $LicenseMsg + " (non-genuine)."}
|
||||
if ($LicenseReason -EQ "0xC004F009") {$LicenseMsg = $LicenseMsg + " (grace time expired)."}
|
||||
if ($LicenseReason -EQ "0xC004F009" -Or $LicenseReason -EQ "0xC004F064") {$LicenseMsg = $LicenseMsg + " (grace time expired)."}
|
||||
}
|
||||
if ($LicenseStatus -GT 5 -Or ($LicenseStatus -GT 4 -And $NT5)) {
|
||||
$LicenseInf = "Unknown"
|
||||
@ -437,25 +491,61 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
}
|
||||
|
||||
if ($winPR -And $PartialProductKey -And -Not $NT9) {
|
||||
$dp4 = Get-ItemProperty -EA 0 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | select -EA 0 -Expand DigitalProductId4
|
||||
$dp4 = strGetRegistry "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "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 ($winPR -And $Dlv -And $NT7 -And $null -EQ $RemainingAppReArmCount) {
|
||||
try
|
||||
{
|
||||
$tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS"
|
||||
$tmp.Options.Rewindable = $false
|
||||
$tmp.Get() | select -Expand Properties -EA 0 | foreach {set $_.Name $_.Value}
|
||||
$tmp.Dispose()
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
$add_on = $Name.IndexOf("add-on for", 5)
|
||||
|
||||
& $isAll
|
||||
if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"}
|
||||
CONOUT "Description: $Description"
|
||||
CONOUT "Activation ID: $ID"
|
||||
if ($null -NE $ProductKeyID) {CONOUT "Extended PID: $ProductKeyID"}
|
||||
if ($null -NE $ProductKeyID2 -And $Dlv) {CONOUT "Product ID: $ProductKeyID2"}
|
||||
if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"}
|
||||
if ($null -NE $ProductKeyChannel) {CONOUT "Product Key Channel: $ProductKeyChannel"}
|
||||
if ($null -NE $PartialProductKey) {CONOUT "Partial Product Key: $PartialProductKey"}
|
||||
CONOUT "License Status: $LicenseInf"
|
||||
if ($null -NE $LicenseMsg) {CONOUT "$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"
|
||||
CONOUT "Evaluation End Date: $EED UTC"
|
||||
}
|
||||
if ($Dlv) {
|
||||
if ($null -NE $RemainingWindowsReArmCount) {
|
||||
CONOUT "Remaining Windows rearm count: $RemainingWindowsReArmCount"
|
||||
}
|
||||
if ($null -NE $RemainingSkuReArmCount -And $RemainingSkuReArmCount -NE 4294967295) {
|
||||
CONOUT "Remaining $reapp rearm count: $RemainingAppReArmCount"
|
||||
CONOUT "Remaining SKU rearm count: $RemainingSkuReArmCount"
|
||||
}
|
||||
if ($null -NE $TrustedTime -And $LicenseStatus -NE 0) {
|
||||
$TTD = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($TrustedTime),$null,32).ToString('yyyy-MM-dd hh:mm:ss tt')
|
||||
CONOUT "Trusted time: $TTD"
|
||||
}
|
||||
}
|
||||
if ($LicenseStatus -EQ 0) {
|
||||
return
|
||||
}
|
||||
|
||||
if ($strSLP -EQ $wslp -And $null -NE $PartialProductKey -And $null -NE $ADActivationObjectName -And $VLActivationType -EQ 1) {
|
||||
DetectAdbaClient
|
||||
}
|
||||
|
||||
if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) {
|
||||
@ -467,16 +557,22 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
$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"}
|
||||
if ($null -NE $ExpireMsg) {CONOUT "`n $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}
|
||||
}
|
||||
try
|
||||
{
|
||||
$objSvc = New-Object PSObject
|
||||
$wmiSvc = [wmisearcher]"SELECT * FROM $strSLS"
|
||||
$wmiSvc.Options.Rewindable = $false
|
||||
$wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {$objSvc | Add-Member 8 $_.Name $_.Value} }
|
||||
$wmiSvc.Dispose()
|
||||
if ($null -EQ $IsKeyManagementServiceMachine) {$objSvc.PSObject.Properties | foreach {set $_.Name $_.Value}}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
if ($strSLS -EQ $wsls -And $NT9) {
|
||||
@ -486,6 +582,7 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
}
|
||||
|
||||
if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) {
|
||||
if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"}
|
||||
DetectKmsHost
|
||||
}
|
||||
|
||||
@ -493,7 +590,9 @@ function GetResult($strSLP, $strSLS, $strID)
|
||||
DetectKmsClient
|
||||
}
|
||||
|
||||
if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"}
|
||||
if ($null -EQ $cKmsHost) {
|
||||
if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"}
|
||||
}
|
||||
|
||||
if ($chkSub) {
|
||||
DetectSubscription
|
||||
@ -533,11 +632,10 @@ function PrintModePerPridFromRegistry
|
||||
$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."
|
||||
CONOUT "`nNo registry keys found."
|
||||
Return
|
||||
}
|
||||
Write-Host
|
||||
CONOUT "`r"
|
||||
$vNextPrids | ForEach `
|
||||
{
|
||||
$mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_
|
||||
@ -547,7 +645,7 @@ function PrintModePerPridFromRegistry
|
||||
3 { $mode = "Device"; Break }
|
||||
Default { $mode = "Legacy"; Break }
|
||||
}
|
||||
Write-Host $_ = $mode
|
||||
CONOUT "$_ = $mode"
|
||||
}
|
||||
}
|
||||
|
||||
@ -561,8 +659,7 @@ function PrintSharedComputerLicensing
|
||||
$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."
|
||||
CONOUT "`nNo registry keys found."
|
||||
Return
|
||||
}
|
||||
$scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue
|
||||
@ -574,23 +671,17 @@ function PrintSharedComputerLicensing
|
||||
{
|
||||
$scaMode = "Enabled"
|
||||
}
|
||||
Write-Host
|
||||
Write-Host "Status:" $scaMode
|
||||
Write-Host
|
||||
CONOUT "`nStatus: $scaMode"
|
||||
CONOUT "`r"
|
||||
$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)
|
||||
If ($null -Eq $tokenFiles -Or $tokenFiles.Length -Eq 0)
|
||||
{
|
||||
Write-Host "No tokens found."
|
||||
Return
|
||||
}
|
||||
If ($tokenFiles.Length -Eq 0)
|
||||
{
|
||||
Write-Host "No tokens found."
|
||||
CONOUT "No tokens found."
|
||||
Return
|
||||
}
|
||||
$tokenFiles | ForEach `
|
||||
@ -624,16 +715,9 @@ function PrintLicensesInformation
|
||||
{
|
||||
$licenseFiles = Get-ChildItem -Path $licensePath -Recurse | Where-Object { !$_.PSIsContainer }
|
||||
}
|
||||
If ($null -Eq $licenseFiles)
|
||||
If ($null -Eq $licenseFiles -Or $licenseFiles.Length -Eq 0)
|
||||
{
|
||||
Write-Host
|
||||
Write-Host "No licenses found."
|
||||
Return
|
||||
}
|
||||
If ($licenseFiles.Length -Eq 0)
|
||||
{
|
||||
Write-Host
|
||||
Write-Host "No licenses found."
|
||||
CONOUT "`nNo licenses found."
|
||||
Return
|
||||
}
|
||||
$licenseFiles | ForEach `
|
||||
@ -690,24 +774,20 @@ function vNextDiagRun
|
||||
Return
|
||||
}
|
||||
|
||||
if ($All.IsPresent) {Write-Host}
|
||||
Write-Host "$line2"
|
||||
Write-Host "=== Office vNext Status ==="
|
||||
Write-Host "$line2"
|
||||
Write-Host
|
||||
Write-Host "========== Mode per ProductReleaseId =========="
|
||||
& $isAll
|
||||
CONOUT "$line2"
|
||||
CONOUT "=== Office vNext Status ==="
|
||||
CONOUT "$line2"
|
||||
CONOUT "`n========== Mode per ProductReleaseId =========="
|
||||
PrintModePerPridFromRegistry
|
||||
Write-Host
|
||||
Write-Host "========== Shared Computer Licensing =========="
|
||||
CONOUT "`n========== Shared Computer Licensing =========="
|
||||
PrintSharedComputerLicensing
|
||||
Write-Host
|
||||
Write-Host "========== vNext licenses ==========="
|
||||
CONOUT "`n========== vNext licenses ==========="
|
||||
PrintLicensesInformation -Mode "NUL"
|
||||
Write-Host
|
||||
Write-Host "========== Device licenses =========="
|
||||
CONOUT "`n========== Device licenses =========="
|
||||
PrintLicensesInformation -Mode "Device"
|
||||
Write-Host "$line3"
|
||||
Write-Host
|
||||
CONOUT "$line3"
|
||||
CONOUT "`r"
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -790,13 +870,13 @@ function PrintStateData {
|
||||
}
|
||||
|
||||
[string[]]$pwszStateString = $Marshal::PtrToStringUni($pwszStateData) -replace ";", "`n "
|
||||
Write-Host " $pwszStateString"
|
||||
CONOUT (" $pwszStateString")
|
||||
|
||||
$Marshal::FreeHGlobal($pwszStateData)
|
||||
return $TRUE
|
||||
}
|
||||
|
||||
function PrintLastActivationHRresult {
|
||||
function PrintLastActivationHResult {
|
||||
$pdwLastHResult = 0
|
||||
$cbSize = 0
|
||||
|
||||
@ -809,12 +889,34 @@ function PrintLastActivationHRresult {
|
||||
return $FALSE
|
||||
}
|
||||
|
||||
Write-Host (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult))
|
||||
CONOUT (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult))
|
||||
|
||||
$Marshal::FreeHGlobal($pdwLastHResult)
|
||||
return $TRUE
|
||||
}
|
||||
|
||||
function PrintLastActivationTime {
|
||||
$pdwLastTime = 0
|
||||
$cbSize = 0
|
||||
|
||||
if ($Win32::SLGetWindowsInformation(
|
||||
"Security-SPP-LastWindowsActivationTime",
|
||||
[ref]$null,
|
||||
[ref]$cbSize,
|
||||
[ref]$pdwLastTime
|
||||
)) {
|
||||
return $FALSE
|
||||
}
|
||||
|
||||
$actTime = $Marshal::ReadInt64($pdwLastTime)
|
||||
if ($actTime -ne 0) {
|
||||
CONOUT (" LastActivationTime={0}" -f [DateTime]::FromFileTimeUtc($actTime).ToString("yyyy/MM/dd:HH:mm:ss"))
|
||||
}
|
||||
|
||||
$Marshal::FreeHGlobal($pdwLastTime)
|
||||
return $TRUE
|
||||
}
|
||||
|
||||
function PrintIsWindowsGenuine {
|
||||
$dwGenuine = 0
|
||||
$ppwszGenuineStates = @(
|
||||
@ -830,9 +932,9 @@ function PrintIsWindowsGenuine {
|
||||
}
|
||||
|
||||
if ($dwGenuine -lt 5) {
|
||||
Write-Host (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine])
|
||||
CONOUT (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine])
|
||||
} else {
|
||||
Write-Host (" IsWindowsGenuine={0}" -f $dwGenuine)
|
||||
CONOUT (" IsWindowsGenuine={0}" -f $dwGenuine)
|
||||
}
|
||||
|
||||
return $TRUE
|
||||
@ -856,7 +958,7 @@ function PrintDigitalLicenseStatus {
|
||||
[bool]$bDigitalLicense = $FALSE
|
||||
|
||||
$bDigitalLicense = (($dwReturnCode -ge 0) -and ($dwReturnCode -ne 1))
|
||||
Write-Host (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense))
|
||||
CONOUT (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense))
|
||||
|
||||
return $TRUE
|
||||
}
|
||||
@ -874,7 +976,7 @@ function PrintSubscriptionStatus {
|
||||
return $FALSE
|
||||
}
|
||||
|
||||
Write-Host (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported))
|
||||
CONOUT (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported))
|
||||
|
||||
$pStatus = $Marshal::AllocHGlobal($Marshal::SizeOf([Type]$SubStatus))
|
||||
if ($Win32::ClipGetSubscriptionStatus([ref]$pStatus)) {
|
||||
@ -885,25 +987,26 @@ function PrintSubscriptionStatus {
|
||||
$sStatus = $Marshal::PtrToStructure($pStatus, [Type]$SubStatus)
|
||||
$Marshal::FreeHGlobal($pStatus)
|
||||
|
||||
Write-Host (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled))
|
||||
CONOUT (" 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)
|
||||
CONOUT (" SubscriptionSku={0}" -f $sStatus.dwSku)
|
||||
CONOUT (" SubscriptionState={0}" -f $sStatus.dwState)
|
||||
|
||||
return $TRUE
|
||||
}
|
||||
|
||||
function ClicRun
|
||||
{
|
||||
if ($All.IsPresent) {Write-Host}
|
||||
Write-Host "Client Licensing Check information:"
|
||||
& $isAll
|
||||
CONOUT "Client Licensing Check information:"
|
||||
|
||||
$null = PrintStateData
|
||||
$null = PrintLastActivationHRresult
|
||||
$null = PrintLastActivationHResult
|
||||
$null = PrintLastActivationTime
|
||||
$null = PrintIsWindowsGenuine
|
||||
|
||||
if ($DllDigital) {
|
||||
@ -914,15 +1017,15 @@ function ClicRun
|
||||
$null = PrintSubscriptionStatus
|
||||
}
|
||||
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
#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;
|
||||
$B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B;
|
||||
if (!$Pass.IsPresent) {clear;}
|
||||
}
|
||||
|
||||
$SysPath = "$env:SystemRoot\System32"
|
||||
@ -941,46 +1044,43 @@ $cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mo
|
||||
$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"
|
||||
$SLKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL"
|
||||
$NSKeyPath = "HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL"
|
||||
|
||||
'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $null}
|
||||
'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $false}
|
||||
|
||||
$OsppHook = 1
|
||||
try {gsv osppsvc -EA 1 | Out-Null} catch {$OsppHook = 0}
|
||||
$offsvc = "osppsvc"
|
||||
if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"}
|
||||
|
||||
if ($NT7 -Or -Not $NT6) {
|
||||
try {sasv sppsvc -EA 1} catch {}
|
||||
try {gsv $winsvc -EA 1 | Out-Null; $WsppHook = 1} catch {$WsppHook = 0}
|
||||
try {gsv $offsvc -EA 1 | Out-Null; $OsppHook = 1} catch {$OsppHook = 0}
|
||||
|
||||
if ($WsppHook -NE 0) {
|
||||
try {sasv $winsvc -EA 1} catch {}
|
||||
$cW1nd0ws = DetectID $wslp $winApp
|
||||
$c0ff1ce15 = DetectID $wslp $o15App
|
||||
$c0ff1ce14 = DetectID $wslp $o14App
|
||||
}
|
||||
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)
|
||||
try {sasv $offsvc -EA 1} catch {}
|
||||
$ospp15 = DetectID $oslp $o15App
|
||||
$ospp14 = DetectID $oslp $o14App
|
||||
}
|
||||
|
||||
if ($null -NE $cW1nd0ws)
|
||||
if ($cW1nd0ws)
|
||||
{
|
||||
echoWindows
|
||||
GetID $wslp $winApp | foreach -EA 1 {
|
||||
GetResult $wslp $wsls $_
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
}
|
||||
elseif ($NT6)
|
||||
{
|
||||
echoWindows
|
||||
Write-Host
|
||||
Write-Host "Error: product key not found."
|
||||
CONOUT "`nError: product key not found."
|
||||
}
|
||||
|
||||
if ($winbuild -GE 9200) {
|
||||
@ -994,39 +1094,43 @@ if ($c0ff1ce15 -Or $ospp15) {
|
||||
|
||||
$doMSG = 1
|
||||
|
||||
if ($null -NE $c0ff1ce15) {
|
||||
if ($c0ff1ce15)
|
||||
{
|
||||
echoOffice
|
||||
GetID $wslp $o15App | foreach -EA 1 {
|
||||
GetResult $wslp $wsls $_
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
}
|
||||
|
||||
if ($null -NE $c0ff1ce14) {
|
||||
if ($c0ff1ce14)
|
||||
{
|
||||
echoOffice
|
||||
GetID $wslp $o14App | foreach -EA 1 {
|
||||
GetResult $wslp $wsls $_
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
}
|
||||
|
||||
if ($null -NE $ospp15) {
|
||||
if ($ospp15)
|
||||
{
|
||||
echoOffice
|
||||
GetID $oslp $o15App | foreach -EA 1 {
|
||||
GetResult $oslp $osls $_
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
}
|
||||
|
||||
if ($null -NE $ospp14) {
|
||||
if ($ospp14)
|
||||
{
|
||||
echoOffice
|
||||
GetID $oslp $o14App | foreach -EA 1 {
|
||||
GetResult $oslp $osls $_
|
||||
Write-Host "$line3"
|
||||
if (!$All.IsPresent) {Write-Host}
|
||||
CONOUT "$line3"
|
||||
& $noAll
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -84,7 +84,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -122,6 +122,16 @@ call :dk_setvar
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -161,33 +171,6 @@ goto done2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -200,6 +183,58 @@ goto done2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto done2
|
||||
)
|
||||
|
||||
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...
|
||||
goto done2
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto done2
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto done2
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -210,34 +245,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -246,9 +280,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -264,7 +308,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -305,6 +349,7 @@ set HWID_Activation.cmd=Activators\HWID_Activation.cmd
|
||||
set KMS38_Activation.cmd=Activators\KMS38_Activation.cmd
|
||||
set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd
|
||||
set Ohook_Activation_AIO.cmd=Activators\Ohook_Activation_AIO.cmd
|
||||
set TSforge_Activation.cmd=Activators\TSforge_Activation.cmd
|
||||
pushd "!_work!"
|
||||
|
||||
set _nofile=
|
||||
@ -313,6 +358,7 @@ for %%# in (
|
||||
%KMS38_Activation.cmd%
|
||||
%Online_KMS_Activation.cmd%
|
||||
%Ohook_Activation_AIO.cmd%
|
||||
%TSforge_Activation.cmd%
|
||||
) do (
|
||||
if not exist "%%#" set _nofile=1
|
||||
)
|
||||
@ -338,36 +384,34 @@ echo:
|
||||
echo:
|
||||
echo:
|
||||
echo: Extract $OEM$ folder on the desktop
|
||||
echo: ________________________________________________________
|
||||
echo: ____________________________________________________________
|
||||
echo:
|
||||
echo: [1] HWID
|
||||
echo: [2] Ohook
|
||||
echo: [3] KMS38
|
||||
echo: [4] Online KMS
|
||||
echo: [1] HWID [Windows]
|
||||
echo: [2] Ohook [Office]
|
||||
echo: [3] TSforge [Windows / ESU / Office]
|
||||
echo: [4] KMS38 [Windows]
|
||||
echo: [5] Online KMS [Windows / Office]
|
||||
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: [6] HWID [Windows] ^+ Ohook [Office]
|
||||
echo: [7] HWID [Windows] ^+ Ohook [Office] ^+ TSforge [ESU]
|
||||
echo: [8] TSforge [Windows] ^+ Online KMS [Office]
|
||||
echo:
|
||||
call :dk_color2 %_White% " [R] " %_Green% "ReadMe"
|
||||
echo: [0] Exit
|
||||
echo: ________________________________________________________
|
||||
call :dk_color2 %_White% " [R] " %_Green% "ReadMe"
|
||||
echo: [0] Exit
|
||||
echo: ____________________________________________________________
|
||||
echo:
|
||||
call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :"
|
||||
choice /C:123456789R0 /N
|
||||
choice /C:12345678R0 /N
|
||||
set _erl=%errorlevel%
|
||||
|
||||
if %_erl%==11 exit /b
|
||||
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
|
||||
if %_erl%==6 goto:hwid_kms
|
||||
if %_erl%==5 goto:hwid_ohook
|
||||
if %_erl%==4 goto:kms
|
||||
if %_erl%==3 goto:kms38
|
||||
if %_erl%==10 exit /b
|
||||
if %_erl%==9 start %mas%oem-folder &goto :Menu
|
||||
if %_erl%==8 goto:tsforge_kms
|
||||
if %_erl%==7 goto:hwid_ohook_tsforge
|
||||
if %_erl%==6 goto:hwid_ohook
|
||||
if %_erl%==5 goto:kms
|
||||
if %_erl%==4 goto:kms38
|
||||
if %_erl%==3 goto:tsforge
|
||||
if %_erl%==2 goto:ohook
|
||||
if %_erl%==1 goto:hwid
|
||||
goto :Menu
|
||||
@ -434,6 +478,36 @@ cd \
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:tsforge
|
||||
|
||||
cls
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export tsforge_setup
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=TSforge
|
||||
goto done
|
||||
|
||||
:tsforge_setup:
|
||||
@echo off
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
call "%~dp0TSforge_Activation.cmd" /Z-WindowsESUOffice
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
:tsforge_setup:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:kms38
|
||||
|
||||
cls
|
||||
@ -532,26 +606,28 @@ cd \
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:hwid_kms
|
||||
:hwid_ohook_tsforge
|
||||
|
||||
cls
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
|
||||
copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export hwid_kms_setup
|
||||
call :export hwid_ohook_tsforge_setup
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
|
||||
if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=HWID [Windows] + Online KMS [Office]
|
||||
set oem=HWID [Windows] + Ohook [Office] + TSforge [ESU]
|
||||
goto done
|
||||
|
||||
:hwid_kms_setup:
|
||||
:hwid_ohook_tsforge_setup:
|
||||
@echo off
|
||||
|
||||
fltmc >nul || exit /b
|
||||
@ -560,80 +636,46 @@ setlocal
|
||||
call "%~dp0HWID_Activation.cmd" /HWID
|
||||
endlocal
|
||||
|
||||
setlocal
|
||||
call "%~dp0Online_KMS_Activation.cmd" /K-Office
|
||||
endlocal
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
:hwid_kms_setup:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:kms38_ohook
|
||||
|
||||
cls
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||
copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
|
||||
popd
|
||||
call :export kms38_ohook_setup
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=KMS38 [Windows] + Ohook [Office]
|
||||
goto done
|
||||
|
||||
:kms38_ohook_setup:
|
||||
@echo off
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
setlocal
|
||||
call "%~dp0KMS38_Activation.cmd" /KMS38
|
||||
endlocal
|
||||
|
||||
setlocal
|
||||
call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
|
||||
endlocal
|
||||
|
||||
setlocal
|
||||
call "%~dp0TSforge_Activation.cmd" /Z-ESU
|
||||
endlocal
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
:kms38_ohook_setup:
|
||||
:hwid_ohook_tsforge_setup:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:kms38_kms
|
||||
:tsforge_kms
|
||||
|
||||
cls
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||
copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export kms38_kms_setup
|
||||
call :export tsforge_kms_setup
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=KMS38 [Windows] + Online KMS [Office]
|
||||
set oem=TSforge [Windows] + Online KMS [Office]
|
||||
goto done
|
||||
|
||||
:kms38_kms_setup:
|
||||
:tsforge_kms_setup:
|
||||
@echo off
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
setlocal
|
||||
call "%~dp0KMS38_Activation.cmd" /KMS38
|
||||
call "%~dp0TSforge_Activation.cmd" /Z-Windows
|
||||
endlocal
|
||||
|
||||
setlocal
|
||||
@ -642,45 +684,7 @@ endlocal
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
:kms38_kms_setup:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:kms_ohook
|
||||
|
||||
cls
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
|
||||
popd
|
||||
call :export kms_ohook_setup
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=Online KMS [Windows] + Ohook [Office]
|
||||
goto done
|
||||
|
||||
:kms_ohook_setup:
|
||||
@echo off
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
setlocal
|
||||
call "%~dp0Online_KMS_Activation.cmd" /K-Windows
|
||||
endlocal
|
||||
|
||||
setlocal
|
||||
call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
|
||||
endlocal
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
:kms_ohook_setup:
|
||||
:tsforge_kms_setup:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -698,7 +702,7 @@ call :dk_color %Blue% "%oem%"
|
||||
call :dk_color %Green% "$OEM$ folder was successfully created on your Desktop."
|
||||
echo "%oem%" | find /i "38" %nul% && (
|
||||
echo:
|
||||
echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^),
|
||||
echo To KMS38 activate Server Cor/Acor editions [No GUI Versions],
|
||||
echo Check this page %mas%oem-folder
|
||||
)
|
||||
echo ______________________________________________________________
|
||||
@ -728,7 +732,7 @@ exit /b
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set masver=2.9
|
||||
@set masver=3.0
|
||||
@echo off
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ echo:
|
||||
echo Null service is not running, script may crash...
|
||||
echo:
|
||||
echo:
|
||||
echo Help - %mas%fix_service
|
||||
echo Check this webpage for help - %mas%fix_service
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20
|
||||
@ -84,7 +84,7 @@ 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 Check this webpage for help - %mas%troubleshoot
|
||||
echo:
|
||||
echo:
|
||||
ping 127.0.0.1 -n 20 >nul
|
||||
@ -123,6 +123,16 @@ set "line=______________________________________________________________________
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% EQU 1 (
|
||||
%eline%
|
||||
echo Failed to detect Windows build number.
|
||||
echo:
|
||||
setlocal EnableDelayedExpansion
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected [%winbuild%].
|
||||
@ -162,33 +172,6 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest:
|
||||
|
||||
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\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.
|
||||
echo:
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
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 || (
|
||||
@ -201,6 +184,58 @@ goto dk_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
::pstst $ExecutionContext.SessionState.LanguageMode :pstst
|
||||
|
||||
for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a)
|
||||
|
||||
if /i not "%tstresult%"=="FullLanguage" (
|
||||
%eline%
|
||||
echo: %tstresult%
|
||||
cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode"
|
||||
|
||||
REM check LanguageMode
|
||||
|
||||
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
|
||||
echo FullLanguage mode not found in PowerShell. Aborting...
|
||||
echo If you have applied restrictions on Powershell then undo those changes.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%fix_powershell
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
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...
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check for Mal-ware that may cause issues with Powershell
|
||||
|
||||
for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
|
||||
echo "%%f"
|
||||
echo Mal%blank%ware found, PowerShell is not working properly.
|
||||
echo:
|
||||
set fixes=%fixes% %mas%remove_mal%w%ware
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
REM check antivirus and other errors
|
||||
|
||||
echo PowerShell is not working properly. Aborting...
|
||||
cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }"""
|
||||
echo:
|
||||
set fixes=%fixes% %mas%troubleshoot
|
||||
call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
|
||||
goto dk_done
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
|
||||
|
||||
if %winbuild% GEQ 17763 (
|
||||
@ -211,34 +246,33 @@ 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=
|
||||
set lines=0
|
||||
for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A
|
||||
if !lines! GEQ 100 set terminal=
|
||||
)
|
||||
|
||||
if defined ps32onArm goto :skipQE
|
||||
if %_unattended%==1 goto :skipQE
|
||||
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
|
||||
|
||||
:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
|
||||
:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
|
||||
:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
|
||||
|
||||
set resetQE=1
|
||||
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
|
||||
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
|
||||
|
||||
if defined terminal (
|
||||
set "launchcmd=start conhost.exe %psc%"
|
||||
) else (
|
||||
set "launchcmd=%psc%"
|
||||
start conhost.exe "!_batf!" %_args% -qedit
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
) else if %resetQE% EQU 1 (
|
||||
start cmd.exe /c ""!_batf!" %_args% -qedit"
|
||||
start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: 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
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -247,9 +281,19 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080)
|
||||
|
||||
set -=
|
||||
set old=
|
||||
set pingp=
|
||||
set upver=%masver:.=%
|
||||
|
||||
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))
|
||||
for %%A in (
|
||||
activ%-%ated.win
|
||||
mass%-%grave.dev
|
||||
) do if not defined pingp (
|
||||
for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
|
||||
if not "%%B"=="" (set old=1& set pingp=1)
|
||||
for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
|
||||
if not "%%C"=="" set old=
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if defined old (
|
||||
@ -265,7 +309,7 @@ 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 !errorlevel!==1 (start %mas% & exit /b)
|
||||
)
|
||||
)
|
||||
|
||||
@ -1425,7 +1469,7 @@ exit /b
|
||||
|
||||
:dk_setvar
|
||||
|
||||
set psc=powershell.exe
|
||||
set psc=powershell.exe -nop -c
|
||||
set winbuild=1
|
||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||
|
||||
|
27
README.md
27
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
<h1 align="center">Microsoft Activation Scripts (MAS)</h1>
|
||||
|
||||
<p align="center">Open-source Windows and Office activator featuring HWID, Ohook, KMS38, and Online KMS activation methods, along with advanced troubleshooting.</p>
|
||||
<p align="center">Open-source Windows and Office activator featuring HWID, Ohook, TSforge, KMS38, and Online KMS activation methods, along with advanced troubleshooting.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
@ -15,19 +15,12 @@
|
||||
```
|
||||
irm https://get.activated.win | iex
|
||||
```
|
||||
3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation.
|
||||
4. That's all.
|
||||
|
||||
<details>
|
||||
<summary>More options</summary>
|
||||
|
||||
- Alternatively, you can use the following (It will be deprecated in the future.)
|
||||
Alternatively, you can use the following (It will be deprecated in the future.)
|
||||
```
|
||||
irm https://massgrave.dev/get | iex
|
||||
```
|
||||
- The URL `get.activated.win` might be blocked by some DNS services because it is a new domain.
|
||||
|
||||
</details>
|
||||
3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation.
|
||||
4. That's all.
|
||||
|
||||
---
|
||||
|
||||
@ -50,6 +43,14 @@ or
|
||||
|
||||
---
|
||||
|
||||
### 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).
|
||||
|
||||
---
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> - The IRM command in PowerShell downloads a script from a specified URL, and the IEX command executes it.
|
||||
@ -61,8 +62,8 @@ or
|
||||
To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches).
|
||||
|
||||
```
|
||||
Latest Version: 2.9
|
||||
Release date: 20-Dec-2024
|
||||
Latest Version: 3.0
|
||||
Release date: 14-Feb-2025
|
||||
```
|
||||
|
||||
### [Troubleshooting / Help](https://massgrave.dev/troubleshoot)
|
||||
|
Reference in New Issue
Block a user