Compare commits

..

4 Commits

Author SHA1 Message Date
WindowsAddict 73eabbff59 Remove WPA check
Already present in activation scripts
2024-08-17 07:17:04 +05:30
WindowsAddict bc5efae19d Remove Office vNext cleaning code
Its already there in activation scripts
2024-08-17 07:08:19 +05:30
WindowsAddict deb74ab9b8 Optimize DISM restore and SFC scan log creation 2024-08-17 02:28:32 +05:30
WindowsAddict d08ed1bd38 Update Troubleshoot script with 2.7 structure 2024-08-17 01:41:42 +05:30
1 changed files with 228 additions and 308 deletions

View File

@ -1,15 +1,12 @@
@set masver=2.6 @set masver=2.6
@setlocal DisableDelayedExpansion
@echo off @echo off
::============================================================================ ::============================================================================
:: ::
:: This script is a part of 'Microsoft-Activation-Scripts' (MAS) project.
::
:: Homepage: mass grave[.]dev :: Homepage: mass grave[.]dev
:: Email: windowsaddict@protonmail.com :: Email: mas.help@outlook.com
:: ::
::============================================================================ ::============================================================================
@ -17,26 +14,32 @@
::======================================================================================================================================== ::========================================================================================================================================
:: Set Path variable, it helps if it is misconfigured in the system :: Set Environment variables, it helps if they are misconfigured in the system
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" setlocal EnableExtensions
setlocal DisableDelayedExpansion
set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
set "SysPath=%SystemRoot%\System32"
set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
if exist "%SystemRoot%\Sysnative\reg.exe" ( if exist "%SystemRoot%\Sysnative\reg.exe" (
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%" set "SysPath=%SystemRoot%\Sysnative"
set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
) )
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows set "ComSpec=%SysPath%\cmd.exe"
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules"
set "_cmdf=%~f0" set "_cmdf=%~f0"
for %%# in (%*) do ( for %%# in (%*) do (
if /i "%%#"=="r1" set r1=1 if /i "%%#"=="r1" set r1=1
if /i "%%#"=="r2" set r2=1 if /i "%%#"=="r2" set r2=1
if /i "%%#"=="-qedit" (
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "1" /f %nul1%
rem check the code below admin elevation to understand why it's here
)
) )
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
@ -64,10 +67,10 @@ echo:
echo Null service is not running, script may crash... echo Null service is not running, script may crash...
echo: echo:
echo: echo:
echo Help - %mas%troubleshoot.html echo Help - %mas%troubleshoot
echo: echo:
echo: echo:
ping 127.0.0.1 -n 10 ping 127.0.0.1 -n 20
) )
cls cls
@ -76,9 +79,13 @@ cls
pushd "%~dp0" pushd "%~dp0"
>nul findstr /v "$" "%~nx0" && ( >nul findstr /v "$" "%~nx0" && (
echo: echo:
echo Error: Script either has LF line ending issue or an empty line at the end of the script is missing. echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
echo: echo:
ping 127.0.0.1 -n 6 >nul echo:
echo Help - %mas%troubleshoot
echo:
echo:
ping 127.0.0.1 -n 20 >nul
popd popd
exit /b exit /b
) )
@ -92,6 +99,7 @@ title Troubleshoot %masver%
set _args= set _args=
set _elev= set _elev=
set _unattended=0
set _args=%* set _args=%*
if defined _args set _args=%_args:"=% if defined _args set _args=%_args:"=%
@ -106,20 +114,8 @@ set "nul2=2>nul"
set "nul6=2^>nul" set "nul6=2^>nul"
set "nul=>nul 2>&1" set "nul=>nul 2>&1"
set psc=powershell.exe call :dk_setvar
set winbuild=1
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
set _NCS=1
if %winbuild% LSS 10586 set _NCS=0
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
call :_colorprep
set "nceline=echo: &echo ==== ERROR ==== &echo:"
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:"
set "line=_________________________________________________________________________________________________" set "line=_________________________________________________________________________________________________"
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
::======================================================================================================================================== ::========================================================================================================================================
@ -127,13 +123,7 @@ if %winbuild% LSS 7600 (
%nceline% %nceline%
echo Unsupported OS version detected [%winbuild%]. echo Unsupported OS version detected [%winbuild%].
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
goto at_done goto dk_done
)
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
%nceline%
echo Unable to find powershell.exe in the system.
goto at_done
) )
::======================================================================================================================================== ::========================================================================================================================================
@ -147,6 +137,7 @@ set "_batf=%~f0"
set "_batp=%_batf:'=''%" set "_batp=%_batf:'=''%"
set _PSarg="""%~f0""" -el %_args% set _PSarg="""%~f0""" -el %_args%
set _PSarg=%_PSarg:'=''%
set "_ttemp=%userprofile%\AppData\Local\Temp" set "_ttemp=%userprofile%\AppData\Local\Temp"
@ -156,41 +147,94 @@ setlocal EnableDelayedExpansion
echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
if /i not "!_work!"=="!_ttemp!" ( if /i not "!_work!"=="!_ttemp!" (
%nceline% %eline%
echo Script is launched from the temp folder, echo Script is launched from the temp folder,
echo Most likely you are running the script directly from the archive file. echo Most likely you are running the script directly from the archive file.
echo: echo:
echo Extract the archive file and launch the script from the extracted folder. echo Extract the archive file and launch the script from the extracted folder.
goto at_done goto dk_done
) )
) )
::======================================================================================================================================== ::========================================================================================================================================
:: Check PowerShell
REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest:
cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || (
%eline%
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode""
echo:
cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && (
echo Failed to run Powershell command but Powershell is working.
call :dk_color %Blue% "Check if your antivirus is blocking the script."
echo:
set fixes=%fixes% %mas%troubleshoot
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot"
) || (
echo PowerShell is not working. Aborting...
echo If you have applied restrictions on Powershell then undo those changes.
echo:
set fixes=%fixes% %mas%fix_powershell
call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell"
)
goto dk_done
)
::========================================================================================================================================
:: Elevate script as admin and pass arguments and preventing loop :: Elevate script as admin and pass arguments and preventing loop
%nul1% fltmc || ( %nul1% fltmc || (
if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b
%nceline% %eline%
echo This script needs admin rights. echo This script needs admin rights.
echo To do so, right click on this script and select 'Run as administrator'. echo To do so, right click on this script and select 'Run as administrator'.
goto at_done goto dk_done
) )
::======================================================================================================================================== ::========================================================================================================================================
:: This code disables QuickEdit for this cmd.exe session only without making permanent changes to the registry :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
:: It is added because clicking on the script window pauses the operation and leads to the confusion that script stopped due to an error
for %%# in (%_args%) do (if /i "%%#"=="-qedit" set quedit=1) if %winbuild% GEQ 17763 (
set terminal=1
reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% || if not defined quedit ( ) else (
reg add HKCU\Console /v QuickEdit /t REG_DWORD /d "0" /f %nul1% set terminal=
start cmd.exe /c ""!_batf!" %_args% -qedit"
rem quickedit reset code is added at the starting of the script instead of here because it takes time to reflect in some cases
exit /b
) )
:: Check if script is running in Terminal app
set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);
set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128);
set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128);
set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow();
set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero);
if defined terminal (
%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal=
)
if %_unattended%==1 goto :skipQE
for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
if defined terminal (
set "launchcmd=start conhost.exe %psc%"
) else (
set "launchcmd=%psc%"
)
:: Disable QuickEdit in current session
set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);"
set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);"
set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);"
set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);"
%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1)
:skipQE
::======================================================================================================================================== ::========================================================================================================================================
:: Check for updates :: Check for updates
@ -205,18 +249,19 @@ if not [%%#]==[] (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.6
if defined old ( if defined old (
echo ________________________________________________ echo ________________________________________________
%eline% %eline%
echo You are running outdated version MAS %masver% echo Version %masver% of MAS is outdated.
echo ________________________________________________ echo ________________________________________________
echo: echo:
if not %_unattended%==1 (
echo [1] Get Latest MAS echo [1] Get Latest MAS
echo [0] Continue Anyway echo [0] Continue Anyway
echo: echo:
call :_color %_Green% "Enter a menu option in the Keyboard [1,0] :" call :dk_color %_Green% "Enter a menu option in the Keyboard [1,0] :"
choice /C:10 /N choice /C:10 /N
if !errorlevel!==2 rem 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 ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b)
) )
cls )
::======================================================================================================================================== ::========================================================================================================================================
@ -231,7 +276,7 @@ if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environ
if not defined desktop ( if not defined desktop (
%eline% %eline%
echo Desktop location was not detected, aborting... echo Desktop location was not detected, aborting...
goto at_done goto dk_done
) )
setlocal EnableDelayedExpansion setlocal EnableDelayedExpansion
@ -243,7 +288,7 @@ setlocal EnableDelayedExpansion
cls cls
color 07 color 07
title Troubleshoot %masver% title Troubleshoot %masver%
mode con cols=77 lines=30 if not defined terminal mode 77, 30
echo: echo:
echo: echo:
@ -251,7 +296,7 @@ echo:
echo: echo:
echo: _______________________________________________________________ echo: _______________________________________________________________
echo: echo:
call :_color2 %_White% " [1] " %_Green% "Help" call :dk_color2 %_White% " [1] " %_Green% "Help"
echo: ___________________________________________________ echo: ___________________________________________________
echo: echo:
echo: [2] Dism RestoreHealth echo: [2] Dism RestoreHealth
@ -265,12 +310,12 @@ echo:
echo: [0] %_exitmsg% echo: [0] %_exitmsg%
echo: _______________________________________________________________ echo: _______________________________________________________________
echo: echo:
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
choice /C:1234560 /N choice /C:1234560 /N
set _erl=%errorlevel% set _erl=%errorlevel%
if %_erl%==7 exit /b if %_erl%==7 exit /b
if %_erl%==6 start %mas%fix-wpa-registry.html &goto at_menu if %_erl%==6 start %mas%fix-wpa-registry &goto at_menu
if %_erl%==5 goto:retokens if %_erl%==5 goto:retokens
if %_erl%==4 goto:fixwmi if %_erl%==4 goto:fixwmi
if %_erl%==3 goto:sfcscan if %_erl%==3 goto:sfcscan
@ -283,7 +328,7 @@ goto :at_menu
:dism_rest :dism_rest
cls cls
mode 98, 30 if not defined terminal mode 98, 30
title Dism /English /Online /Cleanup-Image /RestoreHealth title Dism /English /Online /Cleanup-Image /RestoreHealth
if %winbuild% LSS 9200 ( if %winbuild% LSS 9200 (
@ -302,7 +347,7 @@ echo:
if defined _int ( if defined _int (
echo Checking Internet Connection [Connected] echo Checking Internet Connection [Connected]
) else ( ) else (
call :_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]" call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]"
) )
echo %line% echo %line%
@ -313,8 +358,8 @@ echo %line%
echo: echo:
echo Notes: echo Notes:
echo: echo:
call :_color2 %_White% " - " %Gray% "Make sure the Internet is connected." call :dk_color2 %_White% " - " %Gray% "Make sure the Internet is connected."
call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working." call :dk_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working."
echo: echo:
echo %line% echo %line%
echo: echo:
@ -322,22 +367,29 @@ choice /C:09 /N /M "> [9] Continue [0] Go back : "
if %errorlevel%==1 goto at_menu if %errorlevel%==1 goto at_menu
cls cls
mode 110, 30 if not defined terminal mode 110, 30
for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a
%psc% Stop-Service TrustedInstaller -force %nul% %psc% Stop-Service TrustedInstaller -force %nul%
set _time= copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul%
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul%
del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul%
del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul%
echo: echo:
echo Applying the command, echo Applying the command,
echo dism /english /online /cleanup-image /restorehealth echo dism /english /online /cleanup-image /restorehealth
dism /english /online /cleanup-image /restorehealth dism /english /online /cleanup-image /restorehealth
%psc% Stop-Service TrustedInstaller -force %nul% timeout /t 5 %nul1%
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul%
copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul%
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
call :compresslog cbs\cbs_%_time%.log AT_Logs\RHealth_CBS %nul%
call :compresslog cbs\CBS.log RHealth_CBS %nul% call :compresslog DISM\dism_%_time%.log AT_Logs\RHealth_DISM %nul%
call :compresslog DISM\dism.log RHealth_DISM %nul%
if not exist "!desktop!\AT_Logs\RHealth_CBS_%_time%.cab" ( if not exist "!desktop!\AT_Logs\RHealth_CBS_%_time%.cab" (
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\RHealth_CBS_%_time%.log" %nul% copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\RHealth_CBS_%_time%.log" %nul%
@ -348,7 +400,7 @@ copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_t
) )
echo: echo:
call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop." call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the desktop."
goto :at_back goto :at_back
::======================================================================================================================================== ::========================================================================================================================================
@ -356,7 +408,7 @@ goto :at_back
:sfcscan :sfcscan
cls cls
mode 98, 30 if not defined terminal mode 98, 30
title sfc /scannow title sfc /scannow
echo: echo:
@ -375,27 +427,30 @@ choice /C:09 /N /M "> [9] Continue [0] Go back : "
if %errorlevel%==1 goto at_menu if %errorlevel%==1 goto at_menu
cls cls
for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a
%psc% Stop-Service TrustedInstaller -force %nul% %psc% Stop-Service TrustedInstaller -force %nul%
set _time= copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul%
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul%
echo: echo:
echo Applying the command, echo Applying the command,
echo sfc /scannow echo sfc /scannow
sfc /scannow sfc /scannow
%psc% Stop-Service TrustedInstaller -force %nul% timeout /t 5 %nul1%
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul%
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
call :compresslog cbs\cbs_%_time%.log AT_Logs\SFC_CBS %nul%
call :compresslog cbs\CBS.log SFC_CBS %nul%
if not exist "!desktop!\AT_Logs\SFC_CBS_%_time%.cab" ( if not exist "!desktop!\AT_Logs\SFC_CBS_%_time%.cab" (
copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.log" %nul% copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.log" %nul%
) )
echo: echo:
call :_color %Gray% "CBS log is copied to the AT_Logs folder on the dekstop." call :dk_color %Gray% "CBS log is copied to the AT_Logs folder on the desktop."
goto :at_back goto :at_back
::======================================================================================================================================== ::========================================================================================================================================
@ -403,8 +458,10 @@ goto :at_back
:retokens :retokens
cls cls
mode con cols=125 lines=32 if not defined terminal (
mode 125, 32
%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
)
title Fix Licensing ^(ClipSVC ^+ Office vNext ^+ SPP ^+ OSPP^) title Fix Licensing ^(ClipSVC ^+ Office vNext ^+ SPP ^+ OSPP^)
echo: echo:
@ -422,7 +479,7 @@ echo - Clear ClipSVC, Office vNext, SPP and OSPP licenses
echo - Fix SPP permissions of tokens folder and registries echo - Fix SPP permissions of tokens folder and registries
echo - Trigger the repair option for Office. echo - Trigger the repair option for Office.
echo: echo:
call :_color2 %_White% " - " %Red% "Apply it only when it is necessary." call :dk_color2 %_White% " - " %Red% "Apply it only when it is necessary."
echo: echo:
echo %line% echo %line%
echo: echo:
@ -439,19 +496,19 @@ cls
echo: echo:
echo %line% echo %line%
echo: echo:
call :_color %Blue% "Rebuilding ClipSVC Licences" call :dk_color %Blue% "Rebuilding ClipSVC Licences"
echo: echo:
if %winbuild% LSS 10240 ( if %winbuild% LSS 10240 (
echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent. echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent.
echo Skipping... echo Skipping...
goto :cleanvnext goto :rebuildspptok
) )
%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && ( %psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && (
echo Windows is permanently activated. echo Windows is permanently activated.
echo Skipping rebuilding ClipSVC licences... echo Skipping...
goto :cleanvnext goto :rebuildspptok
) )
echo Stopping ClipSVC service... echo Stopping ClipSVC service...
@ -468,7 +525,7 @@ if %winbuild% LEQ 10240 (
echo [Successful] echo [Successful]
) else ( ) else (
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) else ( ) else (
echo [Successful] echo [Successful]
) )
@ -487,7 +544,7 @@ echo:
echo Deleting a Volatile ^& Protected Registry Key... echo Deleting a Volatile ^& Protected Registry Key...
echo [%RegKey%] echo [%RegKey%]
reg query "%RegKey%" %nul% && ( reg query "%RegKey%" %nul% && (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
echo Restart the system, that will delete this registry key automatically. echo Restart the system, that will delete this registry key automatically.
) || ( ) || (
echo [Successful] echo [Successful]
@ -500,7 +557,7 @@ echo Deleting a IdentityCRL Registry Key...
echo [%_ident%] echo [%_ident%]
reg delete "%_ident%" /f %nul% reg delete "%_ident%" /f %nul%
reg query "%_ident%" %nul% && ( reg query "%_ident%" %nul% && (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) || ( ) || (
echo [Successful] echo [Successful]
) )
@ -515,7 +572,7 @@ echo Deleting Folder %ProgramData%\Microsoft\Windows\ClipSVC\
rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul% rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul%
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) else ( ) else (
echo [Successful] echo [Successful]
) )
@ -526,7 +583,7 @@ echo Rebuilding Folder %ProgramData%\Microsoft\Windows\ClipSVC\
timeout /t 3 %nul% timeout /t 3 %nul%
if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul% if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul%
if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" ( if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) else ( ) else (
echo [Successful] echo [Successful]
) )
@ -534,100 +591,28 @@ echo [Successful]
echo: echo:
echo Restarting [wlidsvc LicenseManager] services... echo Restarting [wlidsvc LicenseManager] services...
for %%# in (wlidsvc LicenseManager) do (%psc% Restart-Service %%# %nul%) for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null")
::========================================================================================================================================
:: Find remnants of Office vNext license block and remove it because it stops non vNext licenses from appearing
:: https://learn.microsoft.com/en-us/office/troubleshoot/activation/reset-office-365-proplus-activation-state
:cleanvnext
echo:
echo %line%
echo:
call :_color %Blue% "Clearing Office vNext License"
echo:
setlocal DisableDelayedExpansion
set "_Local=%LocalAppData%"
setlocal EnableDelayedExpansion
attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul%
attrib -R "!_Local!\Microsoft\Office\Licenses" %nul%
if exist "!ProgramData!\Microsoft\Office\Licenses\" (
rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul%
if exist "!ProgramData!\Microsoft\Office\Licenses\" (
echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\
) else (
echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\
)
) else (
echo Not Found - !ProgramData!\Microsoft\Office\Licenses\
)
if exist "!_Local!\Microsoft\Office\Licenses\" (
rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul%
if exist "!_Local!\Microsoft\Office\Licenses\" (
echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\
) else (
echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\
)
) else (
echo Not Found - !_Local!\Microsoft\Office\Licenses\
)
echo:
for /f "tokens=* delims=" %%a in ('%psc% "Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { Split-Path -Path $_.PSPath -Leaf }" %nul6%') do (if defined _sid (set "_sid=!_sid! HKU\%%a") else (set "_sid=HKU\%%a"))
set regfound=
for %%# in (HKCU !_sid!) do (
for %%A in (
%%#\Software\Microsoft\Office\16.0\Common\Licensing
%%#\Software\Microsoft\Office\16.0\Common\Identity
%%#\Software\Microsoft\Office\16.0\Registration
) do (
reg query %%A %nul% && (
set regfound=1
reg delete %%A /f %nul% && (
echo Deleted Registry - %%A
) || (
echo Failed to Delete - %%A
)
)
)
)
if not defined regfound echo Not Found - Office vNext Registry Keys
::======================================================================================================================================== ::========================================================================================================================================
:: Rebuild SPP Tokens :: Rebuild SPP Tokens
:rebuildspptok
echo: echo:
echo %line% echo %line%
echo: echo:
call :_color %Blue% "Rebuilding SPP Licensing Tokens" call :dk_color %Blue% "Rebuilding SPP Licensing Tokens"
echo: echo:
call :scandat check call :scandat check
if not defined token ( if not defined token (
call :_color %Red% "tokens.dat file not found." call :dk_color %Red% "tokens.dat file not found."
) else ( ) else (
echo tokens.dat file: [%token%] echo tokens.dat file: [%token%]
) )
echo:
set wpainfo=
for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1]);" %nul6%') do (set wpainfo=%%a)
echo "%wpainfo%" | find /i "Error Found" %nul% && (
call :_color %Red% "WPA Registry Error: %wpainfo%"
) || (
echo WPA Registry Count: %wpainfo%
)
set tokenstore= set tokenstore=
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b"
@ -662,7 +647,7 @@ set "d=!d! Set-Acl -Path '%%A' -AclObject $acl"
call :checkperms call :checkperms
if defined permerror ( if defined permerror (
call :_color %Red% "[Failed To Fix]" call :dk_color %Red% "[Failed To Fix]"
) else ( ) else (
echo [Successfully Fixed] echo [Successfully Fixed]
) )
@ -681,7 +666,7 @@ call :scandat check
if defined token ( if defined token (
echo: echo:
call :_color %Red% "Failed to delete .dat files." call :dk_color %Red% "Failed to delete .dat files."
echo: echo:
) )
@ -692,14 +677,14 @@ if %errorlevel% NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
if %errorlevel% EQU 0 ( if %errorlevel% EQU 0 (
echo [Successful] echo [Successful]
) else ( ) else (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) )
call :scandat check call :scandat check
echo: echo:
if not defined token ( if not defined token (
call :_color %Red% "Failed to rebuilt tokens.dat file." call :dk_color %Red% "Failed to rebuilt tokens.dat file."
) else ( ) else (
echo tokens.dat file was rebuilt successfully. echo tokens.dat file was rebuilt successfully.
) )
@ -711,7 +696,7 @@ echo tokens.dat file was rebuilt successfully.
echo: echo:
echo %line% echo %line%
echo: echo:
call :_color %Blue% "Rebuilding OSPP Licensing Tokens" call :dk_color %Blue% "Rebuilding OSPP Licensing Tokens"
echo: echo:
sc qc osppsvc %nul% || ( sc qc osppsvc %nul% || (
@ -723,7 +708,7 @@ goto :repairoffice
call :scandatospp check call :scandatospp check
if not defined token ( if not defined token (
call :_color %Red% "tokens.dat file not found." call :dk_color %Red% "tokens.dat file not found."
) else ( ) else (
echo tokens.dat file: [%token%] echo tokens.dat file: [%token%]
) )
@ -738,7 +723,7 @@ call :scandatospp check
if defined token ( if defined token (
echo: echo:
call :_color %Red% "Failed to delete .dat files." call :dk_color %Red% "Failed to delete .dat files."
echo: echo:
) )
@ -756,7 +741,7 @@ call :scandatospp check
echo: echo:
if not defined token ( if not defined token (
call :_color %Red% "Failed to rebuilt tokens.dat file." call :dk_color %Red% "Failed to rebuilt tokens.dat file."
) else ( ) else (
echo tokens.dat file was rebuilt successfully. echo tokens.dat file was rebuilt successfully.
) )
@ -768,7 +753,7 @@ echo tokens.dat file was rebuilt successfully.
echo: echo:
echo %line% echo %line%
echo: echo:
call :_color %Blue% "Repairing Office Licenses" call :dk_color %Blue% "Repairing Office Licenses"
echo: echo:
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
@ -857,8 +842,8 @@ goto :repairend
echo: echo:
) else ( ) else (
echo: echo:
call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." call :dk_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..."
call :_color %_Yellow% "Press any key to continue..." call :dk_color %_Yellow% "Press any key to continue..."
echo: echo:
pause %nul1% pause %nul1%
) )
@ -902,7 +887,7 @@ echo:
echo %line% echo %line%
echo: echo:
echo: echo:
call :_color %Green% "Finished" call :dk_color %Green% "Finished"
goto :at_back goto :at_back
::======================================================================================================================================== ::========================================================================================================================================
@ -910,7 +895,7 @@ goto :at_back
:fixwmi :fixwmi
cls cls
mode 98, 34 if not defined terminal mode 98, 34
title Fix WMI title Fix WMI
:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484 :: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484
@ -945,7 +930,7 @@ echo No need to apply this option. Aborting...
goto :at_back goto :at_back
) )
call :_color %Red% "[Not Responding]" call :dk_color %Red% "[Not Responding]"
set _corrupt= set _corrupt=
sc start Winmgmt %nul% sc start Winmgmt %nul%
@ -965,7 +950,7 @@ sc config Winmgmt start= disabled %nul%
if %errorlevel% EQU 0 ( if %errorlevel% EQU 0 (
echo [Successful] echo [Successful]
) else ( ) else (
call :_color %Red% "[Failed] Aborting..." call :dk_color %Red% "[Failed] Aborting..."
sc config Winmgmt start= auto %nul% sc config Winmgmt start= auto %nul%
goto :at_back goto :at_back
) )
@ -978,9 +963,9 @@ echo Stopping Winmgmt service
sc query Winmgmt | find /i "STOPPED" %nul% && ( sc query Winmgmt | find /i "STOPPED" %nul% && (
echo [Successful] echo [Successful]
) || ( ) || (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
echo: echo:
call :_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again." call :dk_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again."
echo %line% echo %line%
echo: echo:
choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :" choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :"
@ -995,7 +980,7 @@ echo:
echo Deleting WMI repository echo Deleting WMI repository
rmdir /s /q "%windir%\System32\wbem\repository\" %nul% rmdir /s /q "%windir%\System32\wbem\repository\" %nul%
if exist "%windir%\System32\wbem\repository\" ( if exist "%windir%\System32\wbem\repository\" (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) else ( ) else (
echo [Successful] echo [Successful]
) )
@ -1006,14 +991,14 @@ sc config Winmgmt start= auto %nul%
if %errorlevel% EQU 0 ( if %errorlevel% EQU 0 (
echo [Successful] echo [Successful]
) else ( ) else (
call :_color %Red% "[Failed]" call :dk_color %Red% "[Failed]"
) )
call :checkwmi call :checkwmi
if not defined error ( if not defined error (
echo: echo:
echo Checking WMI echo Checking WMI
call :_color %Green% "[Working]" call :dk_color %Green% "[Working]"
goto :at_back goto :at_back
) )
@ -1025,11 +1010,11 @@ echo:
echo Checking WMI echo Checking WMI
call :checkwmi call :checkwmi
if defined error ( if defined error (
call :_color %Red% "[Not Responding]" call :dk_color %Red% "[Not Responding]"
echo: echo:
echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors. echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors.
) else ( ) else (
call :_color %Green% "[Working]" call :dk_color %Green% "[Working]"
) )
goto :at_back goto :at_back
@ -1077,21 +1062,12 @@ exit /b
echo: echo:
echo %line% echo %line%
echo: echo:
call :_color %_Yellow% "Press any key to go back..." call :dk_color %_Yellow% "Press any key to go back..."
pause %nul1% pause %nul1%
goto :at_menu goto :at_menu
::======================================================================================================================================== ::========================================================================================================================================
:at_done
echo:
echo Press any key to %_exitmsg%...
pause %nul1%
exit /b
::========================================================================================================================================
:compresslog :compresslog
:: https://stackoverflow.com/a/46268232 :: https://stackoverflow.com/a/46268232
@ -1118,50 +1094,12 @@ echo/.set UniqueFiles=ON>>%ddf%
for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do ( for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do (
echo/"%%~fD" /inf=no;>>%ddf% echo/"%%~fD" /inf=no;>>%ddf%
) )
makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\AT_Logs\%2_%_time%.cab" makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\%2_%_time%.cab"
del /q /f %ddf% del /q /f %ddf%
exit /b exit /b
::======================================================================================================================================== ::========================================================================================================================================
:: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems
:wpatest:
$wpaKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey("SYSTEM\\WPA")
$count = $wpaKey.SubKeyCount
$osVersion = [System.Environment]::OSVersion.Version
$minBuildNumber = 14393
if ($osVersion.Build -ge $minBuildNumber) {
$subkeyHashTable = @{}
foreach ($subkeyName in $wpaKey.GetSubKeyNames()) {
$keyNumber = $subkeyName -replace '.*-', ''
$subkeyHashTable[$keyNumber] = $true
}
for ($i=1; $i -le $count; $i++) {
if (-not $subkeyHashTable.ContainsKey("$i")) {
Write-Host "Total Keys $count. Error Found- $i key does not exist"
$wpaKey.Close()
exit
}
}
}
$wpaKey.GetSubKeyNames() | ForEach-Object {
$subkey = $wpaKey.OpenSubKey($_)
$p = $subkey.GetValueNames()
if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) {
Write-Host "Total Keys $count. Error Found- Binary Data is corrupt"
$wpaKey.Close()
exit
}
}
$count
$wpaKey.Close()
:wpatest:
::========================================================================================================================================
:checkperms :checkperms
set permerror= set permerror=
@ -1262,106 +1200,88 @@ $key.SetAccessControl($acl)
::======================================================================================================================================== ::========================================================================================================================================
:_color :dk_done
echo:
if defined fixes (
call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore"
choice /C:10 /N
if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#))
)
if defined terminal (
call :dk_color %_Yellow% "Press 0 key to %_exitmsg%..."
choice /c 0 /n
) else (
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
pause %nul1%
)
exit /b
::========================================================================================================================================
:dk_color
if %_NCS% EQU 1 ( if %_NCS% EQU 1 (
echo %esc%[%~1%~2%esc%[0m echo %esc%[%~1%~2%esc%[0m
) else ( ) else (
call :batcol %~1 "%~2" if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3')
) )
exit /b exit /b
:_color2 :dk_color2
if %_NCS% EQU 1 ( if %_NCS% EQU 1 (
echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
) else ( ) else (
call :batcol %~1 "%~2" %~3 "%~4" if not exist %psc% (echo %~3%~6) else (%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6')
) )
exit /b exit /b
::======================================= ::========================================================================================================================================
:: Colored text with pure batch method :: Set variables
:: Thanks to @dbenham and @jeb
:: stackoverflow.com/a/10407642
:batcol :dk_setvar
pushd %_coltemp% set psc=powershell.exe
if not exist "'" (<nul >"'" set /p "=.") set winbuild=1
setlocal for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
set "s=%~2"
set "t=%~4"
call :_batcol %1 s %3 t
del /f /q "'"
del /f /q "`.txt"
popd
exit /b
:_batcol set _NCS=1
if %winbuild% LSS 10586 set _NCS=0
setlocal EnableDelayedExpansion if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
set "s=!%~2!"
set "t=!%~4!"
for /f delims^=^ eol^= %%i in ("!s!") do (
if "!" equ "" setlocal DisableDelayedExpansion
>`.txt (echo %%i\..\')
findstr /a:%~1 /f:`.txt "."
<nul set /p "=%_BS%%_BS%%_BS%%_BS%%_BS%%_BS%%_BS%"
)
if "%~4"=="" echo(&exit /b
setlocal EnableDelayedExpansion
for /f delims^=^ eol^= %%i in ("!t!") do (
if "!" equ "" setlocal DisableDelayedExpansion
>`.txt (echo %%i\..\')
findstr /a:%~3 /f:`.txt "."
<nul set /p "=%_BS%%_BS%%_BS%%_BS%%_BS%%_BS%%_BS%"
)
echo(
exit /b
::=======================================
:_colorprep
if %_NCS% EQU 1 ( if %_NCS% EQU 1 (
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
set "Red="41;97m"" set "Red="41;97m""
set "Gray="100;97m"" set "Gray="100;97m""
set "Black="30m""
set "Green="42;97m"" set "Green="42;97m""
set "Blue="44;97m"" set "Blue="44;97m""
set "Yellow="43;97m""
set "Magenta="45;97m""
set "_Red="40;91m"" set "_Red="40;91m""
set "_Green="40;92m""
set "_Blue="40;94m""
set "_White="40;37m"" set "_White="40;37m""
set "_Green="40;92m""
set "_Yellow="40;93m"" set "_Yellow="40;93m""
) else (
exit /b set "Red="Red" "white""
set "Gray="Darkgray" "white""
set "Green="DarkGreen" "white""
set "Blue="Blue" "white""
set "_Red="Black" "Red""
set "_White="Black" "Gray""
set "_Green="Black" "Green""
set "_Yellow="Black" "Yellow""
) )
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "_BS=%%A %%A" set "nceline=echo: &echo ==== ERROR ==== &echo:"
set "_coltemp=%SystemRoot%\Temp" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
if %~z0 GEQ 200000 (
set "Red="CF"" set "_exitmsg=Go back"
set "Gray="8F"" set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
set "Black="00"" ) else (
set "Green="2F"" set "_exitmsg=Exit"
set "Blue="1F"" set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
set "Yellow="6F"" )
set "Magenta="5F""
set "_Red="0C""
set "_Green="0A""
set "_Blue="09""
set "_White="07""
set "_Yellow="0E""
exit /b exit /b
::======================================================================================================================================== ::========================================================================================================================================