DESKTOP-AJSJJMA\Admin
3 years ago
35 changed files with 16555 additions and 16186 deletions
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -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
File diff suppressed because it is too large
@ -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 |
|||
|
|||
::======================================================================================================================================== |
@ -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
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -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