1.6
This commit is contained in:
parent
d62eeb9355
commit
f27b3fbe6e
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.
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-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: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
|
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
||||||
echo:
|
echo:
|
||||||
echo: [4] HWID ^> KMS38
|
echo: [6] Exit
|
||||||
echo: [5] HWID ^> Online KMS
|
|
||||||
echo: [6] KMS38 ^> Online KMS
|
|
||||||
echo: [7] HWID ^> KMS38 ^> Online KMS
|
|
||||||
echo:
|
|
||||||
echo: [8] 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:
|
|
||||||
|
|
||||||
::========================================================================================================================================
|
|
Loading…
Reference in New Issue