1.6
This commit is contained in:
parent
76f9092e80
commit
f22b577af8
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-mas-root-folder.html">
|
|
||||||
</html>
|
|
|
@ -0,0 +1,886 @@
|
||||||
|
@setlocal DisableDelayedExpansion
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
::============================================================================
|
||||||
|
::
|
||||||
|
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
||||||
|
::
|
||||||
|
:: Homepage: massgrave.dev
|
||||||
|
:: Email: windowsaddict@protonmail.com
|
||||||
|
::
|
||||||
|
::============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
set "_cmdf=%~f0"
|
||||||
|
for %%# in (%*) do (
|
||||||
|
if /i "%%#"=="r1" set r1=1
|
||||||
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
||||||
|
|
||||||
|
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 (
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
cls
|
||||||
|
color 07
|
||||||
|
title Activation Troubleshoot
|
||||||
|
|
||||||
|
set _elev=
|
||||||
|
if /i "%~1"=="-el" set _elev=1
|
||||||
|
|
||||||
|
set winbuild=1
|
||||||
|
set "nul=>nul 2>&1"
|
||||||
|
set psc=powershell.exe
|
||||||
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
|
set _NCS=1
|
||||||
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
||||||
|
|
||||||
|
call :_colorprep
|
||||||
|
|
||||||
|
set cbs_log=%SystemRoot%\logs\cbs\cbs.log
|
||||||
|
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
||||||
|
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:"
|
||||||
|
set "line=_________________________________________________________________________________________________"
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
if %winbuild% LSS 7600 (
|
||||||
|
%nceline%
|
||||||
|
echo Unsupported OS version detected.
|
||||||
|
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||||
|
goto at_done
|
||||||
|
)
|
||||||
|
|
||||||
|
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
|
||||||
|
%nceline%
|
||||||
|
echo Unable to find powershell.exe in the system.
|
||||||
|
goto at_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Fix for the special characters limitation in path name
|
||||||
|
|
||||||
|
set "_work=%~dp0"
|
||||||
|
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||||
|
|
||||||
|
set "_batf=%~f0"
|
||||||
|
set "_batp=%_batf:'=''%"
|
||||||
|
|
||||||
|
set _PSarg="""%~f0""" -el %_args%
|
||||||
|
|
||||||
|
set "_ttemp=%temp%"
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
||||||
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
|
%nceline%
|
||||||
|
echo Script is launched from the temp folder,
|
||||||
|
echo Most likely you are running the script directly from the archive file.
|
||||||
|
echo:
|
||||||
|
echo Extract the archive file and launch the script from the extracted folder.
|
||||||
|
goto at_done
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
|
%nul% reg query HKU\S-1-5-19 || (
|
||||||
|
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
|
%nceline%
|
||||||
|
echo This script require administrator privileges.
|
||||||
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
goto at_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
setlocal DisableDelayedExpansion
|
||||||
|
|
||||||
|
:: Check desktop location
|
||||||
|
|
||||||
|
set desktop=
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
||||||
|
if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
||||||
|
|
||||||
|
if not defined desktop (
|
||||||
|
%eline%
|
||||||
|
echo Desktop location was not detected, aborting...
|
||||||
|
goto at_done
|
||||||
|
)
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:at_menu
|
||||||
|
|
||||||
|
cls
|
||||||
|
color 07
|
||||||
|
title Activation Troubleshoot
|
||||||
|
mode con cols=77 lines=30
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
echo: _______________________________________________________________
|
||||||
|
echo:
|
||||||
|
echo: [1] ReadMe
|
||||||
|
echo: ___________________________________________________
|
||||||
|
echo:
|
||||||
|
echo: [2] Dism RestoreHealth
|
||||||
|
echo: [3] SFC Scannow
|
||||||
|
echo:
|
||||||
|
echo: [4] Rebuild Licensing Tokens
|
||||||
|
echo: [5] Clear Office vNext License
|
||||||
|
echo: ___________________________________________________
|
||||||
|
echo:
|
||||||
|
echo: [6] Solution: Office is not genuine banner
|
||||||
|
echo: [0] Exit
|
||||||
|
echo: _______________________________________________________________
|
||||||
|
echo:
|
||||||
|
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
|
||||||
|
choice /C:1234560 /N
|
||||||
|
set _erl=%errorlevel%
|
||||||
|
|
||||||
|
if %_erl%==7 exit /b
|
||||||
|
if %_erl%==6 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu
|
||||||
|
if %_erl%==5 goto:clearvnext
|
||||||
|
if %_erl%==4 goto:retokens
|
||||||
|
if %_erl%==3 goto:sfcscan
|
||||||
|
if %_erl%==2 goto:dism_rest
|
||||||
|
if %_erl%==1 start https://massgrave.dev/troubleshoot.html &goto at_menu
|
||||||
|
goto :at_menu
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:dism_rest
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 98, 30
|
||||||
|
title Dism /Online /Cleanup-Image /RestoreHealth
|
||||||
|
|
||||||
|
if %winbuild% LSS 9200 (
|
||||||
|
%eline%
|
||||||
|
echo Unsupported OS version Detected.
|
||||||
|
echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent.
|
||||||
|
goto :at_back
|
||||||
|
)
|
||||||
|
|
||||||
|
set _int=
|
||||||
|
for %%a in (dns.msftncsi.com) do (
|
||||||
|
if not defined _int (for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do if not [%%#]==[] set _int=1))
|
||||||
|
|
||||||
|
echo:
|
||||||
|
if defined _int (
|
||||||
|
echo Checking Internet Connection [Connected]
|
||||||
|
) else (
|
||||||
|
call :_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo Dism uses Windows Update to provide the files required to fix corruption.
|
||||||
|
echo This will take 5-15 minutes or more..
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo Notes:
|
||||||
|
echo:
|
||||||
|
call :_color2 %_White% " - " %Gray% "Make sure the Internet is connected."
|
||||||
|
call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working."
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||||
|
if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 110, 30
|
||||||
|
echo:
|
||||||
|
|
||||||
|
call :_stopservice TrustedInstaller
|
||||||
|
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
||||||
|
|
||||||
|
set _time=
|
||||||
|
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
||||||
|
echo:
|
||||||
|
echo Applying the command,
|
||||||
|
echo dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
|
||||||
|
echo:
|
||||||
|
dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
|
||||||
|
|
||||||
|
if not exist "!desktop!\" (
|
||||||
|
echo:
|
||||||
|
call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop."
|
||||||
|
goto :at_back
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
|
||||||
|
copy /y /b "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" "!desktop!\AT_Logs\RHealth_DISM_%_time%.txt" %nul%
|
||||||
|
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\RHealth_CBS_%_time%.txt" %nul%
|
||||||
|
del /f /q "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" %nul%
|
||||||
|
|
||||||
|
echo:
|
||||||
|
call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop."
|
||||||
|
goto :at_back
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:sfcscan
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 98, 30
|
||||||
|
title sfc /scannow
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo System File Checker will repair missing or corrupted system files.
|
||||||
|
echo This will take 10-15 minutes or more..
|
||||||
|
echo:
|
||||||
|
echo If SFC could not fix something, then run the command again to see if it may be able
|
||||||
|
echo to the next time. Sometimes it may take running the sfc /scannow command 3 times
|
||||||
|
echo restarting the PC after each time to completely fix everything that it's able to.
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||||
|
if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
|
cls
|
||||||
|
echo:
|
||||||
|
|
||||||
|
call :_stopservice TrustedInstaller
|
||||||
|
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
||||||
|
|
||||||
|
set _time=
|
||||||
|
for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
||||||
|
echo:
|
||||||
|
echo Applying the command,
|
||||||
|
echo sfc /scannow
|
||||||
|
echo:
|
||||||
|
sfc /scannow
|
||||||
|
|
||||||
|
if not exist "!desktop!\" (
|
||||||
|
echo:
|
||||||
|
call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop."
|
||||||
|
goto :at_back
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
|
||||||
|
|
||||||
|
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\SFC_CBS_%_time%.txt" %nul%
|
||||||
|
findstr /i /c:"[SR]" %cbs_log% | findstr /i /v /c:verify >"!desktop!\AT_Logs\SFC_Main_%_time%.txt"
|
||||||
|
|
||||||
|
echo:
|
||||||
|
call :_color %Gray% "CBS and main extracted logs are copied to the AT_Logs folder on the dekstop."
|
||||||
|
goto :at_back
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:clearvnext
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 98, 30
|
||||||
|
title Clear Office vNext License
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo This options will clear Office vNext ^(subscription^) license
|
||||||
|
echo:
|
||||||
|
echo You need to use this option when,
|
||||||
|
echo - KMS option is not activating office due to existing subscription license
|
||||||
|
echo - KMS option activated Office but Office activation page is not showing activated
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||||
|
if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode con cols=115 lines=32
|
||||||
|
%nul% %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;}"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
call :_color %Magenta% "Clearing Office vNext License"
|
||||||
|
echo:
|
||||||
|
|
||||||
|
setlocal DisableDelayedExpansion
|
||||||
|
set "_locl=%LocalAppData%\Microsoft\Office\Licenses"
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
call :cleanfolder
|
||||||
|
set "_locl=%ProgramData%\Microsoft\Office\Licenses"
|
||||||
|
call :cleanfolder
|
||||||
|
|
||||||
|
echo:
|
||||||
|
for %%# in (
|
||||||
|
HKCU\Software\Microsoft\Office\16.0\Common\Licensing
|
||||||
|
HKCU\Software\Microsoft\Office\16.0\Common\Identity
|
||||||
|
) do (
|
||||||
|
reg query %%# %nul% && (
|
||||||
|
reg delete %%# /f %nul% && (
|
||||||
|
echo Deleted Registry - %%#
|
||||||
|
) || (
|
||||||
|
echo Failed to Delete - %%#
|
||||||
|
)
|
||||||
|
) || (
|
||||||
|
echo Already Clean - %%#
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
goto :at_back
|
||||||
|
|
||||||
|
:cleanfolder
|
||||||
|
|
||||||
|
2>nul dir /b /a "!_locl!\*" | %nul% findstr "^" && (
|
||||||
|
pushd "!_locl!\" && (
|
||||||
|
del /S /F /Q "!_locl!\*"
|
||||||
|
for /F "delims=" %%i in ('dir /b') do (
|
||||||
|
RD /S /Q "%%i" %nul%
|
||||||
|
if not exist "!_locl!\%%i\" (
|
||||||
|
echo Deleted Folder - !_locl!\%%i
|
||||||
|
) else (
|
||||||
|
echo Failed To Delete - !_locl!\%%i
|
||||||
|
)
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
)
|
||||||
|
) || (
|
||||||
|
echo Already Clean - !_locl!\
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:retokens
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode con cols=115 lines=32
|
||||||
|
%nul% %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 Rebuild Licensing Tokens ^(SPP ^+ OSPP)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo Notes:
|
||||||
|
echo:
|
||||||
|
echo - It helps in troubleshooting activation issues.
|
||||||
|
echo:
|
||||||
|
call :_color2 %_White% " - " %Magenta% "This option will,"
|
||||||
|
call :_color2 %_White% " " %Magenta% "- Deactivate Windows and Office, you will need to reactivate"
|
||||||
|
call :_color2 %_White% " " %Magenta% "- Uninstall Office licenses and keys"
|
||||||
|
call :_color2 %_White% " " %Magenta% "- Clear SPP-OSPP data.dat, tokens.dat, cache.dat"
|
||||||
|
call :_color2 %_White% " " %Magenta% "- Trigger the repair option for Office"
|
||||||
|
echo:
|
||||||
|
call :_color2 %_White% " - " %Red% "Apply it only when it is necessary."
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||||
|
if %errorlevel%==1 goto at_menu
|
||||||
|
|
||||||
|
|
||||||
|
cls
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
call :_color %Magenta% "Rebuilding SPP Licensing Tokens"
|
||||||
|
echo:
|
||||||
|
|
||||||
|
call :scandat check
|
||||||
|
|
||||||
|
if not defined token (
|
||||||
|
call :_color %Red% "tokens.dat file not found."
|
||||||
|
) else (
|
||||||
|
echo tokens.dat file: [%token%]
|
||||||
|
)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Stopping sppsvc service...
|
||||||
|
call :_stopservice sppsvc
|
||||||
|
|
||||||
|
echo:
|
||||||
|
call :scandat delete
|
||||||
|
call :scandat check
|
||||||
|
|
||||||
|
if defined token (
|
||||||
|
echo:
|
||||||
|
call :_color %Red% "Failed to delete .dat files."
|
||||||
|
echo:
|
||||||
|
)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Reinstalling System Licenses [slmgr /rilc]...
|
||||||
|
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
if %errorlevel% NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
if %errorlevel% EQU 0 (
|
||||||
|
echo [Successful]
|
||||||
|
) else (
|
||||||
|
call :_color %Red% "[Failed]"
|
||||||
|
)
|
||||||
|
|
||||||
|
call :scandat check
|
||||||
|
|
||||||
|
echo:
|
||||||
|
if not defined token (
|
||||||
|
call :_color %Red% "Failed to rebuilt tokens.dat file."
|
||||||
|
) else (
|
||||||
|
call :_color %Green% "tokens.dat file was rebuilt successfully."
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Rebuild OSPP Tokens
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
|
||||||
|
sc qc osppsvc %nul% || (
|
||||||
|
echo:
|
||||||
|
call :_color %Magenta% "OSPP based Office is not installed"
|
||||||
|
call :_color %Magenta% "Skipping rebuilding OSPP tokens"
|
||||||
|
goto :cleanclipsvc
|
||||||
|
)
|
||||||
|
|
||||||
|
call :_color %Magenta% "Rebuilding OSPP Licensing Tokens"
|
||||||
|
echo:
|
||||||
|
|
||||||
|
call :scandatospp check
|
||||||
|
|
||||||
|
if not defined token (
|
||||||
|
call :_color %Red% "tokens.dat file not found."
|
||||||
|
) else (
|
||||||
|
echo tokens.dat file: [%token%]
|
||||||
|
)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Stopping osppsvc service...
|
||||||
|
call :_stopservice osppsvc
|
||||||
|
|
||||||
|
echo:
|
||||||
|
call :scandatospp delete
|
||||||
|
call :scandatospp check
|
||||||
|
|
||||||
|
if defined token (
|
||||||
|
echo:
|
||||||
|
call :_color %Red% "Failed to delete .dat files."
|
||||||
|
echo:
|
||||||
|
)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Starting osppsvc service to generate tokens.dat
|
||||||
|
call :_startservice osppsvc
|
||||||
|
call :scandatospp check
|
||||||
|
if not defined token (
|
||||||
|
call :_stopservice osppsvc
|
||||||
|
call :_startservice osppsvc
|
||||||
|
timeout /t 3 %nul%
|
||||||
|
)
|
||||||
|
|
||||||
|
call :scandatospp check
|
||||||
|
|
||||||
|
echo:
|
||||||
|
if not defined token (
|
||||||
|
call :_color %Red% "Failed to rebuilt tokens.dat file."
|
||||||
|
) else (
|
||||||
|
call :_color %Green% "tokens.dat file was rebuilt successfully."
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:cleanclipsvc
|
||||||
|
|
||||||
|
:: This section is removed
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:repairoffice
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
call :_color %Magenta% "Repairing Office Licenses"
|
||||||
|
echo:
|
||||||
|
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b
|
||||||
|
|
||||||
|
if /i "%arch%"=="ARM64" (
|
||||||
|
echo:
|
||||||
|
echo ARM64 Windows Found.
|
||||||
|
echo You need to use repair option in Windows settings for Office.
|
||||||
|
echo:
|
||||||
|
start ms-settings:appsfeatures
|
||||||
|
goto :repairend
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%arch%"=="x86" (
|
||||||
|
set arch=X86
|
||||||
|
) else (
|
||||||
|
set arch=X64
|
||||||
|
)
|
||||||
|
|
||||||
|
for %%# in (68 86) do (
|
||||||
|
for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=)
|
||||||
|
)
|
||||||
|
|
||||||
|
set _68=HKLM\SOFTWARE\Microsoft\Office
|
||||||
|
set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
|
||||||
|
|
||||||
|
%nul% reg query %_68%\14.0\Common\InstallRoot /v Path && (set "msi14_68=Office 14.0 MSI x86/x64" & set "msi14repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE14\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_86%\14.0\Common\InstallRoot /v Path && (set "msi14_86=Office 14.0 MSI x86" & set "msi14repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_68%\15.0\Common\InstallRoot /v Path && (set "msi15_68=Office 15.0 MSI x86/x64" & set "msi15repair68=%systemdrive%\Program Files\Common Files\microsoft shared\OFFICE15\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_86%\15.0\Common\InstallRoot /v Path && (set "msi15_86=Office 15.0 MSI x86" & set "msi15repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_68%\16.0\Common\InstallRoot /v Path && (set "msi16_68=Office 16.0 MSI x86/x64" & set "msi16repair68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_86%\16.0\Common\InstallRoot /v Path && (set "msi16_86=Office 16.0 MSI x86" & set "msi16repair86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\Office Setup Controller\Setup.exe")
|
||||||
|
%nul% reg query %_68%\14.0\CVH /f Click2run /k && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=")
|
||||||
|
%nul% reg query %_86%\14.0\CVH /f Click2run /k && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=")
|
||||||
|
%nul% reg query %_68%\15.0\ClickToRun /v InstallPath && (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe")
|
||||||
|
%nul% reg query %_86%\15.0\ClickToRun /v InstallPath && (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe")
|
||||||
|
%nul% reg query %_68%\ClickToRun /v InstallPath && (set "c2r16_68=Office 16.0 C2R x86/x64" & set "c2r16repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe")
|
||||||
|
%nul% reg query %_86%\ClickToRun /v InstallPath && (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe")
|
||||||
|
|
||||||
|
set uwp16=
|
||||||
|
if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %nul% && (
|
||||||
|
dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
||||||
|
dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
||||||
|
dir /b "%ProgramFiles(x86)%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP
|
||||||
|
)
|
||||||
|
|
||||||
|
set /a counter=0
|
||||||
|
echo Checking installed Office versions...
|
||||||
|
echo:
|
||||||
|
|
||||||
|
for %%# in (
|
||||||
|
"%msi14_68%"
|
||||||
|
"%msi14_86%"
|
||||||
|
"%msi15_68%"
|
||||||
|
"%msi15_86%"
|
||||||
|
"%msi16_68%"
|
||||||
|
"%msi16_86%"
|
||||||
|
"%c2r14_68%"
|
||||||
|
"%c2r14_86%"
|
||||||
|
"%c2r15_68%"
|
||||||
|
"%c2r15_86%"
|
||||||
|
"%c2r16_68%"
|
||||||
|
"%c2r16_86%"
|
||||||
|
"%uwp16%"
|
||||||
|
) do (
|
||||||
|
if not "%%#"=="""" (
|
||||||
|
set insoff=%%#
|
||||||
|
set insoff=!insoff:"=!
|
||||||
|
echo [!insoff!]
|
||||||
|
set /a counter+=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if %counter% GTR 1 (
|
||||||
|
%eline%
|
||||||
|
echo Multiple office versions found.
|
||||||
|
echo It's recommended to install only one version of office.
|
||||||
|
echo ________________________________________________________________
|
||||||
|
echo:
|
||||||
|
)
|
||||||
|
|
||||||
|
if %counter% EQU 0 (
|
||||||
|
echo:
|
||||||
|
echo Installed Office is not found.
|
||||||
|
goto :repairend
|
||||||
|
echo:
|
||||||
|
) else (
|
||||||
|
echo:
|
||||||
|
call :_color %_Yellow% "A Window will popup, in that Window you need to select Repair Option..."
|
||||||
|
call :_color %_Yellow% "Press any key to continue..."
|
||||||
|
echo:
|
||||||
|
pause >nul
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined uwp16 (
|
||||||
|
echo:
|
||||||
|
echo Note: Skipping repair for Office 16.0 UWP.
|
||||||
|
echo You need to use reset option in Windows settings for it.
|
||||||
|
echo ________________________________________________________________
|
||||||
|
echo:
|
||||||
|
start ms-settings:appsfeatures
|
||||||
|
)
|
||||||
|
|
||||||
|
set c2r14=
|
||||||
|
if defined c2r14_68 set c2r14=1
|
||||||
|
if defined c2r14_86 set c2r14=1
|
||||||
|
|
||||||
|
if defined c2r14 (
|
||||||
|
echo:
|
||||||
|
echo Note: Skipping repair for Office 14.0 C2R
|
||||||
|
echo You need to use Repair option in Windows settings for it.
|
||||||
|
echo ________________________________________________________________
|
||||||
|
echo:
|
||||||
|
start appwiz.cpl
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%"
|
||||||
|
if defined msi14_86 if exist "%msi14repair86%" echo Running - "%msi14repair86%" & "%msi14repair86%"
|
||||||
|
if defined msi15_68 if exist "%msi15repair68%" echo Running - "%msi15repair68%" & "%msi15repair68%"
|
||||||
|
if defined msi15_86 if exist "%msi15repair86%" echo Running - "%msi15repair86%" & "%msi15repair86%"
|
||||||
|
if defined msi16_68 if exist "%msi16repair68%" echo Running - "%msi16repair68%" & "%msi16repair68%"
|
||||||
|
if defined msi16_86 if exist "%msi16repair86%" echo Running - "%msi16repair86%" & "%msi16repair86%"
|
||||||
|
if defined c2r15_68 if exist "%c2r15repair68%" echo Running - "%c2r15repair68%" REPAIRUI RERUNMODE & "%c2r15repair68%" REPAIRUI RERUNMODE
|
||||||
|
if defined c2r15_86 if exist "%c2r15repair86%" echo Running - "%c2r15repair86%" REPAIRUI RERUNMODE & "%c2r15repair86%" REPAIRUI RERUNMODE
|
||||||
|
if defined c2r16_68 if exist "%c2r16repair68%" echo Running - "%c2r16repair68%" scenario=Repair & "%c2r16repair68%" scenario=Repair
|
||||||
|
if defined c2r16_86 if exist "%c2r16repair86%" echo Running - "%c2r16repair86%" scenario=Repair & "%c2r16repair86%" scenario=Repair
|
||||||
|
|
||||||
|
:repairend
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
|
call :_color %Green% "Finished"
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:at_back
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo %line%
|
||||||
|
echo:
|
||||||
|
call :_color %_Yellow% "Press any key to go back..."
|
||||||
|
pause >nul
|
||||||
|
goto :at_menu
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:at_done
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:_stopservice
|
||||||
|
|
||||||
|
for %%# in (%1) do (
|
||||||
|
sc query %%# | find /i "STOPPED" %nul% || net stop %%# /y %nul%
|
||||||
|
sc query %%# | find /i "STOPPED" %nul% || sc stop %%# %nul%
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:_startservice
|
||||||
|
|
||||||
|
for %%# in (%1) do (
|
||||||
|
sc query %%# | find /i "RUNNING" %nul% || net start %%# /y %nul%
|
||||||
|
sc query %%# | find /i "RUNNING" %nul% || sc start %%# %nul%
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:scandat
|
||||||
|
|
||||||
|
set token=
|
||||||
|
for %%# in (
|
||||||
|
%Systemdrive%\Windows\System32\spp\store_test\2.0\
|
||||||
|
%Systemdrive%\Windows\System32\spp\store\
|
||||||
|
%Systemdrive%\Windows\System32\spp\store\2.0\
|
||||||
|
%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\
|
||||||
|
) do (
|
||||||
|
|
||||||
|
if %1==check (
|
||||||
|
if exist %%#tokens.dat set token=%%#tokens.dat
|
||||||
|
)
|
||||||
|
|
||||||
|
if %1==delete (
|
||||||
|
if exist %%# (
|
||||||
|
%nul% dir /a-d /s "%%#*.dat" && (
|
||||||
|
attrib -r -s -h "%%#*.dat" /S
|
||||||
|
del /S /F /Q "%%#*.dat"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:scandatospp
|
||||||
|
|
||||||
|
set token=
|
||||||
|
for %%# in (
|
||||||
|
%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\
|
||||||
|
) do (
|
||||||
|
|
||||||
|
if %1==check (
|
||||||
|
if exist %%#tokens.dat set token=%%#tokens.dat
|
||||||
|
)
|
||||||
|
|
||||||
|
if %1==delete (
|
||||||
|
if exist %%# (
|
||||||
|
%nul% dir /a-d /s "%%#*.dat" && (
|
||||||
|
attrib -r -s -h "%%#*.dat" /S
|
||||||
|
del /S /F /Q "%%#*.dat"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================\
|
||||||
|
|
||||||
|
:_color
|
||||||
|
|
||||||
|
if %_NCS% EQU 1 (
|
||||||
|
echo %esc%[%~1%~2%esc%[0m
|
||||||
|
) else (
|
||||||
|
call :batcol %~1 "%~2"
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:_color2
|
||||||
|
|
||||||
|
if %_NCS% EQU 1 (
|
||||||
|
echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
|
||||||
|
) else (
|
||||||
|
call :batcol %~1 "%~2" %~3 "%~4"
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::=======================================
|
||||||
|
|
||||||
|
:: Colored text with pure batch method
|
||||||
|
:: Thanks to @dbenham and @jeb
|
||||||
|
:: stackoverflow.com/a/10407642
|
||||||
|
|
||||||
|
:batcol
|
||||||
|
|
||||||
|
pushd %_coltemp%
|
||||||
|
if not exist "'" (<nul >"'" set /p "=.")
|
||||||
|
setlocal
|
||||||
|
set "s=%~2"
|
||||||
|
set "t=%~4"
|
||||||
|
call :_batcol %1 s %3 t
|
||||||
|
del /f /q "'"
|
||||||
|
del /f /q "`.txt"
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:_batcol
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
set "s=!%~2!"
|
||||||
|
set "t=!%~4!"
|
||||||
|
for /f delims^=^ eol^= %%i in ("!s!") do (
|
||||||
|
if "!" equ "" setlocal DisableDelayedExpansion
|
||||||
|
>`.txt (echo %%i\..\')
|
||||||
|
findstr /a:%~1 /f:`.txt "."
|
||||||
|
<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 (
|
||||||
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
|
|
||||||
|
set "Red="41;97m""
|
||||||
|
set "Gray="100;97m""
|
||||||
|
set "Black="30m""
|
||||||
|
set "Green="42;97m""
|
||||||
|
set "Blue="44;97m""
|
||||||
|
set "Yellow="43;97m""
|
||||||
|
set "Magenta="45;97m""
|
||||||
|
|
||||||
|
set "_Red="40;91m""
|
||||||
|
set "_Green="40;92m""
|
||||||
|
set "_Blue="40;94m""
|
||||||
|
set "_White="40;37m""
|
||||||
|
set "_Yellow="40;93m""
|
||||||
|
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "_BS=%%A %%A"
|
||||||
|
set "_coltemp=%SystemRoot%\Temp"
|
||||||
|
|
||||||
|
set "Red="CF""
|
||||||
|
set "Gray="8F""
|
||||||
|
set "Black="00""
|
||||||
|
set "Green="2F""
|
||||||
|
set "Blue="1F""
|
||||||
|
set "Yellow="6F""
|
||||||
|
set "Magenta="5F""
|
||||||
|
|
||||||
|
set "_Red="0C""
|
||||||
|
set "_Green="0A""
|
||||||
|
set "_Blue="09""
|
||||||
|
set "_White="07""
|
||||||
|
set "_Yellow="0E""
|
||||||
|
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-activations-summary.html">
|
|
||||||
</html>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-hwid-kms38-files.html">
|
|
||||||
</html>
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-hwid.html">
|
|
||||||
</html>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-kms38.html">
|
|
||||||
</html>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-online-kms-files.html">
|
|
||||||
</html>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-online-kms.html">
|
|
||||||
</html>
|
|
|
@ -0,0 +1,726 @@
|
||||||
|
@setlocal DisableDelayedExpansion
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
::============================================================================
|
||||||
|
::
|
||||||
|
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
||||||
|
::
|
||||||
|
:: Homepage: massgrave.dev
|
||||||
|
:: Email: windowsaddict@protonmail.com
|
||||||
|
::
|
||||||
|
::============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
||||||
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
|
set "_cmdf=%~f0"
|
||||||
|
for %%# in (%*) do (
|
||||||
|
if /i "%%#"=="r1" set r1=1
|
||||||
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
||||||
|
|
||||||
|
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 (
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
cls
|
||||||
|
color 07
|
||||||
|
title Change Windows Edition
|
||||||
|
|
||||||
|
set _elev=
|
||||||
|
if /i "%~1"=="-el" set _elev=1
|
||||||
|
|
||||||
|
set winbuild=1
|
||||||
|
set "nul=>nul 2>&1"
|
||||||
|
set psc=powershell.exe
|
||||||
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
|
set _NCS=1
|
||||||
|
if %winbuild% LSS 10586 set _NCS=0
|
||||||
|
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
||||||
|
|
||||||
|
if %_NCS% EQU 1 (
|
||||||
|
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
||||||
|
set "Red="41;97m""
|
||||||
|
set "Gray="100;97m""
|
||||||
|
set "Green="42;97m""
|
||||||
|
set "Magenta="45;97m""
|
||||||
|
set "_White="40;37m""
|
||||||
|
set "_Green="40;92m""
|
||||||
|
set "_Yellow="40;93m""
|
||||||
|
) else (
|
||||||
|
set "Red="Red" "white""
|
||||||
|
set "Gray="Darkgray" "white""
|
||||||
|
set "Green="DarkGreen" "white""
|
||||||
|
set "Magenta="Darkmagenta" "white""
|
||||||
|
set "_White="Black" "Gray""
|
||||||
|
set "_Green="Black" "Green""
|
||||||
|
set "_Yellow="Black" "Yellow""
|
||||||
|
)
|
||||||
|
|
||||||
|
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
||||||
|
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
||||||
|
set "line=echo ___________________________________________________________________________________________"
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
if %winbuild% LSS 10240 (
|
||||||
|
%eline%
|
||||||
|
echo Unsupported OS version detected.
|
||||||
|
echo Project is supported for Windows 10/11/Server Build 10240 and later.
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
|
||||||
|
%nceline%
|
||||||
|
echo Unable to find powershell.exe in the system.
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Fix for the special characters limitation in path name
|
||||||
|
|
||||||
|
set "_work=%~dp0"
|
||||||
|
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||||
|
|
||||||
|
set "_batf=%~f0"
|
||||||
|
set "_batp=%_batf:'=''%"
|
||||||
|
|
||||||
|
set _PSarg="""%~f0""" -el %_args%
|
||||||
|
|
||||||
|
set "_ttemp=%temp%"
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
||||||
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
|
%eline%
|
||||||
|
echo Script is launched from the temp folder,
|
||||||
|
echo Most likely you are running the script directly from the archive file.
|
||||||
|
echo:
|
||||||
|
echo Extract the archive file and launch the script from the extracted folder.
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
|
%nul% reg query HKU\S-1-5-19 || (
|
||||||
|
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
|
%eline%
|
||||||
|
echo This script require administrator privileges.
|
||||||
|
echo To do so, right click on this script and select 'Run as administrator'.
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 98, 30
|
||||||
|
|
||||||
|
call :dk_initial
|
||||||
|
|
||||||
|
if not defined applist (
|
||||||
|
cls
|
||||||
|
%eline%
|
||||||
|
echo Not Respoding: !e_wmispp!
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Check Windows Edition
|
||||||
|
|
||||||
|
set osedition=
|
||||||
|
for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| find /i "Current Edition :"') do set "osedition=%%a"
|
||||||
|
|
||||||
|
cls
|
||||||
|
if "%osedition%"=="" (
|
||||||
|
%eline%
|
||||||
|
DISM /English /Online /Get-CurrentEdition %nul%
|
||||||
|
cmd /c exit /b !errorlevel!
|
||||||
|
echo DISM command failed [Error Code - 0x!=ExitCode!]
|
||||||
|
echo OS Edition was not detected properly. Aborting...
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check product name
|
||||||
|
|
||||||
|
call :dk_product
|
||||||
|
|
||||||
|
:: Check SKU value
|
||||||
|
|
||||||
|
set osSKU=
|
||||||
|
set regSKU=
|
||||||
|
set wmiSKU=
|
||||||
|
|
||||||
|
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
||||||
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
|
||||||
|
set osSKU=%wmiSKU%
|
||||||
|
if not defined osSKU set osSKU=%regSKU%
|
||||||
|
|
||||||
|
if not defined osSKU (
|
||||||
|
%eline%
|
||||||
|
echo SKU value was not detected properly. Aborting...
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check PowerShell
|
||||||
|
|
||||||
|
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
||||||
|
%eline%
|
||||||
|
echo PowerShell is not responding properly. Aborting...
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check slmgr /dlv
|
||||||
|
|
||||||
|
cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul%
|
||||||
|
set error_code=%errorlevel%
|
||||||
|
cmd /c exit /b %error_code%
|
||||||
|
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
||||||
|
if %error_code% NEQ 0 (
|
||||||
|
%eline%
|
||||||
|
echo slmgr /dlv is not responding %error_code%
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Get Target editions list
|
||||||
|
|
||||||
|
set _target=
|
||||||
|
set _ntarget=
|
||||||
|
for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _target (set "_target=!_target! %%a") else (set "_target=%%a"))
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Block the change to/from CountrySpecific and CloudEdition editions
|
||||||
|
|
||||||
|
for %%# in (99 139 202 203) do if %osSKU%==%%# (
|
||||||
|
%eline%
|
||||||
|
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||||
|
echo It's not recommended to change this installed edition to any other.
|
||||||
|
echo Aborting...
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined _target (
|
||||||
|
for %%# in (%_target%) do (
|
||||||
|
echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (if defined _ntarget (set "_ntarget=!_ntarget! %%#") else (set "_ntarget=%%#"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if not defined _ntarget (
|
||||||
|
%line%
|
||||||
|
echo:
|
||||||
|
call :dk_color %Gray% "Target Edition not found."
|
||||||
|
echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition.
|
||||||
|
%line%
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:cedmenu2
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode 98, 30
|
||||||
|
set inpt=
|
||||||
|
set counter=0
|
||||||
|
set verified=0
|
||||||
|
set targetedition=
|
||||||
|
|
||||||
|
%line%
|
||||||
|
echo:
|
||||||
|
call :dk_color %Gray% "You can change the Current Edition [%osedition%] to one of the following."
|
||||||
|
%line%
|
||||||
|
echo:
|
||||||
|
|
||||||
|
for %%A in (%_ntarget%) do (
|
||||||
|
set /a counter+=1
|
||||||
|
echo [!counter!] %%A
|
||||||
|
set targetedition!counter!=%%A
|
||||||
|
)
|
||||||
|
|
||||||
|
%line%
|
||||||
|
echo:
|
||||||
|
echo [0] Exit
|
||||||
|
echo:
|
||||||
|
call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":"
|
||||||
|
set /p inpt=
|
||||||
|
if "%inpt%"=="" goto cedmenu2
|
||||||
|
if "%inpt%"=="0" exit /b
|
||||||
|
for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
|
||||||
|
set targetedition=!targetedition%inpt%!
|
||||||
|
if %verified%==0 goto cedmenu2
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||||
|
goto :ced_change_server
|
||||||
|
)
|
||||||
|
|
||||||
|
cls
|
||||||
|
set key=
|
||||||
|
set _chan=
|
||||||
|
set _changepk=0
|
||||||
|
set "keyflow=Retail Volume:MAK Volume:GVLK OEM:NONSLP OEM:DM"
|
||||||
|
|
||||||
|
:: Check if changepk.exe or slmgr.vbs is required for edition upgrade
|
||||||
|
|
||||||
|
if not exist "%SystemRoot%\System32\spp\tokens\skus\%targetedition%\" (
|
||||||
|
set _changepk=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%osedition:~0,4%"=="Core" (
|
||||||
|
if /i not "%targetedition:~0,4%"=="Core" (
|
||||||
|
set _changepk=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if %winbuild% LEQ 19044 call :changeeditiondata
|
||||||
|
|
||||||
|
if not defined key call :ced_targetSKU %targetedition%
|
||||||
|
if not defined key if defined targetSKU call :ced_windowskey
|
||||||
|
if defined key if defined pkeychannel set _chan=%pkeychannel%
|
||||||
|
|
||||||
|
if not defined key (
|
||||||
|
%eline%
|
||||||
|
echo [%targetedition% ^| %winbuild%]
|
||||||
|
echo Unable to get product key from pkeyhelper.dll
|
||||||
|
echo Make sure you are using updated version of the script
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
%line%
|
||||||
|
|
||||||
|
:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" method and restart
|
||||||
|
:: In other cases, editions can be changed instantly with "slmgr /ipk"
|
||||||
|
|
||||||
|
:ced_loop
|
||||||
|
|
||||||
|
cls
|
||||||
|
if %_changepk%==1 (
|
||||||
|
echo "%_chan%" | find /i "OEM" >NUL && (
|
||||||
|
%eline%
|
||||||
|
echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack of non OEM keys.
|
||||||
|
echo Non-OEM keys are required to change from Core to Non-Core Editions.
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
for %%a in (dns.msftncsi.com,www.microsoft.com,one.one.one.one,resolver1.opendns.com) do (
|
||||||
|
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
|
||||||
|
if not [%%#]==[] (
|
||||||
|
%eline%
|
||||||
|
echo Disconnect the Internet and then press any key...
|
||||||
|
pause >nul
|
||||||
|
goto ced_loop
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
||||||
|
echo:
|
||||||
|
|
||||||
|
if %_changepk%==1 (
|
||||||
|
call :dk_color %Green% "You can safely ignore if error appears in the upgrade Window."
|
||||||
|
call :dk_color %Red% "But in that case you must manually reboot the system."
|
||||||
|
echo:
|
||||||
|
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
|
||||||
|
echo:
|
||||||
|
choice /C:21 /N /M "[1] Continue [2] Exit : "
|
||||||
|
if !errorlevel!==1 exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
if %_changepk%==0 (
|
||||||
|
echo Installing %_chan% Key [%key%]
|
||||||
|
echo:
|
||||||
|
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
|
||||||
|
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Version FROM SoftwareLicensingService').Get()).InstallProductKey('%key%')" %nul%
|
||||||
|
if not !errorlevel!==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
|
||||||
|
|
||||||
|
set error_code=!errorlevel!
|
||||||
|
cmd /c exit /b !error_code!
|
||||||
|
if !error_code! NEQ 0 set "error_code=[0x!=ExitCode!]"
|
||||||
|
|
||||||
|
if !error_code! EQU 0 (
|
||||||
|
call :dk_refresh
|
||||||
|
call :dk_color %Green% "[Successful]"
|
||||||
|
echo:
|
||||||
|
call :dk_color %Gray% "Reboot is required to properly change the Edition."
|
||||||
|
) else (
|
||||||
|
call :dk_color %Red% "[Unsuccessful] [Error Code: 0x!=ExitCode!]"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if %_changepk%==1 (
|
||||||
|
echo:
|
||||||
|
echo Applying the command with %_chan% Key
|
||||||
|
echo start changepk.exe /ProductKey %key%
|
||||||
|
start changepk.exe /ProductKey %key%
|
||||||
|
)
|
||||||
|
%line%
|
||||||
|
|
||||||
|
goto ced_done
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:ced_change_server
|
||||||
|
|
||||||
|
cls
|
||||||
|
mode con cols=105 lines=32
|
||||||
|
%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}"
|
||||||
|
|
||||||
|
set key=
|
||||||
|
set pkeychannel=
|
||||||
|
set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM"
|
||||||
|
call :changeeditionserverdata
|
||||||
|
|
||||||
|
if not defined key call :ced_targetSKU %targetedition%
|
||||||
|
if not defined key if defined targetSKU call :ced_windowskey
|
||||||
|
if defined key if not defined pkeychannel call :dk_pkeychannel %key%
|
||||||
|
|
||||||
|
if not defined key (
|
||||||
|
%eline%
|
||||||
|
echo [%targetedition% ^| %winbuild%]
|
||||||
|
echo Unable to get product key from pkeyhelper.dll
|
||||||
|
echo Make sure you are using updated version of the script
|
||||||
|
goto ced_done
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
cls
|
||||||
|
echo:
|
||||||
|
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
||||||
|
echo:
|
||||||
|
echo Applying the command with %pkeychannel% Key
|
||||||
|
echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
||||||
|
DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
|
||||||
|
|
||||||
|
call :dk_color %Magenta% "Make sure to restart the system."
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:ced_done
|
||||||
|
|
||||||
|
echo:
|
||||||
|
call :dk_color %_Yellow% "Press any key to exit..."
|
||||||
|
pause >nul
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Refresh license status
|
||||||
|
|
||||||
|
:dk_refresh
|
||||||
|
|
||||||
|
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call RefreshLicenseStatus %nul%
|
||||||
|
if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul%
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get Windows Activation IDs
|
||||||
|
|
||||||
|
:dk_actids
|
||||||
|
|
||||||
|
set applist=
|
||||||
|
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
||||||
|
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
||||||
|
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||||
|
|
||||||
|
:dk_product
|
||||||
|
|
||||||
|
set winos=
|
||||||
|
set d1=[DllImport(\"winbrand\",CharSet=CharSet.Unicode)]public static extern string BrandingFormatString(string s);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $AP::BrandingFormatString('%%WINDOWS_LONG%%')
|
||||||
|
for /f "delims=" %%s in ('"%psc% %d2%"') do if not errorlevel 1 (set winos=%%s)
|
||||||
|
echo "%winos%" | find /i "Windows" 1>nul || (
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
||||||
|
if %winbuild% GEQ 22000 (
|
||||||
|
set winos=!winos:Windows 10=Windows 11!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Check wmic.exe
|
||||||
|
|
||||||
|
:dk_ckeckwmic
|
||||||
|
|
||||||
|
set _wmic=0
|
||||||
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
|
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:dk_initial
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Initializing...
|
||||||
|
|
||||||
|
:: Check and enable WinMgmt, sppsvc services if required
|
||||||
|
|
||||||
|
for %%# in (WinMgmt sppsvc) do (
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 (
|
||||||
|
echo:
|
||||||
|
echo Enabling %%# service...
|
||||||
|
if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed
|
||||||
|
if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed
|
||||||
|
)
|
||||||
|
sc start %%# %nul%
|
||||||
|
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Starting %%# service...
|
||||||
|
sc start %%#
|
||||||
|
echo:
|
||||||
|
call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check WMI and SPP Errors
|
||||||
|
|
||||||
|
call :dk_ckeckwmic
|
||||||
|
|
||||||
|
set e_wmi=
|
||||||
|
set e_wmispp=
|
||||||
|
call :dk_actids
|
||||||
|
|
||||||
|
if not defined applist (
|
||||||
|
net stop sppsvc /y %nul%
|
||||||
|
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
call :dk_refresh
|
||||||
|
|
||||||
|
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
||||||
|
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
|
||||||
|
if !errorlevel! NEQ 0 set e_wmi=1
|
||||||
|
|
||||||
|
if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP)
|
||||||
|
call :dk_actids
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Get Product Key from pkeyhelper.dll for future new editions
|
||||||
|
:: It works on Windows 10 1803 (17134) and later builds.
|
||||||
|
|
||||||
|
:dk_pkey
|
||||||
|
|
||||||
|
set pkey=
|
||||||
|
set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k
|
||||||
|
for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get channel name for the key which was extracted from pkeyhelper.dll
|
||||||
|
|
||||||
|
:dk_pkeychannel
|
||||||
|
|
||||||
|
set k=%1
|
||||||
|
set pkeychannel=
|
||||||
|
set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
|
||||||
|
set m=[System.Runtime.InteropServices.Marshal]
|
||||||
|
set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272);
|
||||||
|
set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','')
|
||||||
|
for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:ced_windowskey
|
||||||
|
|
||||||
|
for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
|
||||||
|
for %%# in (%keyflow%) do (
|
||||||
|
call :dk_pkey %targetSKU% '%%#'
|
||||||
|
if defined pkey call :dk_pkeychannel !pkey!
|
||||||
|
if /i [!pkeychannel!]==[%%#] (
|
||||||
|
set key=!pkey!
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:ced_targetSKU
|
||||||
|
|
||||||
|
set k=%1
|
||||||
|
set targetSKU=
|
||||||
|
for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
|
||||||
|
set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int GetEditionIdFromName(string e, out int s);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $s=0; $null=$AP::GetEditionIdFromName('%k%', [ref]$s); $s
|
||||||
|
for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set targetSKU=%%a)
|
||||||
|
if "%targetSKU%"=="0" set targetSKU=
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:dk_color
|
||||||
|
|
||||||
|
if %_NCS% EQU 1 (
|
||||||
|
echo %esc%[%~1%~2%esc%[0m
|
||||||
|
) else (
|
||||||
|
%psc% write-host -back '%1' -fore '%2' '%3'
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:dk_color2
|
||||||
|
|
||||||
|
if %_NCS% EQU 1 (
|
||||||
|
echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
|
||||||
|
) else (
|
||||||
|
%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: 1st column = Generic Retail/OEM/MAK/GVLK Key
|
||||||
|
:: 2nd column = Key Type
|
||||||
|
:: 3rd column = WMI Edition ID
|
||||||
|
:: 4th column = Version name incase same Edition ID is used in different OS versions with different key
|
||||||
|
:: Separator = _
|
||||||
|
|
||||||
|
:: Key preference is in the following order. Retail > Volume:MAK > Volume:GVLK > OEM:NONSLP > OEM:DM
|
||||||
|
:: OEM keys are in last because they can't be used in edition change if "changepk /productkey" method is needed instead of "slmgr /ipk"
|
||||||
|
:: OEM keys are listed here because we don't have other keys for that edition
|
||||||
|
|
||||||
|
:changeeditiondata
|
||||||
|
|
||||||
|
for %%# in (
|
||||||
|
44NYX-TKR9D-CCM2D-V6B8F-HQWWR_Volume:MAK_Enterprise
|
||||||
|
D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ_____Retail_Starter
|
||||||
|
3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT_Volume:MAK_EnterpriseN
|
||||||
|
3NFXW-2T27M-2BDW6-4GHRV-68XRX_____Retail_StarterN
|
||||||
|
VK7JG-NPHTM-C97JM-9MPGT-3V66T_____Retail_Professional
|
||||||
|
2B87N-8KFHP-DKV6R-Y2C8J-PKCKT_____Retail_ProfessionalN
|
||||||
|
4CPRK-NM3K3-X6XXQ-RXX86-WXCHW_____Retail_CoreN
|
||||||
|
N2434-X9D7W-8PF6X-8DV9T-8TYMD_____Retail_CoreCountrySpecific
|
||||||
|
BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_____Retail_CoreSingleLanguage
|
||||||
|
YTMG3-N6DKC-DKB77-7M9GH-8HVX7_____Retail_Core
|
||||||
|
XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_OEM:NONSLP_PPIPro
|
||||||
|
YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_____Retail_Education
|
||||||
|
84NGF-MHBT6-FXBX8-QWJK7-DRR8H_____Retail_EducationN
|
||||||
|
KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_Volume:MAK_EnterpriseS_2021
|
||||||
|
VBX36-N7DDY-M9H62-83BMJ-CPR42_Volume:MAK_EnterpriseS_2019
|
||||||
|
PN3KR-JXM7T-46HM4-MCQGK-7XPJQ_Volume:MAK_EnterpriseS_2016
|
||||||
|
DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY_Volume:MAK_EnterpriseS_2015
|
||||||
|
RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_Volume:MAK_EnterpriseSN_2021
|
||||||
|
M33WV-NHY3C-R7FPM-BQGPT-239PG_Volume:MAK_EnterpriseSN_2019
|
||||||
|
2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_Volume:MAK_EnterpriseSN_2016
|
||||||
|
NTX6B-BRYC2-K6786-F6MVQ-M7V2X_Volume:MAK_EnterpriseSN_2015
|
||||||
|
G3KNM-CHG6T-R36X3-9QDG6-8M8K9_____Retail_ProfessionalSingleLanguage
|
||||||
|
HNGCC-Y38KG-QVK8D-WMWRK-X86VK_____Retail_ProfessionalCountrySpecific
|
||||||
|
DXG7C-N36C4-C4HTG-X4T3X-2YV77_____Retail_ProfessionalWorkstation
|
||||||
|
WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_____Retail_ProfessionalWorkstationN
|
||||||
|
8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_____Retail_ProfessionalEducation
|
||||||
|
GJTYN-HDMQY-FRR76-HVGC7-QPF8P_____Retail_ProfessionalEducationN
|
||||||
|
C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC_Volume:MAK_EnterpriseG
|
||||||
|
46PN6-R9BK9-CVHKB-HWQ9V-MBJY8_Volume:MAK_EnterpriseGN
|
||||||
|
NJCF7-PW8QT-3324D-688JX-2YV66_____Retail_ServerRdsh
|
||||||
|
V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_____Retail_Cloud
|
||||||
|
NH9J3-68WK7-6FB93-4K3DF-DJ4F6_____Retail_CloudN
|
||||||
|
2HN6V-HGTM8-6C97C-RK67V-JQPFD_____Retail_CloudE
|
||||||
|
XQQYW-NFFMW-XJPBH-K8732-CKFFD_____OEM:DM_IoTEnterprise
|
||||||
|
QPM6N-7J2WJ-P88HH-P3YRH-YY74H_OEM:NONSLP_IoTEnterpriseS
|
||||||
|
K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_____Retail_CloudEditionN
|
||||||
|
KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_____Retail_CloudEdition
|
||||||
|
) do (
|
||||||
|
for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
|
||||||
|
|
||||||
|
if not defined key (
|
||||||
|
set 4th=%%D
|
||||||
|
if not defined 4th (
|
||||||
|
set "key=%%A" & set "_chan=%%B"
|
||||||
|
) else (
|
||||||
|
echo "%winos%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:changeeditionserverdata
|
||||||
|
|
||||||
|
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
|
||||||
|
|
||||||
|
:: Only RS3 and older version keys (GVLK/Generic Retail) are stored here, later ones are extracted from the system itself
|
||||||
|
|
||||||
|
for %%# in (
|
||||||
|
WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY_RS1_ServerStandard%Cor%
|
||||||
|
CB7KF-BWN84-R7R2Y-793K2-8XDDG_RS1_ServerDatacenter%Cor%
|
||||||
|
JCKRF-N37P4-C2D82-9YXRT-4M63B_RS1_ServerSolution
|
||||||
|
QN4C6-GBJD2-FB422-GHWJK-GJG2R_RS1_ServerCloudStorage
|
||||||
|
VP34G-4NPPG-79JTQ-864T4-R3MQX_RS1_ServerAzureCor
|
||||||
|
9JQNQ-V8HQ6-PKB8H-GGHRY-R62H6_RS1_ServerAzureNano
|
||||||
|
VN8D3-PR82H-DB6BJ-J9P4M-92F6J_RS1_ServerStorageStandard
|
||||||
|
48TQX-NVK3R-D8QR3-GTHHM-8FHXC_RS1_ServerStorageWorkgroup
|
||||||
|
2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG_RS3_ServerDatacenterACor
|
||||||
|
PTXN8-JFHJM-4WC78-MPCBR-9W4KR_RS3_ServerStandardACor
|
||||||
|
) do (
|
||||||
|
for /f "tokens=1-3 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
|
||||||
|
echo "%branch%" | find /i "%%B" 1>nul && (set "key=%%A")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
|
@ -10,22 +10,47 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set _args=
|
||||||
|
set _args=%*
|
||||||
|
for %%A in (%_args%) do (
|
||||||
|
if /i "%%A"=="-wow" set _rel1=1
|
||||||
|
if /i "%%A"=="-arm" set _rel2=1
|
||||||
|
)
|
||||||
set "_cmdf=%~f0"
|
set "_cmdf=%~f0"
|
||||||
if exist "%SystemRoot%\Sysnative\cmd.exe" (
|
if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" "
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 (
|
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" "
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
color 07
|
color 07
|
||||||
title Check Activation Status [vbs]
|
title Check Activation Status [vbs]
|
||||||
set "SysPath=%SystemRoot%\System32"
|
set "SysPath=%SystemRoot%\System32"
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "SysPath=%SystemRoot%\Sysnative"
|
||||||
|
set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
set "_bit=64"
|
set "_bit=64"
|
||||||
set "_wow=1"
|
set "_wow=1"
|
||||||
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32"
|
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "_wow=0"&set "_bit=32"
|
|
@ -10,20 +10,24 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:: change to 1 to use VBScript instead wmic.exe to access WMI
|
|
||||||
:: this option is automatically enabled for Windows 11 build 22483 and later
|
|
||||||
set WMI_VBS=0
|
|
||||||
|
|
||||||
|
set WMI_VBS=0
|
||||||
@cls
|
@cls
|
||||||
|
set _args=
|
||||||
|
set _args=%*
|
||||||
|
for %%A in (%_args%) do (
|
||||||
|
if /i "%%A"=="-wow" set _rel1=1
|
||||||
|
if /i "%%A"=="-arm" set _rel2=1
|
||||||
|
)
|
||||||
set "_cmdf=%~f0"
|
set "_cmdf=%~f0"
|
||||||
if exist "%SystemRoot%\Sysnative\cmd.exe" (
|
if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" "
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 (
|
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" "
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
color 07
|
color 07
|
||||||
|
@ -52,12 +56,53 @@ dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set
|
||||||
pushd "!_work!"
|
pushd "!_work!"
|
||||||
setlocal DisableDelayedExpansion
|
setlocal DisableDelayedExpansion
|
||||||
if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" set _Identity=0
|
if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" set _Identity=0
|
||||||
set _pwrsh=1
|
|
||||||
if not exist "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" set _pwrsh=0
|
set "SysPath=%SystemRoot%\System32"
|
||||||
|
set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
|
set "SysPath=%SystemRoot%\Sysnative"
|
||||||
|
set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
|
set _cwmi=0
|
||||||
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
|
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul && set _cwmi=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if %_cwmi% EQU 0 (
|
||||||
|
echo:
|
||||||
|
echo Error: wmic.exe is not responding in the system.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
set "line2=************************************************************"
|
||||||
|
set "line3=____________________________________________________________"
|
||||||
|
set "_psc=powershell"
|
||||||
|
|
||||||
|
set _prsh=1
|
||||||
|
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _prsh=0
|
||||||
set "_csg=cscript.exe //NoLogo //Job:WmiMulti "%~nx0?.wsf""
|
set "_csg=cscript.exe //NoLogo //Job:WmiMulti "%~nx0?.wsf""
|
||||||
set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf""
|
set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf""
|
||||||
set "_csx=cscript.exe //NoLogo //Job:XPDT "%~nx0?.wsf""
|
set "_csx=cscript.exe //NoLogo //Job:XPDT "%~nx0?.wsf""
|
||||||
if %winbuild% GEQ 22483 set WMI_VBS=1
|
if %_cwmi% EQU 0 set WMI_VBS=1
|
||||||
if %WMI_VBS% EQU 0 (
|
if %WMI_VBS% EQU 0 (
|
||||||
set "_zz1=wmic path"
|
set "_zz1=wmic path"
|
||||||
set "_zz2=where"
|
set "_zz2=where"
|
||||||
|
@ -77,20 +122,7 @@ set "_zz6=""
|
||||||
set "_zz7=%_csq%"
|
set "_zz7=%_csq%"
|
||||||
set "_zz8="
|
set "_zz8="
|
||||||
)
|
)
|
||||||
|
set _WSH=0
|
||||||
set "SysPath=%SystemRoot%\System32"
|
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
|
||||||
set "line2=************************************************************"
|
|
||||||
set "line3=____________________________________________________________"
|
|
||||||
|
|
||||||
set _WSH=1
|
|
||||||
reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul && (
|
|
||||||
reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
|
|
||||||
)
|
|
||||||
if %_WSH% EQU 0 if %WMI_VBS% NEQ 0 goto :E_VBS
|
|
||||||
|
|
||||||
set OsppHook=1
|
set OsppHook=1
|
||||||
sc query osppsvc >nul 2>&1
|
sc query osppsvc >nul 2>&1
|
||||||
if %errorlevel% EQU 1060 set OsppHook=0
|
if %errorlevel% EQU 1060 set OsppHook=0
|
||||||
|
@ -195,8 +227,8 @@ set "LicenseMsg=Time remaining: %GracePeriodRemaining% minute(s) (%_gpr% day(s))
|
||||||
if %_gpr% GEQ 1 if %_WSH% EQU 1 (
|
if %_gpr% GEQ 1 if %_WSH% EQU 1 (
|
||||||
for /f "tokens=* delims=" %%# in ('%_csx% %GracePeriodRemaining%') do set "_xpr=%%#"
|
for /f "tokens=* delims=" %%# in ('%_csx% %GracePeriodRemaining%') do set "_xpr=%%#"
|
||||||
)
|
)
|
||||||
if %_gpr% GEQ 1 if %_pwrsh% EQU 1 if not defined _xpr (
|
if %_gpr% GEQ 1 if %_prsh% EQU 1 if not defined _xpr (
|
||||||
for /f "tokens=* delims=" %%# in ('powershell "$([DateTime]::Now.addMinutes(%GracePeriodRemaining%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "_xpr=%%#"
|
for /f "tokens=* delims=" %%# in ('%_psc% "$([DateTime]::Now.addMinutes(%GracePeriodRemaining%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "_xpr=%%#"
|
||||||
title Check Activation Status [wmi]
|
title Check Activation Status [wmi]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -311,12 +343,12 @@ if defined ExpireMsg echo.&echo. %ExpireMsg%
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:casWend
|
:casWend
|
||||||
if %_Identity% EQU 1 if %_pwrsh% EQU 1 (
|
if %_Identity% EQU 1 if %_prsh% EQU 1 (
|
||||||
echo %line2%
|
echo %line2%
|
||||||
echo *** Office vNext Status ***
|
echo *** Office vNext Status ***
|
||||||
echo %line2%
|
echo %line2%
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
powershell "$f=[IO.File]::ReadAllText('!_batp!') -split ':vNextDiag\:.*';iex ($f[1])"
|
%_psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':vNextDiag\:.*';iex ($f[1])"
|
||||||
title Check Activation Status [wmi]
|
title Check Activation Status [wmi]
|
||||||
echo %line3%
|
echo %line3%
|
||||||
echo.
|
echo.
|
||||||
|
@ -326,15 +358,6 @@ echo Press any key to exit.
|
||||||
pause >nul
|
pause >nul
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:E_VBS
|
|
||||||
echo ==== ERROR ====
|
|
||||||
echo Windows Script Host is disabled.
|
|
||||||
echo It is required for this script to work.
|
|
||||||
echo.
|
|
||||||
echo Press any key to exit.
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:vNextDiag:
|
:vNextDiag:
|
||||||
function PrintModePerPridFromRegistry
|
function PrintModePerPridFromRegistry
|
||||||
{
|
{
|
||||||
|
@ -507,47 +530,4 @@ PrintLicensesInformation -Mode "NUL"
|
||||||
Write-Host
|
Write-Host
|
||||||
PrintLicensesInformation -Mode "Device"
|
PrintLicensesInformation -Mode "Device"
|
||||||
:vNextDiag:
|
:vNextDiag:
|
||||||
|
::===================================================
|
||||||
----- Begin wsf script --->
|
|
||||||
<package>
|
|
||||||
<job id="WmiQuery">
|
|
||||||
<script language="VBScript">
|
|
||||||
If WScript.Arguments.Count = 3 Then
|
|
||||||
wExc = "Select " & WScript.Arguments.Item(2) & " from " & WScript.Arguments.Item(0) & " where " & WScript.Arguments.Item(1)
|
|
||||||
wGet = WScript.Arguments.Item(2)
|
|
||||||
Else
|
|
||||||
wExc = "Select " & WScript.Arguments.Item(1) & " from " & WScript.Arguments.Item(0)
|
|
||||||
wGet = WScript.Arguments.Item(1)
|
|
||||||
End If
|
|
||||||
Set objCol = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery(wExc,,48)
|
|
||||||
For Each objItm in objCol
|
|
||||||
For each Prop in objItm.Properties_
|
|
||||||
If LCase(Prop.Name) = LCase(wGet) Then
|
|
||||||
WScript.Echo Prop.Name & "=" & Prop.Value
|
|
||||||
Exit For
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
Next
|
|
||||||
</script>
|
|
||||||
</job>
|
|
||||||
<job id="WmiMulti">
|
|
||||||
<script language="VBScript">
|
|
||||||
If WScript.Arguments.Count = 3 Then
|
|
||||||
wExc = "Select " & WScript.Arguments.Item(2) & " from " & WScript.Arguments.Item(0) & " where " & WScript.Arguments.Item(1)
|
|
||||||
Else
|
|
||||||
wExc = "Select " & WScript.Arguments.Item(1) & " from " & WScript.Arguments.Item(0)
|
|
||||||
End If
|
|
||||||
Set objCol = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery(wExc,,48)
|
|
||||||
For Each objItm in objCol
|
|
||||||
For each Prop in objItm.Properties_
|
|
||||||
WScript.Echo Prop.Name & "=" & Prop.Value
|
|
||||||
Next
|
|
||||||
Next
|
|
||||||
</script>
|
|
||||||
</job>
|
|
||||||
<job id="XPDT">
|
|
||||||
<script language="VBScript">
|
|
||||||
WScript.Echo DateAdd("n", WScript.Arguments.Item(0), Now)
|
|
||||||
</script>
|
|
||||||
</job>
|
|
||||||
</package>
|
|
|
@ -7,7 +7,7 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: windowsaddict.ml
|
:: Homepage: massgrave.dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
@ -20,27 +20,47 @@
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: 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
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe (
|
|
||||||
set "_cmdf=%~f0"
|
set "_cmdf=%~f0"
|
||||||
|
for %%# in (%*) do (
|
||||||
|
if /i "%%#"=="r1" set r1=1
|
||||||
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 (
|
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 (
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
set "SysPath=%SystemRoot%\System32"
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
@ -50,7 +70,7 @@ title Extract $OEM$ Folder
|
||||||
|
|
||||||
set winbuild=1
|
set winbuild=1
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
set "_psc=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
|
set psc=powershell.exe
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
|
@ -81,15 +101,14 @@ set "eline=echo: &call :ex_color %Red% "==== ERROR ====" &echo:"
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
if %winbuild% LSS 7600 (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Unsupported OS version Detected.
|
echo Unsupported OS version detected.
|
||||||
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 done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
|
||||||
if not exist "%_psc%" (
|
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Powershell is not installed in the system.
|
echo Unable to find powershell.exe in the system.
|
||||||
echo Aborting...
|
|
||||||
goto done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -99,7 +118,7 @@ goto done2
|
||||||
|
|
||||||
set desktop=
|
set desktop=
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
||||||
if not defined desktop for /f "delims=" %%a in ('%_psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
||||||
|
|
||||||
if not defined desktop (
|
if not defined desktop (
|
||||||
%eline%
|
%eline%
|
||||||
|
@ -126,7 +145,16 @@ setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
if not exist "!desktop!\" (
|
||||||
|
%eline%
|
||||||
|
echo Desktop location was not detected, aborting...
|
||||||
|
goto done2
|
||||||
|
)
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
||||||
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%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.
|
||||||
|
@ -134,10 +162,11 @@ 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 done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
mode 66, 25
|
mode 66, 26
|
||||||
|
|
||||||
if exist "!desktop!\$OEM$\" (
|
if exist "!desktop!\$OEM$\" (
|
||||||
echo _____________________________________________________
|
echo _____________________________________________________
|
||||||
|
@ -147,21 +176,16 @@ echo _____________________________________________________
|
||||||
goto done2
|
goto done2
|
||||||
)
|
)
|
||||||
|
|
||||||
set HWID_Activation.cmd=Activators\HWID-KMS38_Activation\HWID_Activation.cmd
|
set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd
|
||||||
set KMS38_Activation.cmd=Activators\HWID-KMS38_Activation\KMS38_Activation.cmd
|
set KMS38_Activation.cmd=HWID-KMS38_Activation\KMS38_Activation.cmd
|
||||||
set ClipUp.exe=Activators\HWID-KMS38_Activation\BIN\ClipUp.exe
|
set ClipUp.exe=HWID-KMS38_Activation\BIN\ClipUp.exe
|
||||||
set gatherosstate.exe=Activators\HWID-KMS38_Activation\BIN\gatherosstate.exe
|
set gatherosstate.exe=HWID-KMS38_Activation\BIN\gatherosstate.exe
|
||||||
set slc.dll=Activators\HWID-KMS38_Activation\BIN\slc.dll
|
|
||||||
set arm64_gatherosstate.exe=Activators\HWID-KMS38_Activation\BIN\arm64_gatherosstate.exe
|
|
||||||
set arm64_slc.dll=Activators\HWID-KMS38_Activation\BIN\arm64_slc.dll
|
|
||||||
|
|
||||||
set Activate.cmd=Activators\Online_KMS_Activation\Activate.cmd
|
set Activate.cmd=Online_KMS_Activation\Activate.cmd
|
||||||
set cleanosppx64.exe=Activators\Online_KMS_Activation\BIN\cleanosppx64.exe
|
set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe
|
||||||
set cleanosppx86.exe=Activators\Online_KMS_Activation\BIN\cleanosppx86.exe
|
set cleanosppx86.exe=Online_KMS_Activation\BIN\cleanosppx86.exe
|
||||||
|
|
||||||
pushd "!_work!"
|
pushd "!_work!"
|
||||||
pushd ..
|
|
||||||
pushd ..
|
|
||||||
|
|
||||||
set _nofile=
|
set _nofile=
|
||||||
for %%# in (
|
for %%# in (
|
||||||
|
@ -169,9 +193,6 @@ for %%# in (
|
||||||
%KMS38_Activation.cmd%
|
%KMS38_Activation.cmd%
|
||||||
%ClipUp.exe%
|
%ClipUp.exe%
|
||||||
%gatherosstate.exe%
|
%gatherosstate.exe%
|
||||||
%slc.dll%
|
|
||||||
%arm64_gatherosstate.exe%
|
|
||||||
%arm64_slc.dll%
|
|
||||||
%Activate.cmd%
|
%Activate.cmd%
|
||||||
%cleanosppx64.exe%
|
%cleanosppx64.exe%
|
||||||
%cleanosppx86.exe%
|
%cleanosppx86.exe%
|
||||||
|
@ -179,8 +200,6 @@ for %%# in (
|
||||||
if not exist "%%#" set _nofile=1
|
if not exist "%%#" set _nofile=1
|
||||||
)
|
)
|
||||||
|
|
||||||
popd
|
|
||||||
popd
|
|
||||||
popd
|
popd
|
||||||
|
|
||||||
if defined _nofile (
|
if defined _nofile (
|
||||||
|
@ -198,32 +217,28 @@ goto done2
|
||||||
cls
|
cls
|
||||||
echo:
|
echo:
|
||||||
echo:
|
echo:
|
||||||
|
echo:
|
||||||
|
echo:
|
||||||
echo: Extract $OEM$ folder on the desktop
|
echo: Extract $OEM$ folder on the desktop
|
||||||
echo: For more details use Read me
|
|
||||||
echo: Here ^> means Fallback to
|
|
||||||
echo: ________________________________________________________
|
echo: ________________________________________________________
|
||||||
echo:
|
echo:
|
||||||
echo: [1] HWID
|
echo: [1] HWID
|
||||||
echo: [2] KMS38
|
echo: [2] KMS38
|
||||||
echo: [3] Online KMS
|
echo: [3] Online KMS
|
||||||
echo:
|
echo:
|
||||||
echo: [4] HWID ^> KMS38
|
echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
echo: [5] HWID ^> Online KMS
|
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
echo: [6] KMS38 ^> Online KMS
|
|
||||||
echo: [7] HWID ^> KMS38 ^> Online KMS
|
|
||||||
echo:
|
echo:
|
||||||
echo: [8] Exit
|
echo: [6] Exit
|
||||||
echo: ________________________________________________________
|
echo: ________________________________________________________
|
||||||
echo:
|
echo:
|
||||||
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,8]"
|
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6]"
|
||||||
choice /C:12345678 /N
|
choice /C:123456 /N
|
||||||
set _erl=%errorlevel%
|
set _erl=%errorlevel%
|
||||||
|
|
||||||
if %_erl%==8 exit /b
|
if %_erl%==6 exit /b
|
||||||
if %_erl%==7 goto:hwid_kms38_kms
|
if %_erl%==5 goto:kms38_kms
|
||||||
if %_erl%==6 goto:kms38_kms
|
if %_erl%==4 goto:hwid_kms
|
||||||
if %_erl%==5 goto:hwid_kms
|
|
||||||
if %_erl%==4 goto:hwid_kms38
|
|
||||||
if %_erl%==3 goto:kms
|
if %_erl%==3 goto:kms
|
||||||
if %_erl%==2 goto:kms38
|
if %_erl%==2 goto:kms38
|
||||||
if %_erl%==1 goto:hwid
|
if %_erl%==1 goto:hwid
|
||||||
|
@ -247,7 +262,7 @@ goto done
|
||||||
:hwid_setup:
|
:hwid_setup:
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
||||||
|
|
||||||
|
@ -273,7 +288,7 @@ goto done
|
||||||
:kms38_setup:
|
:kms38_setup:
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
||||||
|
|
||||||
|
@ -299,21 +314,10 @@ goto done
|
||||||
:kms_setup:
|
:kms_setup:
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
============================================================================
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS Renewal And Activation Task
|
|
||||||
set Renewal_And_Activation_Task=1
|
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS activation desktop context menu
|
|
||||||
set Desktop_context_menu=1
|
|
||||||
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
|
||||||
|
|
||||||
|
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
||||||
if %Renewal_And_Activation_Task% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
|
||||||
if %Desktop_context_menu% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /dcm
|
|
||||||
|
|
||||||
cd \
|
cd \
|
||||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
@ -321,52 +325,6 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:hwid_kms38
|
|
||||||
|
|
||||||
cls
|
|
||||||
call :prep
|
|
||||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
|
||||||
call :kms38prep
|
|
||||||
call :pop_d
|
|
||||||
call :export hwid_kms38_setup
|
|
||||||
call :kms38prep2
|
|
||||||
If not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
|
||||||
|
|
||||||
if defined _error goto errorfound
|
|
||||||
set "_oem=HWID [Fallback to] KMS38"
|
|
||||||
goto done
|
|
||||||
|
|
||||||
:hwid_kms38_setup:
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
|
||||||
|
|
||||||
set KMS38=
|
|
||||||
set osSKU=0
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "osSKU=%%a"
|
|
||||||
|
|
||||||
:: Check Windows Server version
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" set KMS38=1
|
|
||||||
|
|
||||||
:: 171=EnterpriseG, 172=EnterpriseGN, 183=CloudE
|
|
||||||
for %%# in (171 172 183) do (if %osSKU%==%%# set KMS38=1)
|
|
||||||
|
|
||||||
:: Check Enterprise LTSC 2019/2021 N
|
|
||||||
if %osSKU%==126 (echo %winos% | findstr /i "2019 2021" 1>nul && set KMS38=1)
|
|
||||||
|
|
||||||
if defined KMS38 (
|
|
||||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
|
||||||
) else (
|
|
||||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
|
||||||
)
|
|
||||||
|
|
||||||
cd \
|
|
||||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
|
||||||
:hwid_kms38_setup:
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:hwid_kms
|
:hwid_kms
|
||||||
|
|
||||||
cls
|
cls
|
||||||
|
@ -380,51 +338,18 @@ call :kmsprep2
|
||||||
|
|
||||||
if defined _error goto errorfound
|
if defined _error goto errorfound
|
||||||
if defined _kerror goto errorfound
|
if defined _kerror goto errorfound
|
||||||
set "_oem=HWID [Fallback to] Online KMS"
|
set "_oem=HWID [Windows] + Online KMS [Office]"
|
||||||
goto done
|
goto done
|
||||||
|
|
||||||
:hwid_kms_setup:
|
:hwid_kms_setup:
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
============================================================================
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS Renewal And Activation Task
|
|
||||||
set Renewal_And_Activation_Task=1
|
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS activation desktop context menu
|
|
||||||
set Desktop_context_menu=1
|
|
||||||
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
|
||||||
|
|
||||||
set KMS=
|
|
||||||
set osSKU=0
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "osSKU=%%a"
|
|
||||||
|
|
||||||
:: Check Windows 10 install
|
|
||||||
if %winbuild% LSS 10240 set KMS=1
|
|
||||||
|
|
||||||
:: Check Windows Server version
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" set KMS=1
|
|
||||||
|
|
||||||
:: 171=EnterpriseG, 172=EnterpriseGN, 183=CloudE
|
|
||||||
for %%# in (171 172 183) do (if %osSKU%==%%# set KMS=1)
|
|
||||||
|
|
||||||
:: Check Enterprise LTSC 2019/2021 N
|
|
||||||
if %osSKU%==126 (echo %winos% | findstr /i "2019 2021" 1>nul && set KMS=1)
|
|
||||||
|
|
||||||
if defined KMS (
|
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
|
||||||
) else (
|
|
||||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
|
||||||
)
|
|
||||||
|
|
||||||
if %Renewal_And_Activation_Task% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||||
if %Desktop_context_menu% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /dcm
|
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
||||||
|
|
||||||
cd \
|
cd \
|
||||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
@ -445,29 +370,18 @@ call :kmsprep2
|
||||||
|
|
||||||
if defined _error goto errorfound
|
if defined _error goto errorfound
|
||||||
if defined _kerror goto errorfound
|
if defined _kerror goto errorfound
|
||||||
set "_oem=KMS38 [Fallback to] Online KMS"
|
set "_oem=KMS38 [Windows] + Online KMS [Office]"
|
||||||
goto done
|
goto done
|
||||||
|
|
||||||
:kms38_kms_setup:
|
:kms38_kms_setup:
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
============================================================================
|
fltmc >nul || exit /b
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS Renewal And Activation Task
|
|
||||||
set Renewal_And_Activation_Task=1
|
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS activation desktop context menu
|
|
||||||
set Desktop_context_menu=1
|
|
||||||
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
|
||||||
|
|
||||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
||||||
|
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||||
if %Renewal_And_Activation_Task% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
||||||
if %Desktop_context_menu% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /dcm
|
|
||||||
|
|
||||||
cd \
|
cd \
|
||||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||||
|
@ -475,78 +389,6 @@ cd \
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:hwid_kms38_kms
|
|
||||||
|
|
||||||
cls
|
|
||||||
call :prep
|
|
||||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
|
||||||
call :kms38prep
|
|
||||||
call :kmsprep
|
|
||||||
call :pop_d
|
|
||||||
call :export hwid_kms38_kms_setup
|
|
||||||
|
|
||||||
call :kms38prep2
|
|
||||||
call :kmsprep2
|
|
||||||
If not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
|
||||||
|
|
||||||
if defined _error goto errorfound
|
|
||||||
if defined _kerror goto errorfound
|
|
||||||
set "_oem=HWID [Fallback to] KMS38 [Fallback to] Online KMS"
|
|
||||||
goto done
|
|
||||||
|
|
||||||
:hwid_kms38_kms_setup:
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS Renewal And Activation Task
|
|
||||||
set Renewal_And_Activation_Task=1
|
|
||||||
|
|
||||||
:: Change value from 1 to 0 to disable KMS activation desktop context menu
|
|
||||||
set Desktop_context_menu=1
|
|
||||||
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
reg query HKU\S-1-5-19 1>nul 2>nul || exit /b
|
|
||||||
|
|
||||||
set KMS=
|
|
||||||
set KMS38=
|
|
||||||
set osSKU=0
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "osSKU=%%a"
|
|
||||||
|
|
||||||
:: Check Windows 10 install
|
|
||||||
if %winbuild% LSS 10240 set KMS=1
|
|
||||||
|
|
||||||
:: Check Windows Server version
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" set KMS38=1
|
|
||||||
|
|
||||||
:: 171=EnterpriseG, 172=EnterpriseGN, 183=CloudE
|
|
||||||
for %%# in (171 172 183) do (if %osSKU%==%%# set KMS38=1)
|
|
||||||
|
|
||||||
:: Check Enterprise LTSC 2019/2021 N
|
|
||||||
if %osSKU%==126 (echo %winos% | findstr /i "2019 2021" 1>nul && set KMS38=1)
|
|
||||||
|
|
||||||
if defined KMS38 set KMS=1
|
|
||||||
|
|
||||||
if defined KMS (
|
|
||||||
if defined KMS38 (start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a)
|
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
|
||||||
) else (
|
|
||||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
|
||||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
|
||||||
)
|
|
||||||
|
|
||||||
if %Renewal_And_Activation_Task% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
|
||||||
if %Desktop_context_menu% EQU 1 start /b /wait cmd /c "%~dp0Activate.cmd" /dcm
|
|
||||||
|
|
||||||
cd \
|
|
||||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
|
||||||
:hwid_kms38_kms_setup:
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:errorfound
|
:errorfound
|
||||||
|
|
||||||
%eline%
|
%eline%
|
||||||
|
@ -575,17 +417,12 @@ exit /b
|
||||||
pushd "!desktop!"
|
pushd "!desktop!"
|
||||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||||
pushd "!_work!"
|
pushd "!_work!"
|
||||||
pushd ..
|
|
||||||
pushd ..
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:hwidprep
|
:hwidprep
|
||||||
|
|
||||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
||||||
copy /y /b "%slc.dll%" "!_dir!\BIN\slc.dll" %nul%
|
|
||||||
copy /y /b "%arm64_gatherosstate.exe%" "!_dir!\BIN\arm64_gatherosstate.exe" %nul%
|
|
||||||
copy /y /b "%arm64_slc.dll%" "!_dir!\BIN\arm64_slc.dll" %nul%
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:kms38prep
|
:kms38prep
|
||||||
|
@ -593,9 +430,6 @@ exit /b
|
||||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||||
copy /y /b "%ClipUp.exe%" "!_dir!\BIN\ClipUp.exe" %nul%
|
copy /y /b "%ClipUp.exe%" "!_dir!\BIN\ClipUp.exe" %nul%
|
||||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
||||||
copy /y /b "%slc.dll%" "!_dir!\BIN\slc.dll" %nul%
|
|
||||||
copy /y /b "%arm64_gatherosstate.exe%" "!_dir!\BIN\arm64_gatherosstate.exe" %nul%
|
|
||||||
copy /y /b "%arm64_slc.dll%" "!_dir!\BIN\arm64_slc.dll" %nul%
|
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
:kmsprep
|
:kmsprep
|
||||||
|
@ -613,9 +447,6 @@ pushd "!_dir!\"
|
||||||
for %%# in (
|
for %%# in (
|
||||||
HWID_Activation.cmd
|
HWID_Activation.cmd
|
||||||
BIN\gatherosstate.exe
|
BIN\gatherosstate.exe
|
||||||
BIN\slc.dll
|
|
||||||
BIN\arm64_gatherosstate.exe
|
|
||||||
BIN\arm64_slc.dll
|
|
||||||
SetupComplete.cmd
|
SetupComplete.cmd
|
||||||
) do (
|
) do (
|
||||||
if not exist "%%#" set _error=1
|
if not exist "%%#" set _error=1
|
||||||
|
@ -632,9 +463,6 @@ for %%# in (
|
||||||
KMS38_Activation.cmd
|
KMS38_Activation.cmd
|
||||||
BIN\ClipUp.exe
|
BIN\ClipUp.exe
|
||||||
BIN\gatherosstate.exe
|
BIN\gatherosstate.exe
|
||||||
BIN\slc.dll
|
|
||||||
BIN\arm64_gatherosstate.exe
|
|
||||||
BIN\arm64_slc.dll
|
|
||||||
SetupComplete.cmd
|
SetupComplete.cmd
|
||||||
) do (
|
) do (
|
||||||
if not exist "%%#" set _error=1
|
if not exist "%%#" set _error=1
|
||||||
|
@ -660,8 +488,6 @@ exit /b
|
||||||
|
|
||||||
:pop_d
|
:pop_d
|
||||||
|
|
||||||
popd
|
|
||||||
popd
|
|
||||||
popd
|
popd
|
||||||
popd
|
popd
|
||||||
exit /b
|
exit /b
|
||||||
|
@ -672,7 +498,7 @@ exit /b
|
||||||
|
|
||||||
:export
|
:export
|
||||||
|
|
||||||
%nul% %_psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\SetupComplete.cmd',$f[1].Trim(),[System.Text.Encoding]::ASCII);"
|
%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\SetupComplete.cmd',$f[1].Trim(),[System.Text.Encoding]::ASCII);"
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -682,7 +508,7 @@ exit /b
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
echo %esc%[%~1%~2%esc%[0m
|
||||||
) else (
|
) else (
|
||||||
if not exist %_psc% (echo %~3) else (%_psc% write-host -back '%1' -fore '%2' '%3')
|
if not exist %psc% (echo %~3) else (%psc% write-host -back '%1' -fore '%2' '%3')
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -691,7 +517,7 @@ exit /b
|
||||||
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 (
|
||||||
if not exist %_psc% (echo %~3%~6) else (%_psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6')
|
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
|
||||||
|
|
|
@ -1,830 +0,0 @@
|
||||||
@setlocal DisableDelayedExpansion
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::============================================================================
|
|
||||||
::
|
|
||||||
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
|
||||||
::
|
|
||||||
:: Homepage: windowsaddict.ml
|
|
||||||
:: Email: windowsaddict@protonmail.com
|
|
||||||
::
|
|
||||||
::============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 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 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
|
||||||
|
|
||||||
set "SysPath=%SystemRoot%\System32"
|
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
color 07
|
|
||||||
title Activation Troubleshoot
|
|
||||||
|
|
||||||
set _elev=
|
|
||||||
if /i "%~1"=="-el" set _elev=1
|
|
||||||
|
|
||||||
set winbuild=1
|
|
||||||
set "nul=>nul 2>&1"
|
|
||||||
set "_psc=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
|
|
||||||
set _NCS=1
|
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
|
||||||
|
|
||||||
call :_colorprep
|
|
||||||
|
|
||||||
set slp=SoftwareLicensingProduct
|
|
||||||
set sls=SoftwareLicensingService
|
|
||||||
set ospp=OfficeSoftwareProtectionProduct
|
|
||||||
set wApp=55c92734-d682-4d71-983e-d6ec3f16059f
|
|
||||||
set cbs_log=%SystemRoot%\logs\cbs\cbs.log
|
|
||||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
|
||||||
set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:"
|
|
||||||
set "line=_________________________________________________________________________________________________"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
|
||||||
%nceline%
|
|
||||||
echo Unsupported OS version detected.
|
|
||||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
|
||||||
goto at_done
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist %_psc% (
|
|
||||||
%nceline%
|
|
||||||
echo Powershell is not installed in the system.
|
|
||||||
echo Aborting...
|
|
||||||
goto at_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
|
||||||
|
|
||||||
set "_batf=%~f0"
|
|
||||||
set "_batp=%_batf:'=''%"
|
|
||||||
|
|
||||||
set "_PSarg="""%~f0""" -el %_args%"
|
|
||||||
|
|
||||||
set "_ttemp=%temp%"
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
|
||||||
%nceline%
|
|
||||||
echo Script is launched from the temp folder,
|
|
||||||
echo Most likely you are running the script directly from the archive file.
|
|
||||||
echo:
|
|
||||||
echo Extract the archive file and launch the script from the extracted folder.
|
|
||||||
goto at_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
|
||||||
|
|
||||||
%nul% reg query HKU\S-1-5-19 || (
|
|
||||||
if not defined _elev %nul% %_psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
|
||||||
%nceline%
|
|
||||||
echo This script require administrator privileges.
|
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
|
||||||
goto at_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
setlocal DisableDelayedExpansion
|
|
||||||
|
|
||||||
:: Check desktop location
|
|
||||||
|
|
||||||
set desktop=
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
|
|
||||||
if not defined desktop for /f "delims=" %%a in ('%_psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
|
|
||||||
|
|
||||||
if not defined desktop (
|
|
||||||
%eline%
|
|
||||||
echo Desktop location was not detected, aborting...
|
|
||||||
goto at_done
|
|
||||||
)
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
color 07
|
|
||||||
title Activation Troubleshoot
|
|
||||||
mode con cols=77 lines=30
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo:
|
|
||||||
echo:
|
|
||||||
echo: _______________________________________________________________
|
|
||||||
echo:
|
|
||||||
echo: [1] Troubleshoot ReadMe - HWID
|
|
||||||
echo: [2] Troubleshoot ReadMe - KMS38
|
|
||||||
echo: [3] Troubleshoot ReadMe - Online KMS
|
|
||||||
echo: ___________________________________________________
|
|
||||||
echo:
|
|
||||||
echo: [4] Dism RestoreHealth
|
|
||||||
echo: [5] SFC Scannow
|
|
||||||
echo:
|
|
||||||
echo: [6] Windows Rearm - Specific SKU ID
|
|
||||||
echo: [7] Office Rearm - Specific KMS SKU ID
|
|
||||||
echo:
|
|
||||||
echo: [8] Clean ClipSVC Licences
|
|
||||||
echo: [9] Rebuild Licensing Tokens
|
|
||||||
echo:
|
|
||||||
echo: [F] Office License Is Not Genuine - Notification
|
|
||||||
echo:
|
|
||||||
echo: [0] Exit
|
|
||||||
echo: _______________________________________________________________
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
|
|
||||||
choice /C:123456789F0 /N
|
|
||||||
set _erl=%errorlevel%
|
|
||||||
|
|
||||||
if %_erl%==11 exit /b
|
|
||||||
if %_erl%==10 start https://windowsaddict.ml/office-license-is-not-genuine &goto at_menu
|
|
||||||
if %_erl%==9 goto:retokens
|
|
||||||
if %_erl%==8 goto:cleanclipsvc
|
|
||||||
if %_erl%==7 goto:officerearm
|
|
||||||
if %_erl%==6 goto:rearmwin
|
|
||||||
if %_erl%==5 goto:sfcscan
|
|
||||||
if %_erl%==4 goto:dism_rest
|
|
||||||
if %_erl%==3 start https://windowsaddict.ml/readme-troubleshoot-onlinekms.html &goto at_menu
|
|
||||||
if %_erl%==2 start https://windowsaddict.ml/readme-troubleshoot-kms38.html &goto at_menu
|
|
||||||
if %_erl%==1 start https://windowsaddict.ml/readme-troubleshoot-hwid.html &goto at_menu
|
|
||||||
goto :at_menu
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:dism_rest
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title Dism /Online /Cleanup-Image /RestoreHealth
|
|
||||||
|
|
||||||
if %winbuild% LSS 9200 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version Detected.
|
|
||||||
echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent.
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
set _int=
|
|
||||||
for %%a in (dns.msftncsi.com,www.microsoft.com,one.one.one.one,resolver1.opendns.com) do (
|
|
||||||
if not defined _int (for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do if not [%%#]==[] set _int=1))
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if defined _int (
|
|
||||||
echo Checking Internet Connection [Connected]
|
|
||||||
) else (
|
|
||||||
call :_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Dism uses Windows Update to provide the files required to fix corruption.
|
|
||||||
echo This will take 5-15 minutes or more..
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Notes:
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Gray% "Make sure the Internet is connected."
|
|
||||||
call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properly working."
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 110, 30
|
|
||||||
echo:
|
|
||||||
|
|
||||||
call :_stopservice TrustedInstaller
|
|
||||||
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
|
||||||
|
|
||||||
set _time=
|
|
||||||
for /f %%a in ('%_psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
|
||||||
echo:
|
|
||||||
echo Applying the command,
|
|
||||||
echo dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
|
|
||||||
echo:
|
|
||||||
dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4
|
|
||||||
|
|
||||||
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
|
|
||||||
copy /y /b "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" "!desktop!\AT_Logs\RHealth_DISM_%_time%.txt" %nul%
|
|
||||||
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\RHealth_CBS_%_time%.txt" %nul%
|
|
||||||
del /f /q "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" %nul%
|
|
||||||
|
|
||||||
echo:
|
|
||||||
call :_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on the dekstop."
|
|
||||||
goto :at_back
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:sfcscan
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title sfc /scannow
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo System File Checker will repair missing or corrupted system files.
|
|
||||||
echo This will take 10-15 minutes or more..
|
|
||||||
echo:
|
|
||||||
echo If SFC could not fix something, then run the command again to see if it may be able
|
|
||||||
echo to the next time. Sometimes it may take running the sfc /scannow command 3 times
|
|
||||||
echo restarting the PC after each time to completely fix everything that it's able to.
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
echo:
|
|
||||||
|
|
||||||
call :_stopservice TrustedInstaller
|
|
||||||
del /s /f /q "%SystemRoot%\logs\cbs\*.*"
|
|
||||||
|
|
||||||
set _time=
|
|
||||||
for /f %%a in ('%_psc% "Get-Date -format HH_mm_ss"') do set _time=%%a
|
|
||||||
echo:
|
|
||||||
echo Applying the command,
|
|
||||||
echo sfc /scannow
|
|
||||||
echo:
|
|
||||||
sfc /scannow
|
|
||||||
|
|
||||||
if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
|
|
||||||
|
|
||||||
copy /y /b "%cbs_log%" "!desktop!\AT_Logs\SFC_CBS_%_time%.txt" %nul%
|
|
||||||
findstr /i /c:"[SR]" %cbs_log% | findstr /i /v /c:verify >"!desktop!\AT_Logs\SFC_Main_%_time%.txt"
|
|
||||||
|
|
||||||
echo:
|
|
||||||
call :_color %Gray% "CBS and main extracted logs are copied to the AT_Logs folder on the dekstop."
|
|
||||||
goto :at_back
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:rearmwin
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title Windows Rearm - Specific SKU ID
|
|
||||||
|
|
||||||
if %winbuild% LSS 9600 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version Detected.
|
|
||||||
echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent.
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Notes:
|
|
||||||
echo:
|
|
||||||
echo - Rearm helps in troubleshooting activation issues.
|
|
||||||
echo:
|
|
||||||
echo - Windows KMS activation will reset.
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 105, 30
|
|
||||||
echo:
|
|
||||||
echo:
|
|
||||||
set app=
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
if %winbuild% LSS 22483 for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%wApp%' and PartialProductKey is not NULL) get ID /VALUE" 2^>nul') do call set "app=%%a"
|
|
||||||
if %winbuild% GEQ 22483 for /f "tokens=2 delims==" %%a in ('%_psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%wApp%'' AND PartialProductKey IS NOT NULL').Get()).ID | %% {echo ('ID='+$_)}" 2^>nul') do call set "app=%%a"
|
|
||||||
|
|
||||||
if defined app (
|
|
||||||
if %winbuild% LSS 22483 for /f "tokens=2 delims==" %%x in ('"wmic path %slp% where ID='%app%' get Name /VALUE" 2^>nul') do echo Rearming: %%x
|
|
||||||
if %winbuild% GEQ 22483 for /f "tokens=2 delims==" %%x in ('%_psc% "(([WMISEARCHER]'SELECT Name FROM %slp% WHERE ID=''%app%''').Get()).Name | %% {echo ('Name='+$_)}" 2^>nul') do echo Rearming: %%x
|
|
||||||
echo:
|
|
||||||
echo Applying the command,
|
|
||||||
if %winbuild% LSS 22483 (
|
|
||||||
echo wmic path %slp% where ID='%app%' call ReArmsku
|
|
||||||
wmic path %slp% where ID='%app%' call ReArmsku %nul%
|
|
||||||
)
|
|
||||||
if %winbuild% GEQ 22483 (
|
|
||||||
echo Powershell "$null=([WMI]'%slp%=''%app%''').ReArmsku()"
|
|
||||||
%_psc% "$null=([WMI]'%slp%=''%app%''').ReArmsku()" %nul%
|
|
||||||
)
|
|
||||||
if !errorlevel!==0 (
|
|
||||||
call :_color %Green% "[Successful]"
|
|
||||||
) else (
|
|
||||||
call :_color %Red% "[Failed]"
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
call :_color %Red% "Error- Activation ID not found"
|
|
||||||
)
|
|
||||||
|
|
||||||
goto :at_back
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:officerearm
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title Office Rearm - Specific KMS SKU ID
|
|
||||||
|
|
||||||
if %winbuild% LSS 9600 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version Detected.
|
|
||||||
echo This command is supported only for Windows 8/8.1/10/11 and their Server equivalent.
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Notes:
|
|
||||||
echo:
|
|
||||||
echo - Rearm helps in troubleshooting activation issues.
|
|
||||||
echo:
|
|
||||||
echo - Office KMS activation will reset.
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Gray% "Office rearm can be applied only a certain number of times."
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 105, 30
|
|
||||||
echo:
|
|
||||||
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
call :getapplist %slp%
|
|
||||||
|
|
||||||
if defined applist (
|
|
||||||
for %%# in (%applist%) do (
|
|
||||||
echo:
|
|
||||||
if %winbuild% LSS 22483 for /f "tokens=2 delims==" %%x in ('"wmic path %slp% where ID='%%#' get Name /VALUE" 2^>nul') do echo Rearming: %%x
|
|
||||||
if %winbuild% GEQ 22483 for /f "tokens=2 delims==" %%x in ('%_psc% "(([WMISEARCHER]'SELECT Name FROM %slp% WHERE ID=''%%#''').Get()).Name | %% {echo ('Name='+$_)}" 2^>nul') do echo Rearming: %%x
|
|
||||||
echo:
|
|
||||||
echo Applying the command,
|
|
||||||
if %winbuild% LSS 22483 (
|
|
||||||
echo wmic path %slp% where ID='%%#' call ReArmsku
|
|
||||||
wmic path %slp% where ID='%%#' call ReArmsku %nul%
|
|
||||||
)
|
|
||||||
if %winbuild% GEQ 22483 (
|
|
||||||
echo Powershell "$null=([WMI]'%slp%=''%%#''').ReArmsku()"
|
|
||||||
%_psc% "$null=([WMI]'%slp%=''%%#''').ReArmsku()" %nul%
|
|
||||||
)
|
|
||||||
if !errorlevel!==0 (
|
|
||||||
call :_color %Green% "[Successful]"
|
|
||||||
) else (
|
|
||||||
call :_color %Red% "[Failed]"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
echo:
|
|
||||||
echo Checking: Volume version of Office 2013-2021 is not found.
|
|
||||||
)
|
|
||||||
|
|
||||||
call :getapplist %ospp%
|
|
||||||
|
|
||||||
if defined applist (
|
|
||||||
if %winbuild% LSS 9200 (set _off=Office) else (set _off=Office 2010)
|
|
||||||
echo:
|
|
||||||
echo Skipping the Rearm of OSPP based '!_off!'
|
|
||||||
)
|
|
||||||
|
|
||||||
goto :at_back
|
|
||||||
|
|
||||||
:getapplist
|
|
||||||
|
|
||||||
set applist=
|
|
||||||
if %winbuild% LSS 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %1 where (Name like '%%office%%' and Description like '%%KMSCLIENT%%' and PartialProductKey is not NULL) get ID /VALUE" 2^>nul')"
|
|
||||||
if %winbuild% GEQ 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('%_psc% "(([WMISEARCHER]'SELECT ID FROM %1 WHERE Name like ''%%office%%'' and Description like ''%%KMSCLIENT%%'' and PartialProductKey is not NULL').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:retokens
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title Rebuild Licensing Tokens ^& Re-install System License Files
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Notes:
|
|
||||||
echo:
|
|
||||||
echo - Rebuild Licensing Tokens ^& Re-install System License Files
|
|
||||||
echo It helps in troubleshooting activation issues.
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Gray% "Windows and Office activation may reset, you may need to activate them again."
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Magenta% "This option will uninstall Office licenses and keys."
|
|
||||||
call :_color2 %_White% " " %Magenta% "Installed Office will need to repair itself ones upon opening an office app,"
|
|
||||||
call :_color2 %_White% " " %Magenta% "you may also need to repair Office from Apps and Features in Windows Settings."
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Gray% "Script is designed to skip rebuilding tokens where products may not be able to"
|
|
||||||
call :_color2 %_White% " " %Gray% "restore their license."
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Red% "Apply it only when it is necessary."
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:24 /N /M "> [4] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
|
|
||||||
set nosup=
|
|
||||||
set 68=HKLM\SOFTWARE\Microsoft\Office
|
|
||||||
set 86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
|
|
||||||
|
|
||||||
%nul% reg query %68%\16.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2016 MSI x86-x64
|
|
||||||
%nul% reg query %86%\16.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2016 MSI x86
|
|
||||||
%nul% reg query %68%\15.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2013 MSI x86-x64
|
|
||||||
%nul% reg query %86%\15.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2013 MSI x86
|
|
||||||
%nul% reg query %68%\14.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2010 MSI x86-x64
|
|
||||||
%nul% reg query %86%\14.0\Common\InstallRoot /v Path && set nosup=1 REM Office 2010 MSI x86
|
|
||||||
%nul% reg query %68%\14.0\CVH /f Click2run /k && set nosup=1 REM Office 2010 C2R x86-x64
|
|
||||||
%nul% reg query %86%\14.0\CVH /f Click2run /k && set nosup=1 REM Office 2010 C2R x86
|
|
||||||
|
|
||||||
if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %nul% && (
|
|
||||||
dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set nosup=1 REM Office UWP x86-x64
|
|
||||||
dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set nosup=1 REM Office UWP x86
|
|
||||||
)
|
|
||||||
|
|
||||||
sc qc osppsvc %nul% && (
|
|
||||||
if %winbuild% LSS 9200 (set _off=Office) else (set _off=Office 2010)
|
|
||||||
echo:
|
|
||||||
echo Skipping rebuilding OSPP tokens for detected '!_off!'
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if defined nosup (
|
|
||||||
echo Detected Office may not be able to repair itself, hence skipping SPP tokens rebuilding...
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
|
|
||||||
call :at_permcheck Office
|
|
||||||
if defined _perm (
|
|
||||||
echo Office is permanently activated, token rebuilding may deactivate it, hence skipping...
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
|
||||||
call :at_permcheck Windows
|
|
||||||
if defined _perm (
|
|
||||||
echo Windows is permanently activated, token rebuilding may deactivate it, hence skipping...
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
set token=
|
|
||||||
for %%# in (
|
|
||||||
%Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat
|
|
||||||
%Systemdrive%\Windows\System32\spp\store\tokens.dat
|
|
||||||
%Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat
|
|
||||||
%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat
|
|
||||||
) do if exist %%# set token=%%#
|
|
||||||
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
call :_color %Gray% "Rebuilding SoftwareProtectionPlatform tokens.dat"
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
|
|
||||||
if not exist "%token%" (
|
|
||||||
%eline%
|
|
||||||
echo tokens.dat file not found.
|
|
||||||
echo Restart the system and try again.
|
|
||||||
goto :at_back
|
|
||||||
) else (
|
|
||||||
echo Detected tokens.dat file [%token%]
|
|
||||||
)
|
|
||||||
|
|
||||||
echo Stopping sppsvc service...
|
|
||||||
call :_stopservice sppsvc
|
|
||||||
|
|
||||||
:: data.dat and cache files are not deleted since doing that may corrupt the office license in a way that only reinstallation can fix
|
|
||||||
|
|
||||||
del /f /q %token% %nul%
|
|
||||||
if exist %token% (
|
|
||||||
call :_stopservice sppsvc
|
|
||||||
del /f /q %token% %nul%
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if exist %token% (
|
|
||||||
call :_color %Red% "Failed to delete the tokens.dat file."
|
|
||||||
) else (
|
|
||||||
echo tokens.dat file was successfully deleted.
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Reinstalling System Licenses [slmgr /rilc]...
|
|
||||||
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% && (
|
|
||||||
echo [Successful]
|
|
||||||
) || (
|
|
||||||
call :_color %Red% "[Failed]"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if exist %token% (
|
|
||||||
call :_color %Green% "tokens.dat file was rebuilt successfully."
|
|
||||||
) else (
|
|
||||||
call :_color %Red% "Failed to rebuilt tokens.dat file."
|
|
||||||
)
|
|
||||||
|
|
||||||
goto :at_back
|
|
||||||
|
|
||||||
:at_permcheck
|
|
||||||
|
|
||||||
set _perm=
|
|
||||||
if %winbuild% LSS 22483 wmic path %slp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL) get Name /value 2>nul | findstr /i "%1" 1>nul && set _perm=1||set _perm=
|
|
||||||
if %winbuild% GEQ 22483 %_psc% "(([WMISEARCHER]'SELECT Name FROM %slp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name | %% {echo ('Name='+$_)}" 2>nul | findstr /i "%1" 1>nul && set _perm=1||set _perm=
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:cleanclipsvc
|
|
||||||
|
|
||||||
cls
|
|
||||||
mode 98, 30
|
|
||||||
title Clean ClipSVC Licences
|
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version Detected.
|
|
||||||
echo This command is supported only for Windows 10/11 and their Server equivalent..
|
|
||||||
goto :at_back
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
echo Notes:
|
|
||||||
echo:
|
|
||||||
echo - Cleaning ClipSVC Licences helps in troubleshooting HWID-KMS38 activation issues.
|
|
||||||
echo:
|
|
||||||
call :_color2 %_White% " - " %Gray% "All installed HWID-KMS38 licences will be cleaned from the system."
|
|
||||||
echo This will remove KMS38 license from the system but HWID license can't be removed.
|
|
||||||
echo:
|
|
||||||
echo - System restart is recommended after applying it.
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
|
||||||
if %errorlevel%==1 goto at_menu
|
|
||||||
|
|
||||||
cls
|
|
||||||
echo:
|
|
||||||
|
|
||||||
echo Stopping ClipSVC service...
|
|
||||||
call :_stopservice ClipSVC
|
|
||||||
timeout /t 2 %nul%
|
|
||||||
|
|
||||||
:: Thanks to @mspaintmsi for informing this command info
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Applying the command to Clean ClipSVC Licences...
|
|
||||||
echo rundll32 clipc.dll,ClipCleanUpState
|
|
||||||
|
|
||||||
rundll32 clipc.dll,ClipCleanUpState
|
|
||||||
|
|
||||||
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" %nul%
|
|
||||||
|
|
||||||
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
|
|
||||||
call :_color %Red% "[Failed]"
|
|
||||||
) else (
|
|
||||||
call :_color %Green% "[Successful]"
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after
|
|
||||||
:: system restart. It needs to be deleted to activate the system without restart.
|
|
||||||
|
|
||||||
set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState"
|
|
||||||
|
|
||||||
call :regown "%RegKey%" %nul%
|
|
||||||
reg delete "%RegKey%" /f %nul%
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Deleting a Volatile ^& Protected Registry Key...
|
|
||||||
echo [%RegKey%]
|
|
||||||
reg query "%RegKey%" %nul% && (
|
|
||||||
call :_color %Red% "[Failed]"
|
|
||||||
echo Restart the system, that will delete this registry key automatically.
|
|
||||||
) || (
|
|
||||||
call :_color %Green% "[Successful]"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Restarting [ClipSVC wlidsvc LicenseManager sppsvc] services...
|
|
||||||
for %%# in (ClipSVC wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:at_back
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo %line%
|
|
||||||
echo:
|
|
||||||
call :_color %_Yellow% "Press any key to go back..."
|
|
||||||
pause >nul
|
|
||||||
goto :at_menu
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:at_done
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Press any key to exit...
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:_stopservice
|
|
||||||
|
|
||||||
for %%# in (%1) do (
|
|
||||||
sc query %%# | find /i "STOPPED" %nul% || net stop %%# /y %nul%
|
|
||||||
sc query %%# | find /i "STOPPED" %nul% || sc stop %%# %nul%
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================\
|
|
||||||
|
|
||||||
:: A lean and mean snippet to set registry ownership and permission recursively
|
|
||||||
:: Written by @AveYo aka @BAU
|
|
||||||
:: pastebin.com/XTPt0JSC
|
|
||||||
|
|
||||||
:: Modified by @abbodi1406 to make it work in ARM64 Windows 10 (builds older than 21277) where only x86 version of PowerShell is installed.
|
|
||||||
|
|
||||||
:regown
|
|
||||||
|
|
||||||
%_psc% $A='%~1','%~2','%~3','%~4','%~5','%~6';iex(([io.file]::ReadAllText('!_batp!')-split':Own1\:.*')[1])&exit/b:Own1:
|
|
||||||
$D1=[uri].module.gettype('System.Diagnostics.Process')."GetM`ethods"(42) |where {$_.Name -eq 'SetPrivilege'} #`:no-ev-warn
|
|
||||||
'SeSecurityPrivilege','SeTakeOwnershipPrivilege','SeBackupPrivilege','SeRestorePrivilege'|foreach {$D1.Invoke($null, @("$_",2))}
|
|
||||||
$path=$A[0]; $rk=$path-split'\\',2; switch -regex ($rk[0]){'[mM]'{$hv=2147483650};'[uU]'{$hv=2147483649};default{$hv=2147483648};}
|
|
||||||
$HK=[Microsoft.Win32.RegistryKey]::OpenBaseKey($hv, 256); $s=$A[1]; $sps=[Security.Principal.SecurityIdentifier]
|
|
||||||
$u=($A[2],'S-1-5-32-544')[!$A[2]];$o=($A[3],$u)[!$A[3]];$w=$u,$o |% {new-object $sps($_)}; $old=!$A[3];$own=!$old; $y=$s-eq'all'
|
|
||||||
$rar=new-object Security.AccessControl.RegistryAccessRule( $w[0], ($A[5],'FullControl')[!$A[5]], 1, 0, ($A[4],'Allow')[!$A[4]] )
|
|
||||||
$x=$s-eq'none';function Own1($k){$t=$HK.OpenSubKey($k,2,'TakeOwnership');if($t){0,4|%{try{$o=$t.GetAccessControl($_)}catch{$old=0}
|
|
||||||
};if($old){$own=1;$w[1]=$o.GetOwner($sps)};$o.SetOwner($w[0]);$t.SetAccessControl($o); $c=$HK.OpenSubKey($k,2,'ChangePermissions')
|
|
||||||
$p=$c.GetAccessControl(2);if($y){$p.SetAccessRuleProtection(1,1)};$p.ResetAccessRule($rar);if($x){$p.RemoveAccessRuleAll($rar)}
|
|
||||||
$c.SetAccessControl($p);if($own){$o.SetOwner($w[1]);$t.SetAccessControl($o)};if($s){$($subkeys=$HK.OpenSubKey($k).GetSubKeyNames()) 2>$null;
|
|
||||||
foreach($n in $subkeys){Own1 "$k\$n"}}}};Own1 $rk[1];if($env:VO){get-acl Registry::$path|fl} #:Own1: lean & mean snippet by AveYo
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:_color
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
|
||||||
) else (
|
|
||||||
call :batcol %~1 "%~2"
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:_color2
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
|
|
||||||
) else (
|
|
||||||
call :batcol %~1 "%~2" %~3 "%~4"
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::=======================================
|
|
||||||
|
|
||||||
:: Colored text with pure batch method
|
|
||||||
:: Thanks to @dbenham and @jeb
|
|
||||||
:: stackoverflow.com/a/10407642
|
|
||||||
|
|
||||||
:batcol
|
|
||||||
|
|
||||||
pushd %_coltemp%
|
|
||||||
if not exist "'" (<nul >"'" set /p "=.")
|
|
||||||
setlocal
|
|
||||||
set "s=%~2"
|
|
||||||
set "t=%~4"
|
|
||||||
call :_batcol %1 s %3 t
|
|
||||||
del /f /q "'"
|
|
||||||
del /f /q "`.txt"
|
|
||||||
popd
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:_batcol
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
set "s=!%~2!"
|
|
||||||
set "t=!%~4!"
|
|
||||||
for /f delims^=^ eol^= %%i in ("!s!") do (
|
|
||||||
if "!" equ "" setlocal DisableDelayedExpansion
|
|
||||||
>`.txt (echo %%i\..\')
|
|
||||||
findstr /a:%~1 /f:`.txt "."
|
|
||||||
<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 (
|
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
|
||||||
|
|
||||||
set "Red="41;97m""
|
|
||||||
set "Gray="100;97m""
|
|
||||||
set "Black="30m""
|
|
||||||
set "Green="42;97m""
|
|
||||||
set "Blue="44;97m""
|
|
||||||
set "Yellow="43;97m""
|
|
||||||
set "Magenta="45;97m""
|
|
||||||
|
|
||||||
set "_Red="40;91m""
|
|
||||||
set "_Green="40;92m""
|
|
||||||
set "_Blue="40;94m""
|
|
||||||
set "_White="40;37m""
|
|
||||||
set "_Yellow="40;93m""
|
|
||||||
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "_BS=%%A %%A"
|
|
||||||
set "_coltemp=%SystemRoot%\Temp"
|
|
||||||
|
|
||||||
set "Red="CF""
|
|
||||||
set "Gray="8F""
|
|
||||||
set "Black="00""
|
|
||||||
set "Green="2F""
|
|
||||||
set "Blue="1F""
|
|
||||||
set "Yellow="6F""
|
|
||||||
set "Magenta="5F""
|
|
||||||
|
|
||||||
set "_Red="0C""
|
|
||||||
set "_Green="0A""
|
|
||||||
set "_Blue="09""
|
|
||||||
set "_White="07""
|
|
||||||
set "_Yellow="0E""
|
|
||||||
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
|
@ -1,434 +0,0 @@
|
||||||
@setlocal DisableDelayedExpansion
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::============================================================================
|
|
||||||
::
|
|
||||||
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
|
||||||
::
|
|
||||||
:: Homepage: windowsaddict.ml
|
|
||||||
:: Email: windowsaddict@protonmail.com
|
|
||||||
::
|
|
||||||
::============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 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 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
|
||||||
|
|
||||||
set "SysPath=%SystemRoot%\System32"
|
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
color 07
|
|
||||||
title Change Windows 10-11 Edition
|
|
||||||
|
|
||||||
set _elev=
|
|
||||||
if /i "%~1"=="-el" set _elev=1
|
|
||||||
|
|
||||||
set winbuild=1
|
|
||||||
set "nul=>nul 2>&1"
|
|
||||||
set "_psc=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
|
|
||||||
set _NCS=1
|
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
|
||||||
set "Red="41;97m""
|
|
||||||
set "Gray="100;97m""
|
|
||||||
set "Green="42;97m""
|
|
||||||
set "Magenta="45;97m""
|
|
||||||
set "_White="40;37m""
|
|
||||||
set "_Green="40;92m""
|
|
||||||
set "_Yellow="40;93m""
|
|
||||||
) else (
|
|
||||||
set "Red="Red" "white""
|
|
||||||
set "Gray="Darkgray" "white""
|
|
||||||
set "Green="DarkGreen" "white""
|
|
||||||
set "Magenta="Darkmagenta" "white""
|
|
||||||
set "_White="Black" "Gray""
|
|
||||||
set "_Green="Black" "Green""
|
|
||||||
set "_Yellow="Black" "Yellow""
|
|
||||||
)
|
|
||||||
|
|
||||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
|
||||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
|
||||||
set slp=SoftwareLicensingProduct
|
|
||||||
set sls=SoftwareLicensingService
|
|
||||||
set wApp=55c92734-d682-4d71-983e-d6ec3f16059f
|
|
||||||
set "line=echo ___________________________________________________________________________________________"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
if %winbuild% LSS 10240 (
|
|
||||||
%eline%
|
|
||||||
echo Unsupported OS version detected.
|
|
||||||
echo Project is supported for Windows 10/11.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
if %winbuild% GEQ 22483 if not exist %_psc% (
|
|
||||||
%nceline%
|
|
||||||
echo Powershell is not installed in the system.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
|
||||||
|
|
||||||
set "_batf=%~f0"
|
|
||||||
set "_batp=%_batf:'=''%"
|
|
||||||
|
|
||||||
set "_PSarg="""%~f0""" -el %_args%"
|
|
||||||
|
|
||||||
set "_ttemp=%temp%"
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
|
||||||
%eline%
|
|
||||||
echo Script is launched from the temp folder,
|
|
||||||
echo Most likely you are running the script directly from the archive file.
|
|
||||||
echo:
|
|
||||||
echo Extract the archive file and launch the script from the extracted folder.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
|
||||||
|
|
||||||
%nul% reg query HKU\S-1-5-19 || (
|
|
||||||
if not defined _elev %nul% %_psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
|
||||||
%eline%
|
|
||||||
echo This script require administrator privileges.
|
|
||||||
echo To do so, right click on this script and select 'Run as administrator'.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
mode 98, 30
|
|
||||||
echo:
|
|
||||||
echo Initializing...
|
|
||||||
|
|
||||||
:: Check WMI and sppsvc Errors
|
|
||||||
|
|
||||||
set applist=
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
if %winbuild% LSS 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%wApp%') get ID /VALUE" 2^>nul')"
|
|
||||||
if %winbuild% GEQ 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('%_psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
|
||||||
|
|
||||||
if not defined applist (
|
|
||||||
%eline%
|
|
||||||
echo Failed running WMI query check, verify that these services are working correctly
|
|
||||||
echo Windows Management Instrumentation [WinMgmt], Software Protection [sppsvc]
|
|
||||||
echo:
|
|
||||||
echo Script will try to enable these services.
|
|
||||||
echo:
|
|
||||||
call :dk_color %_Yellow% "Press any key to continue..."
|
|
||||||
pause >nul
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\WinMgmt /v Start 2^>nul') do if /i %%b equ 0x4 (sc config WinMgmt start= auto %nul%)
|
|
||||||
net start WinMgmt /y %nul%
|
|
||||||
net stop sppsvc /y %nul%
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
cls
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Check Windows Server version
|
|
||||||
|
|
||||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
|
||||||
%eline%
|
|
||||||
echo Windows Server version is not supported.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Refresh license status, it helps to get correct product name in Windows 17134 and later builds
|
|
||||||
|
|
||||||
call :dk_refresh
|
|
||||||
|
|
||||||
:: Check Windows Edition
|
|
||||||
|
|
||||||
set osedition=
|
|
||||||
for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| find /i "Current Edition :"') do set "osedition=%%a"
|
|
||||||
|
|
||||||
cls
|
|
||||||
if "%osedition%"=="" (
|
|
||||||
%eline%
|
|
||||||
echo OS Edition was not detected properly. Aborting...
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Check product name
|
|
||||||
|
|
||||||
set winos=
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
set _target=
|
|
||||||
for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _target (set "_target=!_target! %%a") else (set "_target=%%a"))
|
|
||||||
|
|
||||||
if not defined _target (
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
call :dk_color %Gray% "Target Edition not found."
|
|
||||||
echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition.
|
|
||||||
%line%
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
call :dk_color %Gray% "You can change the Current Edition [%osedition%] to one of the following."
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
for %%# in (%_target%) do echo %%#
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit"
|
|
||||||
choice /C:21 /N
|
|
||||||
|
|
||||||
if %errorlevel%==1 exit /b
|
|
||||||
cls
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
%line%
|
|
||||||
echo:
|
|
||||||
call :dk_color %Gray% "Current Edition - [%osedition%]"
|
|
||||||
echo:
|
|
||||||
for %%# in (%_target%) do (
|
|
||||||
choice /C:NY /N /M "Do you want to change to the [%%#] edition? [Y,N] : "
|
|
||||||
if [!errorlevel!]==[2] (
|
|
||||||
set targetedition=%%#
|
|
||||||
goto ced_change
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
%line%
|
|
||||||
goto ced_done
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:ced_change
|
|
||||||
|
|
||||||
cls
|
|
||||||
set key=
|
|
||||||
set _changepk=1
|
|
||||||
|
|
||||||
call :changeeditiondata
|
|
||||||
|
|
||||||
if not defined key (
|
|
||||||
%eline%
|
|
||||||
echo [%targetedition% ^| %winbuild%]
|
|
||||||
echo Unable to find this product key in the supported product list.
|
|
||||||
if %winbuild% GTR 19044 echo Make sure you are using updated version of the script
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
%line%
|
|
||||||
|
|
||||||
:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" method and restart
|
|
||||||
:: In other cases, editions can be changed instantly with "slmgr /ipk"
|
|
||||||
|
|
||||||
if %_changepk%==1 (
|
|
||||||
echo %_chan% | find /i "OEM" >NUL && (
|
|
||||||
%eline%
|
|
||||||
echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack of non OEM keys.
|
|
||||||
echo Non-OEM keys are required to change from Core to Non-Core Editions.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
for %%a in (dns.msftncsi.com,www.microsoft.com,one.one.one.one,resolver1.opendns.com) do (
|
|
||||||
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
|
|
||||||
if not [%%#]==[] (
|
|
||||||
%eline%
|
|
||||||
echo Disconnect the Internet and then try again.
|
|
||||||
goto ced_done
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo The system will automatically reboot to complete the process.
|
|
||||||
echo:
|
|
||||||
call :dk_color %Gray% "If the upgrade Window shows an error then you can safely ignore it."
|
|
||||||
call :dk_color %Gray% "However you will need to manually reboot the system in that case."
|
|
||||||
echo:
|
|
||||||
call :dk_color %Magenta% "Important - Save your work before continue."
|
|
||||||
echo:
|
|
||||||
choice /C:21 /N /M "[1] Continue [2] Exit : "
|
|
||||||
if !errorlevel!==1 exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
echo:
|
|
||||||
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
|
||||||
echo:
|
|
||||||
|
|
||||||
if %_changepk%==0 (
|
|
||||||
echo Installing %_chan% Key [%key%]
|
|
||||||
echo:
|
|
||||||
if %winbuild% LSS 22483 wmic path %sls% where __CLASS='%sls%' call InstallProductKey ProductKey="%key%" %nul%
|
|
||||||
if %winbuild% GEQ 22483 %_psc% "(([WMISEARCHER]'SELECT Version FROM %sls%').Get()).InstallProductKey('%key%')" %nul%
|
|
||||||
if not !errorlevel!==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
|
|
||||||
|
|
||||||
if !errorlevel!==0 (
|
|
||||||
call :dk_refresh
|
|
||||||
call :dk_color %Green% "[Successful]"
|
|
||||||
echo:
|
|
||||||
call :dk_color %Gray% "Reboot is required to properly change the Edition."
|
|
||||||
) else (
|
|
||||||
%eline%
|
|
||||||
echo [Unsuccessful]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if %_changepk%==1 (
|
|
||||||
echo Applying the command with %_chan% Key
|
|
||||||
echo start changepk /productkey %key%
|
|
||||||
start changepk /productkey %key%
|
|
||||||
)
|
|
||||||
%line%
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:ced_done
|
|
||||||
|
|
||||||
echo:
|
|
||||||
call :dk_color %_Yellow% "Press any key to exit..."
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Refresh license status
|
|
||||||
|
|
||||||
:dk_refresh
|
|
||||||
|
|
||||||
if %winbuild% LSS 22483 wmic path %sls% where __CLASS='%sls%' call RefreshLicenseStatus %nul%
|
|
||||||
if %winbuild% GEQ 22483 %_psc% "$null=(([WMICLASS]'%sls%').GetInstances()).RefreshLicenseStatus()" %nul%
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:dk_color
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
|
||||||
) else (
|
|
||||||
if not exist %_psc% (echo %~3) else (%_psc% write-host -back '%1' -fore '%2' '%3')
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 1st column = Activation ID
|
|
||||||
:: 2nd column = Generic Retail/OEM/MAK/GVLK Key
|
|
||||||
:: 3rd column = SKU ID
|
|
||||||
:: 4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
|
|
||||||
:: 5th column = Key Type
|
|
||||||
:: 6th column = WMI Edition ID
|
|
||||||
:: 7th column = Version name incase same Edition ID is used in different OS versions with different key
|
|
||||||
:: Separator = _
|
|
||||||
|
|
||||||
:: Key preference is in the following order. Retail > Volume:MAK > Volume:GVLK > OEM:NONSLP > OEM:DM
|
|
||||||
:: OEM keys are in last because they can't be used in edition change if "changepk /productkey" method is needed instead of "slmgr /ipk"
|
|
||||||
:: OEM keys are listed here because we don't have other keys for that edition
|
|
||||||
|
|
||||||
:changeeditiondata
|
|
||||||
|
|
||||||
for %%# in (
|
|
||||||
2ffd8952-423e-4903-b993-72a1aa44cf82_44NYX-TKR9D-CCM2D-V6B8F-HQWWR___4_0_Volume:MAK_Enterprise
|
|
||||||
23505d51-32d6-41f0-8ca7-e78ad0f16e71_D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ__11_1_____Retail_Starter
|
|
||||||
c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN
|
|
||||||
211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN
|
|
||||||
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional
|
|
||||||
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN
|
|
||||||
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN
|
|
||||||
1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific
|
|
||||||
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage
|
|
||||||
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core
|
|
||||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro
|
|
||||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education
|
|
||||||
c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN
|
|
||||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021
|
|
||||||
97348f2f-bebc-4653-a4bd-18a895d316d9_VBX36-N7DDY-M9H62-83BMJ-CPR42_125_0_Volume:MAK_EnterpriseS_2019
|
|
||||||
2782d615-3249-495b-8260-15a4c2295448_PN3KR-JXM7T-46HM4-MCQGK-7XPJQ_125_0_Volume:MAK_EnterpriseS_2016
|
|
||||||
6366a32b-72e4-4212-bf11-c22b0e98a435_DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY_125_0_Volume:MAK_EnterpriseS_2015
|
|
||||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021
|
|
||||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019
|
|
||||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016
|
|
||||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015
|
|
||||||
a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage
|
|
||||||
f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific
|
|
||||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation
|
|
||||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN
|
|
||||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation
|
|
||||||
13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN
|
|
||||||
5f87a508-7e1c-4fab-9d45-2356c6002081_C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC_171_1_Volume:MAK_EnterpriseG
|
|
||||||
1681ae34-3080-4bfa-a1b5-6d792342e692_46PN6-R9BK9-CVHKB-HWQ9V-MBJY8_172_1_Volume:MAK_EnterpriseGN
|
|
||||||
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh
|
|
||||||
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud
|
|
||||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_0_____Retail_CloudN
|
|
||||||
c7051f63-3a76-4992-bce5-731ec0b1e825_2HN6V-HGTM8-6C97C-RK67V-JQPFD_183_1_____Retail_CloudE
|
|
||||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_0_____OEM:DM_IoTEnterprise
|
|
||||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NONSLP_IoTEnterpriseS
|
|
||||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN
|
|
||||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition
|
|
||||||
) do (
|
|
||||||
for /f "tokens=1-7 delims=_" %%A in ("%%#") do if /i %targetedition%==%%F (
|
|
||||||
|
|
||||||
if not defined key (
|
|
||||||
set 7th=%%G
|
|
||||||
if not defined 7th (
|
|
||||||
set "key=%%B" & set "_chan=%%E"
|
|
||||||
echo "!applist!" | find /i "%%A" 1>nul && set _changepk=0
|
|
||||||
) else (
|
|
||||||
echo "%winos%" | find "%%G" 1>nul && (set "key=%%B" & set "_chan=%%E" & echo "!applist!" | find /i "%%A" 1>nul && set _changepk=0)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/readme-oem-folder.html">
|
|
||||||
</html>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<html>
|
|
||||||
<meta http-equiv="refresh" content="0; url=https://windowsaddict.ml/">
|
|
||||||
</html>
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
=================================================================================
|
||||||
|
File Details:
|
||||||
|
=================================================================================
|
||||||
|
|
||||||
|
- ClipUp.exe (x64)
|
||||||
|
SHA-1: 48D928B1BEC25A56FE896C430C2C034B7866AA7A
|
||||||
|
|
||||||
|
Taken from Windows server 2016 x64 ISO
|
||||||
|
https://www.microsoft.com/en-us/evalcenter/
|
||||||
|
|
||||||
|
- gatherosstate.exe (x86)
|
||||||
|
SHA-1: FABB5A0FC1E6A372219711152291339AF36ED0B5
|
||||||
|
|
||||||
|
Taken from Windows 10 Version 1607 ADK (Section: User State Migration Tool)
|
||||||
|
https://go.microsoft.com/fwlink/p/?LinkId=526740
|
||||||
|
|
||||||
|
_________________________________________________________________________________
|
||||||
|
|
||||||
|
- All files are original Microsoft's files.
|
||||||
|
- ClipUp.exe is required for KMS38 activation of Server Cor/Acor editions.
|
||||||
|
|
||||||
|
=================================================================================
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -7,7 +7,7 @@
|
||||||
::
|
::
|
||||||
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
||||||
::
|
::
|
||||||
:: Homepage: windowsaddict.ml
|
:: Homepage: massgrave.dev
|
||||||
:: Email: windowsaddict@protonmail.com
|
:: Email: windowsaddict@protonmail.com
|
||||||
::
|
::
|
||||||
::============================================================================
|
::============================================================================
|
||||||
|
@ -23,33 +23,53 @@
|
||||||
:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
|
:: 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
|
:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
|
||||||
|
|
||||||
if exist %SystemRoot%\Sysnative\cmd.exe (
|
|
||||||
set "_cmdf=%~f0"
|
set "_cmdf=%~f0"
|
||||||
|
for %%# in (%*) do (
|
||||||
|
if /i "%%#"=="r1" set r1=1
|
||||||
|
if /i "%%#"=="r2" set r2=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 (
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 (
|
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 (
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
setlocal EnableDelayedExpansion
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2"
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
:: Set Path variable, it helps if it is misconfigured in the system
|
||||||
|
|
||||||
set "SysPath=%SystemRoot%\System32"
|
set "PATH=%SystemRoot%\System32;%SystemRoot%\System32\wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
set "PATH=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%PATH%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check LF line ending
|
||||||
|
|
||||||
|
pushd "%~dp0"
|
||||||
|
>nul findstr /rxc:".*" "%~nx0"
|
||||||
|
if not %errorlevel%==0 (
|
||||||
|
echo:
|
||||||
|
echo Error: This is not a correct file. It has LF line ending issue.
|
||||||
|
echo:
|
||||||
|
echo Press any key to exit...
|
||||||
|
pause >nul
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
cls
|
cls
|
||||||
color 07
|
color 07
|
||||||
title Install Windows 10-11 Retail/MAK/OEM Key
|
title Install Windows Retail/OEM/MAK Key
|
||||||
|
|
||||||
set _args=
|
set _args=
|
||||||
set _elev=
|
set _elev=
|
||||||
|
@ -68,7 +88,7 @@ if /i "%%A"=="/u" set _unattended=1
|
||||||
|
|
||||||
set winbuild=1
|
set winbuild=1
|
||||||
set "nul=>nul 2>&1"
|
set "nul=>nul 2>&1"
|
||||||
set "_psc=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
|
set psc=powershell.exe
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
||||||
|
|
||||||
set _NCS=1
|
set _NCS=1
|
||||||
|
@ -90,9 +110,6 @@ set "_Yellow="Black" "Yellow""
|
||||||
|
|
||||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
||||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
||||||
set slp=SoftwareLicensingProduct
|
|
||||||
set sls=SoftwareLicensingService
|
|
||||||
set wApp=55c92734-d682-4d71-983e-d6ec3f16059f
|
|
||||||
set "line=echo ___________________________________________________________________________________________"
|
set "line=echo ___________________________________________________________________________________________"
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -104,9 +121,9 @@ echo Project is supported for Windows 10/11.
|
||||||
goto ins_done
|
goto ins_done
|
||||||
)
|
)
|
||||||
|
|
||||||
if %winbuild% GEQ 22483 if not exist %_psc% (
|
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
|
||||||
%nceline%
|
%nceline%
|
||||||
echo Powershell is not installed in the system.
|
echo Unable to find powershell.exe in the system.
|
||||||
goto ins_done
|
goto ins_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -114,10 +131,13 @@ goto ins_done
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
:: Fix for the special characters limitation in path name
|
||||||
|
|
||||||
|
set "_work=%~dp0"
|
||||||
|
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||||
|
|
||||||
set "_batf=%~f0"
|
set "_batf=%~f0"
|
||||||
set "_batp=%_batf:'=''%"
|
set "_batp=%_batf:'=''%"
|
||||||
|
|
||||||
set "_PSarg="""%~f0""" -el %_args%"
|
set _PSarg="""%~f0""" -el %_args%
|
||||||
|
|
||||||
set "_ttemp=%temp%"
|
set "_ttemp=%temp%"
|
||||||
|
|
||||||
|
@ -126,6 +146,7 @@ setlocal EnableDelayedExpansion
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
||||||
|
if /i not "!_work!"=="!_ttemp!" (
|
||||||
%eline%
|
%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.
|
||||||
|
@ -133,13 +154,14 @@ 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 ins_done
|
goto ins_done
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Elevate script as admin and pass arguments and preventing loop
|
:: Elevate script as admin and pass arguments and preventing loop
|
||||||
|
|
||||||
%nul% reg query HKU\S-1-5-19 || (
|
%nul% reg query HKU\S-1-5-19 || (
|
||||||
if not defined _elev %nul% %_psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||||
%eline%
|
%eline%
|
||||||
echo This script require administrator privileges.
|
echo This script require administrator privileges.
|
||||||
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'.
|
||||||
|
@ -148,53 +170,30 @@ goto ins_done
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
mode 98, 30
|
|
||||||
echo:
|
|
||||||
echo Initializing...
|
|
||||||
|
|
||||||
:: Check WMI and sppsvc Errors
|
|
||||||
|
|
||||||
set applist=
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
if %winbuild% LSS 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%wApp%') get ID /VALUE" 2^>nul')"
|
|
||||||
if %winbuild% GEQ 22483 set "chkapp=for /f "tokens=2 delims==" %%a in ('%_psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
|
||||||
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
|
||||||
|
|
||||||
if not defined applist (
|
|
||||||
%eline%
|
|
||||||
echo Failed running WMI query check, verify that these services are working correctly
|
|
||||||
echo Windows Management Instrumentation [WinMgmt], Software Protection [sppsvc]
|
|
||||||
echo:
|
|
||||||
echo Script will try to enable these services.
|
|
||||||
echo:
|
|
||||||
if %_unattended%==0 (
|
|
||||||
call :dk_color %_Yellow% "Press any key to continue..."
|
|
||||||
pause >nul
|
|
||||||
)
|
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\WinMgmt /v Start 2^>nul') do if /i %%b equ 0x4 (sc config WinMgmt start= auto %nul%)
|
|
||||||
net start WinMgmt /y %nul%
|
|
||||||
net stop sppsvc /y %nul%
|
|
||||||
net start sppsvc /y %nul%
|
|
||||||
cls
|
cls
|
||||||
)
|
mode 98, 30
|
||||||
|
|
||||||
::========================================================================================================================================
|
call :dk_initial
|
||||||
|
|
||||||
:: Refresh license status, it helps to get correct product name in Windows 17134 and later builds
|
|
||||||
|
|
||||||
call :dk_refresh
|
|
||||||
|
|
||||||
:: Check product name
|
:: Check product name
|
||||||
|
|
||||||
set winos=
|
cls
|
||||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
call :dk_product
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
:: Check SKU value
|
:: Check SKU value / Check in multiple places to find Edition change corruption
|
||||||
|
|
||||||
set osSKU=
|
set osSKU=
|
||||||
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "osSKU=%%a"
|
set regSKU=
|
||||||
|
set wmiSKU=
|
||||||
|
|
||||||
|
for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "regSKU=%%a"
|
||||||
|
if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" 2^>nul') do if not errorlevel 1 set "wmiSKU=%%a"
|
||||||
|
|
||||||
|
set osSKU=%wmiSKU%
|
||||||
|
if not defined osSKU set osSKU=%regSKU%
|
||||||
|
|
||||||
if not defined osSKU (
|
if not defined osSKU (
|
||||||
%eline%
|
%eline%
|
||||||
|
@ -207,18 +206,34 @@ goto ins_done
|
||||||
:: Detect key
|
:: Detect key
|
||||||
|
|
||||||
set key=
|
set key=
|
||||||
|
set pkey=
|
||||||
set _chan=
|
set _chan=
|
||||||
|
|
||||||
if defined applist call :hwiddata attempt1
|
if defined applist call :hwiddata attempt1
|
||||||
if not defined key call :hwiddata attempt2
|
if not defined key call :hwiddata attempt2
|
||||||
|
|
||||||
|
set pkey=
|
||||||
|
if not defined key call :dk_hwidkey %nul%
|
||||||
|
|
||||||
if not defined key (
|
if not defined key (
|
||||||
%eline%
|
%eline%
|
||||||
echo Unable to find Key for [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
||||||
if %winbuild% GTR 19044 echo Make sure you are using updated version of the script
|
echo PowerShell is not responding properly.
|
||||||
|
echo:
|
||||||
|
)
|
||||||
|
echo Unable to find HWID key for [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||||
|
echo Make sure you are using updated version of the script
|
||||||
|
echo:
|
||||||
|
if not "%regSKU%"=="%wmiSKU%" (
|
||||||
|
echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
|
||||||
|
echo Restart the system and try again.
|
||||||
|
)
|
||||||
goto ins_done
|
goto ins_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if defined key call :dk_pkeychannel %key%
|
||||||
|
if defined pkeychannel set _chan=%pkeychannel% Key
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
|
||||||
if %_unattended%==1 goto insertkey
|
if %_unattended%==1 goto insertkey
|
||||||
|
@ -226,10 +241,15 @@ if %_unattended%==1 goto insertkey
|
||||||
cls
|
cls
|
||||||
%line%
|
%line%
|
||||||
echo:
|
echo:
|
||||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan% Key
|
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan%
|
||||||
echo [%key%]
|
echo [%key%]
|
||||||
%line%
|
%line%
|
||||||
echo:
|
echo:
|
||||||
|
if not "%regSKU%"=="%wmiSKU%" (
|
||||||
|
echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
|
||||||
|
echo Restart the system to resolve it
|
||||||
|
echo:
|
||||||
|
)
|
||||||
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit"
|
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit"
|
||||||
choice /C:21 /N
|
choice /C:21 /N
|
||||||
if %errorlevel%==1 exit /b
|
if %errorlevel%==1 exit /b
|
||||||
|
@ -242,23 +262,28 @@ cls
|
||||||
cls
|
cls
|
||||||
%line%
|
%line%
|
||||||
|
|
||||||
if %winbuild% LSS 22483 wmic path %sls% where __CLASS='%sls%' call InstallProductKey ProductKey="%key%" %nul%
|
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
|
||||||
if %winbuild% GEQ 22483 %_psc% "(([WMISEARCHER]'SELECT Version FROM %sls%').Get()).InstallProductKey('%key%')" %nul%
|
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Version FROM SoftwareLicensingService').Get()).InstallProductKey('%key%')" %nul%
|
||||||
if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
|
if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
|
||||||
|
|
||||||
if %errorlevel%==0 (
|
set error_code=%errorlevel%
|
||||||
|
cmd /c exit /b %error_code%
|
||||||
|
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
||||||
|
|
||||||
|
if %error_code% EQU 0 (
|
||||||
call :dk_refresh
|
call :dk_refresh
|
||||||
echo:
|
echo:
|
||||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||||
echo Installing %_chan% Key [%key%]
|
echo Installing %_chan% [%key%]
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %Green% "[Successful]"
|
call :dk_color %Green% "[Successful]"
|
||||||
) else (
|
) else (
|
||||||
%eline%
|
%eline%
|
||||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||||
echo Installing %_chan% Key [%key%]
|
echo Installing %_chan% [%key%]
|
||||||
echo:
|
echo:
|
||||||
call :dk_color %Red% "[Unsuccessful]%actidnotfound%"
|
call :dk_color %Red% "[Unsuccessful] %error_code%"
|
||||||
|
if not defined applist echo Not Respoding: %e_wmispp%
|
||||||
)
|
)
|
||||||
%line%
|
%line%
|
||||||
|
|
||||||
|
@ -278,8 +303,131 @@ exit /b
|
||||||
|
|
||||||
:dk_refresh
|
:dk_refresh
|
||||||
|
|
||||||
if %winbuild% LSS 22483 wmic path %sls% where __CLASS='%sls%' call RefreshLicenseStatus %nul%
|
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call RefreshLicenseStatus %nul%
|
||||||
if %winbuild% GEQ 22483 %_psc% "$null=(([WMICLASS]'%sls%').GetInstances()).RefreshLicenseStatus()" %nul%
|
if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul%
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get Windows Activation IDs
|
||||||
|
|
||||||
|
:dk_actids
|
||||||
|
|
||||||
|
set applist=
|
||||||
|
if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensingProduct where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f') get ID /VALUE" 2^>nul')"
|
||||||
|
if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')"
|
||||||
|
%chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a"))
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||||
|
|
||||||
|
:dk_product
|
||||||
|
|
||||||
|
set winos=
|
||||||
|
set d1=[DllImport(\"winbrand\",CharSet=CharSet.Unicode)]public static extern string BrandingFormatString(string s);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $AP::BrandingFormatString('%%WINDOWS_LONG%%')
|
||||||
|
for /f "delims=" %%s in ('"%psc% %d2%"') do if not errorlevel 1 (set winos=%%s)
|
||||||
|
echo "%winos%" | find /i "Windows" 1>nul || (
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul') do set "winos=%%b"
|
||||||
|
if %winbuild% GEQ 22000 (
|
||||||
|
set winos=!winos:Windows 10=Windows 11!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Check wmic.exe
|
||||||
|
|
||||||
|
:dk_ckeckwmic
|
||||||
|
|
||||||
|
set _wmic=0
|
||||||
|
for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
|
||||||
|
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul && set _wmic=1
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:dk_initial
|
||||||
|
|
||||||
|
echo:
|
||||||
|
echo Initializing...
|
||||||
|
|
||||||
|
:: Check and enable WinMgmt, sppsvc services if required
|
||||||
|
|
||||||
|
for %%# in (WinMgmt sppsvc) do (
|
||||||
|
for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 (
|
||||||
|
echo:
|
||||||
|
echo Enabling %%# service...
|
||||||
|
if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed
|
||||||
|
if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed
|
||||||
|
)
|
||||||
|
sc start %%# %nul%
|
||||||
|
if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (
|
||||||
|
echo:
|
||||||
|
echo Starting %%# service...
|
||||||
|
sc start %%#
|
||||||
|
echo:
|
||||||
|
call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check WMI and SPP Errors
|
||||||
|
|
||||||
|
call :dk_ckeckwmic
|
||||||
|
|
||||||
|
set e_wmi=
|
||||||
|
set e_wmispp=
|
||||||
|
call :dk_actids
|
||||||
|
|
||||||
|
if not defined applist (
|
||||||
|
net stop sppsvc /y %nul%
|
||||||
|
cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
|
||||||
|
call :dk_refresh
|
||||||
|
|
||||||
|
if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
||||||
|
if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
|
||||||
|
if !errorlevel! NEQ 0 set e_wmi=1
|
||||||
|
|
||||||
|
if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP)
|
||||||
|
call :dk_actids
|
||||||
|
)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
::========================================================================================================================================
|
||||||
|
|
||||||
|
:: Get Product Key from pkeyhelper.dll for future new editions
|
||||||
|
:: It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later)
|
||||||
|
|
||||||
|
:dk_pkey
|
||||||
|
|
||||||
|
set pkey=
|
||||||
|
set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k
|
||||||
|
for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:: Get channel name for the key which was extracted from pkeyhelper.dll
|
||||||
|
|
||||||
|
:dk_pkeychannel
|
||||||
|
|
||||||
|
set k=%1
|
||||||
|
set pkeychannel=
|
||||||
|
set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
|
||||||
|
set m=[System.Runtime.InteropServices.Marshal]
|
||||||
|
set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f);
|
||||||
|
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272);
|
||||||
|
set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','')
|
||||||
|
for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a)
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
:dk_hwidkey
|
||||||
|
|
||||||
|
for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
|
||||||
|
for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do (
|
||||||
|
call :dk_pkey %osSKU% '%%#'
|
||||||
|
if defined pkey call :dk_pkeychannel !pkey!
|
||||||
|
if /i [!pkeychannel!]==[%%#] (
|
||||||
|
set key=!pkey!
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
::========================================================================================================================================
|
::========================================================================================================================================
|
||||||
|
@ -289,7 +437,7 @@ exit /b
|
||||||
if %_NCS% EQU 1 (
|
if %_NCS% EQU 1 (
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
echo %esc%[%~1%~2%esc%[0m
|
||||||
) else (
|
) else (
|
||||||
if not exist %_psc% (echo %~3) else (%_psc% write-host -back '%1' -fore '%2' '%3')
|
%psc% write-host -back '%1' -fore '%2' '%3'
|
||||||
)
|
)
|
||||||
exit /b
|
exit /b
|
||||||
|
|
||||||
|
@ -306,6 +454,7 @@ exit /b
|
||||||
|
|
||||||
:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
|
:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
|
||||||
|
|
||||||
|
|
||||||
:hwiddata
|
:hwiddata
|
||||||
|
|
||||||
for %%# in (
|
for %%# in (
|
||||||
|
@ -347,17 +496,24 @@ ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NON
|
||||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN
|
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN
|
||||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition
|
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition
|
||||||
) do (
|
) do (
|
||||||
for /f "tokens=1-7 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
|
for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
|
||||||
|
|
||||||
if %1==attempt1 if not defined key echo "!applist!" | find /i "%%A" 1>nul && (set "key=%%B" & set "_chan=%%E" & if %%D==1 set notworking=1)
|
if %1==attempt1 if not defined key (
|
||||||
|
echo "!applist!" | find /i "%%A" 1>nul && (
|
||||||
|
set key=%%B
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if %1==attempt2 if not defined key (
|
if %1==attempt2 if not defined key (
|
||||||
set "actidnotfound= [Mismatched Act-ID]"
|
|
||||||
set 7th=%%G
|
set 7th=%%G
|
||||||
if not defined 7th (
|
if not defined 7th (
|
||||||
set "key=%%B" & set "_chan=%%E" & if %%D==1 set notworking=1
|
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
|
||||||
|
if not defined key set key=%%B
|
||||||
) else (
|
) else (
|
||||||
echo "%winos%" | find "%%G" 1>nul && (set "key=%%B" & set "_chan=%%E" & if %%D==1 set notworking=1)
|
echo "%winos%" | find /i "%%G" 1>nul && (
|
||||||
|
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
|
||||||
|
if not defined key set key=%%B
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,15 @@
|
||||||
|
====================================================================================================
|
||||||
|
File Details:
|
||||||
|
====================================================================================================
|
||||||
|
|
||||||
|
cleanosppx64.exe SHA-1: d30a0e4e5911d3ca705617d17225372731c770e2
|
||||||
|
cleanosppx86.exe SHA-1: 39ed8659e7ca16aaccb86def94ce6cec4c847dd6
|
||||||
|
|
||||||
|
- These files are used in cleaning office license in C2R Retail office to VL conversion process.
|
||||||
|
- These files are taken from the old version of Microsoft official tool 'O15CTRRemove.diagcab'.
|
||||||
|
|
||||||
|
File: O15CTRRemove.diagcab (Digitally Signed)
|
||||||
|
Link: app.box.com/s/n8qpb5ljmv6djp77w5p6fk043dm6s3r1 (Unofficial Link)
|
||||||
|
SHA-1: 56c6ca76993a96cf9a255463b90db96cb9d24464
|
||||||
|
|
||||||
|
====================================================================================================
|
|
@ -0,0 +1,3 @@
|
||||||
|
<html>
|
||||||
|
<meta http-equiv="refresh" content="0; url=https://massgrave.dev/">
|
||||||
|
</html>
|
|
@ -1,335 +0,0 @@
|
||||||
@setlocal DisableDelayedExpansion
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::============================================================================
|
|
||||||
::
|
|
||||||
:: This script is a part of 'Microsoft Activation Scripts' (MAS) project.
|
|
||||||
::
|
|
||||||
:: Homepage: windowsaddict.ml
|
|
||||||
:: Email: windowsaddict@protonmail.com
|
|
||||||
::
|
|
||||||
::============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: 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 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
|
|
||||||
|
|
||||||
if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 (
|
|
||||||
set "_cmdf=%~f0"
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Set Path variable, it helps if it is misconfigured in the system
|
|
||||||
|
|
||||||
set "SysPath=%SystemRoot%\System32"
|
|
||||||
if exist "%SystemRoot%\Sysnative\reg.exe" (set "SysPath=%SystemRoot%\Sysnative")
|
|
||||||
set "Path=%SysPath%;%SystemRoot%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
color 07
|
|
||||||
mode con cols=65 lines=12
|
|
||||||
title Verify Files ^& Clear Zone.Identifier
|
|
||||||
|
|
||||||
set winbuild=1
|
|
||||||
set "nul=>nul 2>&1"
|
|
||||||
set "_psc=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
||||||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G
|
|
||||||
|
|
||||||
set _NCS=1
|
|
||||||
if %winbuild% LSS 10586 set _NCS=0
|
|
||||||
if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 2>nul | find /i "0x0" 1>nul && (set _NCS=0)
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
|
|
||||||
set "Red="41;97m""
|
|
||||||
set "Green="42;97m""
|
|
||||||
set "_Yellow="40;93m""
|
|
||||||
) else (
|
|
||||||
set "Red="Red" "white""
|
|
||||||
set "Green="DarkGreen" "white""
|
|
||||||
set "_Yellow="Black" "Yellow""
|
|
||||||
)
|
|
||||||
|
|
||||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
|
||||||
set "eline=echo: &call :color %Red% "==== ERROR ====" &echo:"
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Self verification (made sure that script won't crash, if it's in Unix-LF format)
|
|
||||||
|
|
||||||
set "_hash="
|
|
||||||
for /f "skip=1 tokens=* delims=" %%G in ('certutil -hashfile "%~f0" SHA1^|findstr /i /v CertUtil') do set "_hash=%%G"
|
|
||||||
set "_hash=%_hash: =%"
|
|
||||||
set "_hash=%_hash:~-2%"
|
|
||||||
set "_fina=%~n0"
|
|
||||||
set "_fina=%_fina:~-2%"
|
|
||||||
|
|
||||||
if /i not "%_hash%"=="%_fina%" (
|
|
||||||
%nceline%
|
|
||||||
echo File SHA-1 verification failed.
|
|
||||||
echo Make sure that file is not modified / renamed.
|
|
||||||
echo:
|
|
||||||
echo Press any key to exit...
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
if %winbuild% LSS 7600 (
|
|
||||||
%nceline%
|
|
||||||
echo Unsupported OS version Detected.
|
|
||||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
|
||||||
goto done
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist %_psc% (
|
|
||||||
%nceline%
|
|
||||||
echo Powershell is not installed in the system.
|
|
||||||
echo Aborting...
|
|
||||||
goto done
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Fix for the special characters limitation in path name
|
|
||||||
|
|
||||||
set "_work=%~dp0"
|
|
||||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
|
||||||
|
|
||||||
set "_batf=%~f0"
|
|
||||||
set "_batp=%_batf:'=''%"
|
|
||||||
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
for %%# in (All-In-One-Version,Separate-Files-Version) do (
|
|
||||||
if not exist "!_work!\%%#" (
|
|
||||||
%eline%
|
|
||||||
echo [%%~#] folder not found in the current directory.
|
|
||||||
goto done
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
set fileM=0
|
|
||||||
set hashM=0
|
|
||||||
|
|
||||||
for %%# in (
|
|
||||||
31e13b31812ea4fb3073c0ef4a0527490be5d9da+Separate-Files-Version\Extras\Change_W10_11_Edition.cmd
|
|
||||||
db4c68bba8a9c9cccfe76d0f1753a2cd922b94f2+Separate-Files-Version\Extras\Extract_OEM_Folder\Extract_OEM_Folder.cmd
|
|
||||||
d047f7b3bb205e8eb9412af11402e32a31b7906f+Separate-Files-Version\Extras\Extract_OEM_Folder\ReadMe.html
|
|
||||||
44a364ac2d6fad784aef03361fd64460fbe7357a+Separate-Files-Version\Extras\Install_W10_11_HWID_Key.cmd
|
|
||||||
89054be4d565ee7f9defa4159b1997d1bdf96d56+Separate-Files-Version\Extras\_Homepage.html
|
|
||||||
236916e59019d183a55ace4f892016d5cd2194bd+ReadMe.html
|
|
||||||
9cc32357cb46a078779e51c14402ec594acf611b+Separate-Files-Version\Activators\Online_KMS_Activation\Activate.cmd
|
|
||||||
fabb5a0fc1e6a372219711152291339af36ed0b5+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\gatherosstate.exe
|
|
||||||
d30a0e4e5911d3ca705617d17225372731c770e2+Separate-Files-Version\Activators\Online_KMS_Activation\BIN\cleanosppx64.exe
|
|
||||||
da1afd97d92dd6026e7095ee7442a2144f78ed0b+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\slc.dll
|
|
||||||
286f3bb552b6368a347ca74cb7407026624c4eb3+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\_Info.html
|
|
||||||
39ed8659e7ca16aaccb86def94ce6cec4c847dd6+Separate-Files-Version\Activators\Online_KMS_Activation\BIN\cleanosppx86.exe
|
|
||||||
836ae2f742e8dbf54762f4ecc2468c68eecff6d9+Separate-Files-Version\Activators\Online_KMS_Activation\BIN\_Info.html
|
|
||||||
6cd44e7186b396016bd97802a7e28d659ac94e78+Separate-Files-Version\Activators\HWID-KMS38_Activation\HWID_Activation.cmd
|
|
||||||
81d25225805b80a5d32906f32b5aa67d00b24b0c+Separate-Files-Version\Activators\Online_KMS_Activation\ReadMe.html
|
|
||||||
5bf7ebbb3c4de976476925053b3a8e6dc689cff5+Separate-Files-Version\Extras\Activation_Troubleshoot.cmd
|
|
||||||
f4d1fa0d085bc17561416946ccbdaf419570b8f9+Separate-Files-Version\Activators\HWID-KMS38_Activation\KMS38_Activation.cmd
|
|
||||||
06ae500b740d90148a951bd7b40ddc8f9ec0a109+Separate-Files-Version\Activators\HWID-KMS38_Activation\ReadMe_HWID.html
|
|
||||||
1f90667b15471d9a74ee3a2839a8b795b623fc86+Separate-Files-Version\Activators\HWID-KMS38_Activation\ReadMe_KMS38.html
|
|
||||||
4d11828cac7728e25f6e2d1e76553d779d4a33ff+All-In-One-Version\MAS_1.5_AIO_CRC32_21D20776.cmd
|
|
||||||
f19d8a19f6a684e87e2421d185d83af3f5c24a70+Separate-Files-Version\Activators\Activations_Summary.html
|
|
||||||
c00cd43aa95e8221b8ee6a9e758eb7b128139997+Separate-Files-Version\Activators\Check-Activation-Status-vbs.cmd
|
|
||||||
27ead0b8d2b8346e55ab54bb682dc3c5afd1ed59+Separate-Files-Version\Activators\Check-Activation-Status-wmi.cmd
|
|
||||||
023d88e8e0a125f5d85ee2d999b512c4886aab29+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\arm64_slc.dll
|
|
||||||
7e449ae5549a0d93cf65f4a1bb2aa7d1dc090d2d+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\arm64_gatherosstate.exe
|
|
||||||
48d928b1bec25a56fe896c430c2c034b7866aa7a+Separate-Files-Version\Activators\HWID-KMS38_Activation\BIN\ClipUp.exe
|
|
||||||
) do for /f "tokens=1,2* delims=+" %%A in ("%%#") do (
|
|
||||||
if not exist "!_work!\%%B" (
|
|
||||||
set fileM=1
|
|
||||||
set hashM=1
|
|
||||||
) else (
|
|
||||||
set "_hash="
|
|
||||||
for /f "skip=1 tokens=* delims=" %%G in ('certutil -hashfile "!_work!\%%B" SHA1^|findstr /i /v CertUtil') do (
|
|
||||||
set "_hash=%%G"
|
|
||||||
set "_hash=!_hash: =!"
|
|
||||||
if /i not "%%A"=="!_hash!" set hashM=1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
cls
|
|
||||||
echo:
|
|
||||||
|
|
||||||
set n=0
|
|
||||||
set mn=0
|
|
||||||
set cn=27
|
|
||||||
|
|
||||||
for /f %%a in ('2^>nul dir "!_work!\" /a-d/b/-o/-p/s^|find /v /c ""') do set n=%%a
|
|
||||||
|
|
||||||
if %fileM%==0 (
|
|
||||||
echo Checking Files [Passed]
|
|
||||||
) else (
|
|
||||||
call :color %Red% "Checking Files [Files Are Missing]"
|
|
||||||
)
|
|
||||||
|
|
||||||
if %n% EQU %cn% echo Checking Total Number Of Files [Passed] [%cn%]
|
|
||||||
|
|
||||||
if %n% GTR %cn% (
|
|
||||||
set /a "mn=%n%-%cn%"
|
|
||||||
call :color %Red% "Checking Total Number Of Files [!mn! - Extra Files Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
if %n% LSS %cn% (
|
|
||||||
set /a "mn=%cn%-%n%"
|
|
||||||
call :color %Red% "Checking Total Number Of Files [!mn! - Less Files Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
if %hashM%==0 (
|
|
||||||
echo Verifying Files SHA-1 Hash [Passed]
|
|
||||||
) else (
|
|
||||||
call :color %Red% "Verifying Files SHA-1 Hash [Mismatch Found]"
|
|
||||||
)
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: Clear NTFS alternate data streams (Zone.Identifier)
|
|
||||||
:: winitor.com/pdf/NtfsAlternateDataStreams.pdf
|
|
||||||
:: docs.microsoft.com/en-us/archive/blogs/askcore/alternate-data-streams-in-ntfs
|
|
||||||
|
|
||||||
set zone=0
|
|
||||||
pushd "!_work!\"
|
|
||||||
dir /s /r | find ":$DATA" 1>nul && set zone=1
|
|
||||||
|
|
||||||
if %zone%==0 (
|
|
||||||
echo Clearing Zone.Identifier From Files [Already clean]
|
|
||||||
) else (
|
|
||||||
if %winbuild% LSS 9200 (
|
|
||||||
%nul% %_psc% "iex(([io.file]::ReadAllText('!_batp!')-split':unblock\:.*')[1])"
|
|
||||||
) else (
|
|
||||||
%nul% %_psc% "& {gci -recurse | unblock-file}"
|
|
||||||
)
|
|
||||||
dir /s /r | find ":$DATA" 1>nul
|
|
||||||
if [!errorlevel!]==[0] (
|
|
||||||
call :color %Red% "Clearing Zone.Identifier From Files [Failed]
|
|
||||||
) else (
|
|
||||||
echo Clearing Zone.Identifier From Files [Passed]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
popd
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:done
|
|
||||||
|
|
||||||
echo:
|
|
||||||
if not exist "%_psc%" (
|
|
||||||
echo Press any key to exit...
|
|
||||||
) else (
|
|
||||||
call :color %_Yellow% "Press any key to exit..."
|
|
||||||
)
|
|
||||||
pause >nul
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:color
|
|
||||||
|
|
||||||
if %_NCS% EQU 1 (
|
|
||||||
echo %esc%[%~1%~2%esc%[0m
|
|
||||||
) else (
|
|
||||||
%_psc% write-host -back '%1' -fore '%2' '%3'
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
||||||
|
|
||||||
:: andyarismendi.blogspot.com/2012/02/unblocking-files-with-powershell.html
|
|
||||||
:: github.com/ellisgeek/Scripts_Windows/blob/master/Powershell/Helper%20Functions/Unblock-File.ps1
|
|
||||||
:: Written by @Andy Arismendi
|
|
||||||
|
|
||||||
:: This code to unblock files is used when PowerShell 2.0 is installed (Windows 7 and equivalent).
|
|
||||||
:: With PowerShell 3.0 (Windows 8 and equivalent) and above, script uses one liner cmdlet 'Unblock-File'
|
|
||||||
|
|
||||||
:unblock:
|
|
||||||
|
|
||||||
function Unblock-File {
|
|
||||||
#Requires -Version 2.0
|
|
||||||
[cmdletbinding(DefaultParameterSetName = "ByName",
|
|
||||||
SupportsShouldProcess = $True)]
|
|
||||||
param (
|
|
||||||
[parameter(Mandatory = $true,
|
|
||||||
ParameterSetName = "ByName",
|
|
||||||
Position = 0)]
|
|
||||||
[string]
|
|
||||||
$Path,
|
|
||||||
[parameter(Mandatory = $true,
|
|
||||||
ParameterSetName = "ByInput",
|
|
||||||
ValueFromPipeline = $true)]
|
|
||||||
$InputObject
|
|
||||||
)
|
|
||||||
begin {
|
|
||||||
Add-Type -Namespace Win32 -Name PInvoke -MemberDefinition @"
|
|
||||||
// msdn.microsoft.com/en-us/library/windows/desktop/aa363915(v=vs.85).aspx
|
|
||||||
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
|
||||||
private static extern bool DeleteFile(string name);
|
|
||||||
public static int Win32DeleteFile(string filePath) {
|
|
||||||
bool is_gone = DeleteFile(filePath); return Marshal.GetLastWin32Error();}
|
|
||||||
|
|
||||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
||||||
static extern int GetFileAttributes(string lpFileName);
|
|
||||||
public static bool Win32FileExists(string filePath) {return GetFileAttributes(filePath) != -1;}
|
|
||||||
"@
|
|
||||||
}
|
|
||||||
process {
|
|
||||||
switch ($PSCmdlet.ParameterSetName) {
|
|
||||||
'ByName' {
|
|
||||||
$input_paths = Resolve-Path -Path $Path | ? { [IO.File]::Exists($_.Path) } | `
|
|
||||||
Select -Exp Path
|
|
||||||
}
|
|
||||||
'ByInput' {
|
|
||||||
if ($InputObject -is [System.IO.FileInfo]) {
|
|
||||||
$input_paths = $InputObject.FullName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$input_paths | % {
|
|
||||||
if ([Win32.PInvoke]::Win32FileExists($_ + ':Zone.Identifier')) {
|
|
||||||
if ($PSCmdlet.ShouldProcess($_)) {
|
|
||||||
$result_code = [Win32.PInvoke]::Win32DeleteFile($_ + ':Zone.Identifier')
|
|
||||||
if ([Win32.PInvoke]::Win32FileExists($_ + ':Zone.Identifier')) {
|
|
||||||
Write-Error ("Failed to unblock '{0}' the Win32 return code is '{1}'." -f `
|
|
||||||
$_, $result_code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gci -recurse | Unblock-File
|
|
||||||
|
|
||||||
:unblock:
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
**[Download Link](https://github.com/massgravel/Microsoft-Activation-Scripts/releases)** <br/>
|
**[Download Link](https://github.com/massgravel/Microsoft-Activation-Scripts/releases)** <br/>
|
||||||
|
|
||||||
Latest Version: 1.5
|
Latest Version: 1.6
|
||||||
Release date: 11-Jan-2022
|
Release date: 25-July-2022
|
||||||
|
|
||||||
**For more details, check Homepage:** https://massgrave.dev/ <br/>
|
**For more details, check Homepage:** https://massgrave.dev/ <br/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue