mirror of
https://github.com/massgravel/Microsoft-Activation-Scripts.git
synced 2025-02-21 12:49:58 +00:00
Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3c4f8796fa | ||
![]() |
4b8a769f54 | ||
![]() |
044d5f8ae7 | ||
![]() |
0b6ec943b1 | ||
![]() |
ed91ab5ac2 | ||
![]() |
bc8ae03488 | ||
![]() |
d17d7496e0 | ||
![]() |
22938f30e1 | ||
![]() |
987b518ba1 | ||
![]() |
eecd977184 | ||
![]() |
7323b3ab18 | ||
![]() |
f551f61998 | ||
![]() |
43ce3cc4be | ||
![]() |
6791e7a73f | ||
![]() |
f0fefb7baa | ||
![]() |
73b1085da6 |
File diff suppressed because it is too large
Load Diff
1104
MAS/Separate-Files-Version/Activators/HWID_Activation.cmd
Normal file
1104
MAS/Separate-Files-Version/Activators/HWID_Activation.cmd
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -14,6 +14,10 @@
|
||||
|
||||
|
||||
|
||||
:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line
|
||||
set _stg=0
|
||||
|
||||
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -53,10 +57,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
@ -102,13 +105,14 @@ set "_Yellow="Black" "Yellow""
|
||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
||||
set "line=echo ___________________________________________________________________________________________"
|
||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% LSS 10240 (
|
||||
%eline%
|
||||
if %winbuild% LSS 7600 (
|
||||
%nceline%
|
||||
echo Unsupported OS version detected.
|
||||
echo Project is supported for Windows 10/11/Server Build 10240 and later.
|
||||
echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent.
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
@ -151,7 +155,7 @@ goto ced_done
|
||||
|
||||
:: Elevate script as admin and pass arguments and preventing loop
|
||||
|
||||
%nul% reg query HKU\S-1-5-19 || (
|
||||
>nul fltmc || (
|
||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||
%eline%
|
||||
echo This script require administrator privileges.
|
||||
@ -164,36 +168,52 @@ goto ced_done
|
||||
cls
|
||||
mode 98, 30
|
||||
|
||||
call :dk_initial
|
||||
echo:
|
||||
echo Initializing...
|
||||
echo:
|
||||
call :dk_product
|
||||
call :dk_ckeckwmic
|
||||
|
||||
if not defined applist (
|
||||
cls
|
||||
%eline%
|
||||
echo Not Respoding: !e_wmispp!
|
||||
goto ced_done
|
||||
:: Show info for potential script stuck scenario
|
||||
|
||||
sc start sppsvc %nul%
|
||||
if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 (
|
||||
echo:
|
||||
echo Error code: %errorlevel%
|
||||
call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..."
|
||||
echo:
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check Activation IDs
|
||||
|
||||
call :dk_actids
|
||||
|
||||
if not defined applist (
|
||||
%eline%
|
||||
echo Activation IDs not found. Aborting...
|
||||
echo:
|
||||
echo Check this page for help. https://massgrave.dev/troubleshoot
|
||||
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...
|
||||
echo:
|
||||
echo Check this page for help. https://massgrave.dev/troubleshoot
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
:: Check product name
|
||||
|
||||
call :dk_product
|
||||
|
||||
:: Check SKU value
|
||||
|
||||
set osSKU=
|
||||
@ -213,6 +233,9 @@ echo SKU value was not detected properly. Aborting...
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
set branch=
|
||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
|
||||
|
||||
:: Check PowerShell
|
||||
|
||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
||||
@ -221,25 +244,17 @@ 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 _dtarget=
|
||||
set _ptarget=
|
||||
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"))
|
||||
|
||||
if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget=!_dtarget! %%a") else (set "_dtarget=%%a"))
|
||||
for /f "tokens=4" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget=!_ptarget! %%a") else (set "_ptarget=%%a"))
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -253,9 +268,13 @@ echo Aborting...
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
for %%# in ( %_dtarget% %_ptarget% ) do (
|
||||
echo "!_target!" | find /i " %%# " 1>nul || set "_target=!_target! %%# "
|
||||
)
|
||||
|
||||
if defined _target (
|
||||
for %%# in (%_target%) do (
|
||||
echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (if defined _ntarget (set "_ntarget=!_ntarget! %%#") else (set "_ntarget=%%#"))
|
||||
echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#")
|
||||
)
|
||||
)
|
||||
|
||||
@ -275,26 +294,40 @@ goto ced_done
|
||||
cls
|
||||
mode 98, 30
|
||||
set inpt=
|
||||
set note=
|
||||
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."
|
||||
call :dk_color %Gray% "You can change the Edition [%osedition%] [%winbuild%] to one of the following."
|
||||
%line%
|
||||
echo:
|
||||
|
||||
for %%A in (%_ntarget%) do (
|
||||
set /a counter+=1
|
||||
if %winbuild% GEQ 10240 (
|
||||
echo "%_ptarget%" | find /i "%%A" 1>nul && (
|
||||
set note=1
|
||||
call :dk_color2 %_White% "[!counter!] " %Magenta% "%%A"
|
||||
) || (
|
||||
echo [!counter!] %%A
|
||||
)
|
||||
) else (
|
||||
echo [!counter!] %%A
|
||||
)
|
||||
set targetedition!counter!=%%A
|
||||
)
|
||||
|
||||
%line%
|
||||
echo:
|
||||
echo [0] Exit
|
||||
echo [0] %_exitmsg%
|
||||
echo:
|
||||
if defined note (
|
||||
echo Note: CBS Upgrade Method is available for Purple colored editions.
|
||||
echo:
|
||||
)
|
||||
call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":"
|
||||
set /p inpt=
|
||||
if "%inpt%"=="" goto cedmenu2
|
||||
@ -305,6 +338,42 @@ if %verified%==0 goto cedmenu2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
cls
|
||||
if %winbuild% GEQ 10240 (
|
||||
echo "%_ptarget%" | find /i "%targetedition%" 1>nul && (
|
||||
echo "%_dtarget%" | find /i "%targetedition%" 1>nul && (
|
||||
echo:
|
||||
%line%
|
||||
echo:
|
||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||
echo [1] DISM Method [Recommended]
|
||||
) else (
|
||||
echo [1] Changepk Method [Recommended]
|
||||
)
|
||||
echo:
|
||||
echo [2] CBS Upgrade Method [Alternative]
|
||||
echo:
|
||||
echo [0] Go back
|
||||
%line%
|
||||
echo:
|
||||
echo Enter a menu option in the Keyboard:
|
||||
choice /C:120 /N
|
||||
set _el=!errorlevel!
|
||||
if !_el!==3 goto :cedmenu2
|
||||
if !_el!==2 goto :cbsmethod
|
||||
if !_el!==1 REM
|
||||
)
|
||||
)
|
||||
) else (
|
||||
goto :cbsmethod
|
||||
)
|
||||
|
||||
echo "%_ptarget%" | find /i "%targetedition%" 1>nul && (
|
||||
echo "%_dtarget%" | find /i "%targetedition%" 1>nul || (
|
||||
goto :cbsmethod
|
||||
)
|
||||
)
|
||||
|
||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||
goto :ced_change_server
|
||||
)
|
||||
@ -313,7 +382,6 @@ 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
|
||||
|
||||
@ -327,17 +395,23 @@ set _changepk=1
|
||||
)
|
||||
)
|
||||
|
||||
if %winbuild% LEQ 19044 call :changeeditiondata
|
||||
if %_changepk%==1 (
|
||||
set "keyflow=Retail Volume:MAK Volume:GVLK OEM:NONSLP OEM:DM"
|
||||
) else (
|
||||
set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK"
|
||||
)
|
||||
|
||||
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 call :changeeditiondata
|
||||
|
||||
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
|
||||
echo Make sure you are using updated version of the script.
|
||||
echo https://massgrave.dev
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
@ -348,8 +422,6 @@ goto ced_done
|
||||
:: 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 && (
|
||||
@ -358,10 +430,17 @@ echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack o
|
||||
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 (
|
||||
)
|
||||
|
||||
:ced_loop
|
||||
|
||||
cls
|
||||
if %_changepk%==1 (
|
||||
for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do (
|
||||
for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (
|
||||
if not [%%#]==[] (
|
||||
%eline%
|
||||
echo Internet needs to be disconnected to change edition [%osedition%] to [%targetedition%]
|
||||
echo Disconnect the Internet and then press any key...
|
||||
pause >nul
|
||||
goto ced_loop
|
||||
@ -375,12 +454,17 @@ 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."
|
||||
call :dk_color %Magenta% "Notes-"
|
||||
echo:
|
||||
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
|
||||
echo - You can safely ignore if error appears in the upgrade Window,
|
||||
echo but in that case you must manually reboot the system.
|
||||
echo:
|
||||
choice /C:21 /N /M "[1] Continue [2] Exit : "
|
||||
echo - Save your work before continue, system will auto restart.
|
||||
echo - You can connect to Internet after the system restart.
|
||||
echo:
|
||||
echo - You will need to activate with HWID option once the edition is changed.
|
||||
echo:
|
||||
choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : "
|
||||
if !errorlevel!==1 exit /b
|
||||
)
|
||||
|
||||
@ -419,6 +503,34 @@ goto ced_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:cbsmethod
|
||||
|
||||
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;}"
|
||||
|
||||
echo:
|
||||
echo Changing the Current Edition [%osedition%] to [%targetedition%]
|
||||
echo:
|
||||
call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot."
|
||||
if %winbuild% GEQ 17034 if %targetedition%==Professional echo - Enterprise Key will be installed instead of Pro, you can quickly change to Pro later.
|
||||
echo:
|
||||
choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : "
|
||||
if %errorlevel%==1 exit /b
|
||||
|
||||
echo:
|
||||
echo Initializing...
|
||||
echo:
|
||||
|
||||
if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
|
||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;"
|
||||
|
||||
echo:
|
||||
%line%
|
||||
goto ced_done
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:ced_change_server
|
||||
|
||||
cls
|
||||
@ -438,7 +550,8 @@ 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
|
||||
echo Make sure you are using updated version of the script.
|
||||
echo https://massgrave.dev
|
||||
goto ced_done
|
||||
)
|
||||
|
||||
@ -459,7 +572,7 @@ call :dk_color %Magenta% "Make sure to restart the system."
|
||||
:ced_done
|
||||
|
||||
echo:
|
||||
call :dk_color %_Yellow% "Press any key to exit..."
|
||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
||||
pause >nul
|
||||
exit /b
|
||||
|
||||
@ -483,22 +596,6 @@ if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISE
|
||||
%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
|
||||
@ -509,51 +606,32 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
|
||||
)
|
||||
exit /b
|
||||
|
||||
:dk_initial
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
|
||||
echo:
|
||||
echo Initializing...
|
||||
:dk_product
|
||||
|
||||
:: Check and enable WinMgmt, sppsvc services if required
|
||||
call :dk_reflection
|
||||
|
||||
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..."
|
||||
set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3);
|
||||
set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%')
|
||||
|
||||
set winos=
|
||||
for /f "delims=" %%s in ('"%psc% %d1%"') 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 WMI and SPP Errors
|
||||
:: Common lines used in PowerShell reflection code
|
||||
|
||||
call :dk_ckeckwmic
|
||||
:dk_reflection
|
||||
|
||||
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
|
||||
)
|
||||
set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1);
|
||||
set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False);
|
||||
set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0);
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -563,24 +641,30 @@ exit /b
|
||||
|
||||
:dk_pkey
|
||||
|
||||
call :dk_reflection
|
||||
|
||||
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SkuGetProductKeyForEdition', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [String], [String].MakeByRefType(), [String].MakeByRefType()), 1, 3);
|
||||
set d1=%d1% $out = ''; [void]$TypeBuilder.CreateType()::SkuGetProductKeyForEdition(%1, %2, [ref]$out, [ref]$null); $out
|
||||
|
||||
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)
|
||||
for /f %%a in ('%psc% "%d1%"') 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 m=[Runtime.InteropServices.Marshal]
|
||||
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)
|
||||
|
||||
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3);
|
||||
set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8);
|
||||
set d1=%d1% [void]$TypeBuilder.CreateType()::PidGenX('%k%', '%p%', '00000', 0, 0, 0, $f); %m%::Copy($f, $r, 0, 0x04F8); %m%::FreeHGlobal($f); [Text.Encoding]::Unicode.GetString($r, 1016, 128)
|
||||
|
||||
set pkeychannel=
|
||||
for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkeychannel=%%a)
|
||||
exit /b
|
||||
|
||||
:ced_windowskey
|
||||
@ -603,9 +687,13 @@ exit /b
|
||||
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)
|
||||
|
||||
call :dk_reflection
|
||||
|
||||
set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionIdFromName', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3);
|
||||
set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionIdFromName('%k%', [ref]$out); $out
|
||||
|
||||
for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set targetSKU=%%a)
|
||||
if "%targetSKU%"=="0" set targetSKU=
|
||||
exit /b
|
||||
|
||||
@ -631,6 +719,231 @@ exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition
|
||||
|
||||
:cbsxml:[
|
||||
param (
|
||||
[Parameter()]
|
||||
[String]$SetEdition,
|
||||
|
||||
[Parameter()]
|
||||
[Switch]$GetTargetEditions,
|
||||
|
||||
[Parameter()]
|
||||
[Switch]$StageCurrent
|
||||
)
|
||||
|
||||
function Get-AssemblyIdentity {
|
||||
param (
|
||||
[String]$PackageName
|
||||
)
|
||||
|
||||
$PackageName = [String]$PackageName
|
||||
$packageData = ($PackageName -split '~')
|
||||
|
||||
if($packageData[3] -eq '') {
|
||||
$packageData[3] = 'neutral'
|
||||
}
|
||||
|
||||
return "<assemblyIdentity name=`"$($packageData[0])`" version=`"$($packageData[4])`" processorArchitecture=`"$($packageData[2])`" publicKeyToken=`"$($packageData[1])`" language=`"$($packageData[3])`" />"
|
||||
}
|
||||
|
||||
function Get-SxsName {
|
||||
param (
|
||||
[String]$PackageName
|
||||
)
|
||||
|
||||
$name = ($PackageName -replace '[^A-z0-9\-\._]', '')
|
||||
|
||||
if($name.Length -gt 40) {
|
||||
$name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '')
|
||||
}
|
||||
|
||||
return $name.ToLower()
|
||||
}
|
||||
|
||||
function Find-EditionXmlInSxs {
|
||||
param (
|
||||
[String]$Edition
|
||||
)
|
||||
|
||||
$candidates = @($Edition, 'Client', 'Server')
|
||||
$winSxs = $Env:SystemRoot + '\WinSxS'
|
||||
$allInSxs = Get-ChildItem -Path $winSxs | select Name
|
||||
|
||||
foreach($candidate in $candidates) {
|
||||
$name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate"
|
||||
$packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35')
|
||||
|
||||
if($packages.Length -eq 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
$package = $packages[-1].Name
|
||||
$testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml'
|
||||
|
||||
if(Test-Path -Path $testPath -PathType Leaf) {
|
||||
return $testPath
|
||||
}
|
||||
}
|
||||
|
||||
return $null
|
||||
}
|
||||
|
||||
function Find-EditionXml {
|
||||
param (
|
||||
[String]$Edition
|
||||
)
|
||||
|
||||
$servicingEditions = $Env:SystemRoot + '\servicing\Editions'
|
||||
$editionXml = $Edition + 'Edition.xml'
|
||||
|
||||
$editionXmlInServicing = $servicingEditions + '\' + $editionXml
|
||||
|
||||
if(Test-Path -Path $editionXmlInServicing -PathType Leaf) {
|
||||
return $editionXmlInServicing
|
||||
}
|
||||
|
||||
return Find-EditionXmlInSxs -Edition $Edition
|
||||
}
|
||||
|
||||
function Write-UpgradeCandidates {
|
||||
param (
|
||||
[HashTable]$InstallCandidates
|
||||
)
|
||||
|
||||
$editionCount = 0
|
||||
Write-Host 'Editions that can be upgraded to:'
|
||||
foreach($candidate in $InstallCandidates.Keys) {
|
||||
Write-Host "Target Edition : $candidate"
|
||||
$editionCount++
|
||||
}
|
||||
|
||||
if($editionCount -eq 0) {
|
||||
Write-Host '(no editions are available)'
|
||||
}
|
||||
}
|
||||
|
||||
function Write-UpgradeXml {
|
||||
param (
|
||||
[Array]$RemovalCandidates,
|
||||
[Array]$InstallCandidates,
|
||||
[Boolean]$Stage
|
||||
)
|
||||
|
||||
$removeAction = 'remove'
|
||||
if($Stage) {
|
||||
$removeAction = 'stage'
|
||||
}
|
||||
|
||||
Write-Output '<?xml version="1.0"?>'
|
||||
Write-Output '<unattend xmlns="urn:schemas-microsoft-com:unattend">'
|
||||
Write-Output '<servicing>'
|
||||
|
||||
foreach($package in $InstallCandidates) {
|
||||
Write-Output '<package action="install">'
|
||||
Write-Output (Get-AssemblyIdentity -PackageName $package)
|
||||
Write-Output '</package>'
|
||||
}
|
||||
|
||||
foreach($package in $RemovalCandidates) {
|
||||
Write-Output "<package action=`"$removeAction`">"
|
||||
Write-Output (Get-AssemblyIdentity -PackageName $package)
|
||||
Write-Output '</package>'
|
||||
}
|
||||
|
||||
Write-Output '</servicing>'
|
||||
Write-Output '</unattend>'
|
||||
}
|
||||
|
||||
function Write-Usage {
|
||||
Get-Help $script:MyInvocation.MyCommand.Path -detailed
|
||||
}
|
||||
|
||||
$version = '1.0'
|
||||
$getTargetsParam = $GetTargetEditions.IsPresent
|
||||
$stageCurrentParam = $StageCurrent.IsPresent
|
||||
|
||||
if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) {
|
||||
Write-Usage
|
||||
Exit 1
|
||||
}
|
||||
|
||||
$removalCandidates = @();
|
||||
$installCandidates = @{};
|
||||
|
||||
$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' }
|
||||
foreach($package in $packages) {
|
||||
$state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState
|
||||
$packageName = ($package.Name -split '\\')[-1]
|
||||
$packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1]
|
||||
|
||||
if($state -eq 0x40) {
|
||||
if($null -eq $installCandidates[$packageEdition]) {
|
||||
$installCandidates[$packageEdition] = @()
|
||||
}
|
||||
|
||||
if($false -eq ($installCandidates[$packageEdition] -contains $packageName)) {
|
||||
$installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName)
|
||||
}
|
||||
}
|
||||
|
||||
if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($removalCandidates -contains $packageName))) {
|
||||
$removalCandidates = $removalCandidates + @($packageName)
|
||||
}
|
||||
}
|
||||
|
||||
if($getTargetsParam) {
|
||||
Write-UpgradeCandidates -InstallCandidates $installCandidates
|
||||
Exit
|
||||
}
|
||||
|
||||
if($false -eq ($installCandidates.Keys -contains $SetEdition)) {
|
||||
Write-Error "The system cannot be upgraded to `"$SetEdition`""
|
||||
Exit 1
|
||||
}
|
||||
|
||||
$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml'
|
||||
|
||||
Write-UpgradeXml -RemovalCandidates $removalCandidates `
|
||||
-InstallCandidates $installCandidates[$SetEdition] `
|
||||
-Stage $stageCurrentParam >$xmlPath
|
||||
|
||||
$editionXml = Find-EditionXml -Edition $SetEdition
|
||||
if($null -eq $editionXml) {
|
||||
Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...'
|
||||
}
|
||||
|
||||
Write-Host 'Starting the upgrade process. This may take a while...'
|
||||
|
||||
DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath
|
||||
$dismError = $LASTEXITCODE
|
||||
|
||||
Remove-Item -Path $xmlPath -Force
|
||||
|
||||
if(($dismError -ne 0) -and ($dismError -ne 3010)) {
|
||||
Write-Error 'Failed to upgrade to the target edition'
|
||||
Exit $dismError
|
||||
}
|
||||
|
||||
if($null -ne $editionXml) {
|
||||
$destination = $Env:SystemRoot + '\' + $SetEdition + '.xml'
|
||||
Copy-Item -Path $editionXml -Destination $destination
|
||||
|
||||
DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml
|
||||
$dismError = $LASTEXITCODE
|
||||
|
||||
if(($dismError -ne 0) -and ($dismError -ne 3010)) {
|
||||
Write-Error 'Failed to apply edition specific settings'
|
||||
Exit $dismError
|
||||
}
|
||||
}
|
||||
|
||||
Restart-Computer
|
||||
:cbsxml:]
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: 1st column = Generic Retail/OEM/MAK/GVLK Key
|
||||
:: 2nd column = Key Type
|
||||
:: 3rd column = WMI Edition ID
|
||||
@ -643,44 +956,47 @@ exit /b
|
||||
|
||||
:changeeditiondata
|
||||
|
||||
set h=
|
||||
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
|
||||
44N%h%YX-TK%h%R9D-CCM2%h%D-V6%h%B8F-HQ%h%WWR__Volume:MAK_Enterprise
|
||||
D6R%h%D9-D4%h%N8T-RT9Q%h%X-YW%h%6YT-FC%h%WWJ______Retail_Starter
|
||||
3V6%h%Q6-NQ%h%XCX-V8YX%h%R-9Q%h%CYV-QP%h%FCT__Volume:MAK_EnterpriseN
|
||||
3NF%h%XW-2T%h%27M-2BDW%h%6-4G%h%HRV-68%h%XRX______Retail_StarterN
|
||||
VK7%h%JG-NP%h%HTM-C97J%h%M-9M%h%PGT-3V%h%66T______Retail_Professional
|
||||
2B8%h%7N-8K%h%FHP-DKV6%h%R-Y2%h%C8J-PK%h%CKT______Retail_ProfessionalN
|
||||
4CP%h%RK-NM%h%3K3-X6XX%h%Q-RX%h%X86-WX%h%CHW______Retail_CoreN
|
||||
N24%h%34-X9%h%D7W-8PF6%h%X-8D%h%V9T-8T%h%YMD______Retail_CoreCountrySpecific
|
||||
BT7%h%9Q-G7%h%N6G-PGBY%h%W-4Y%h%WX6-6F%h%4BT______Retail_CoreSingleLanguage
|
||||
YTM%h%G3-N6%h%DKC-DKB7%h%7-7M%h%9GH-8H%h%VX7______Retail_Core
|
||||
XKC%h%NC-J2%h%6Q9-KFHD%h%2-FK%h%THY-KD%h%72Y__OEM:NONSLP_PPIPro
|
||||
YNM%h%GQ-8R%h%YV3-4PGQ%h%3-C8%h%XTP-7C%h%FBY______Retail_Education
|
||||
84N%h%GF-MH%h%BT6-FXBX%h%8-QW%h%JK7-DR%h%R8H______Retail_EducationN
|
||||
KCN%h%VH-YK%h%WX8-GJJB%h%9-H9%h%FDT-6F%h%7W2__Volume:MAK_EnterpriseS_VB
|
||||
VBX%h%36-N7%h%DDY-M9H6%h%2-83%h%BMJ-CP%h%R42__Volume:MAK_EnterpriseS_RS5
|
||||
PN3%h%KR-JX%h%M7T-46HM%h%4-MC%h%QGK-7X%h%PJQ__Volume:MAK_EnterpriseS_RS1
|
||||
DVW%h%KN-3G%h%CMV-Q2XF%h%4-DD%h%PGM-VQ%h%WWY__Volume:MAK_EnterpriseS_TH
|
||||
RQF%h%NW-9T%h%PM3-JQ73%h%T-QV%h%4VQ-DV%h%9PT__Volume:MAK_EnterpriseSN_VB
|
||||
M33%h%WV-NH%h%Y3C-R7FP%h%M-BQ%h%GPT-23%h%9PG__Volume:MAK_EnterpriseSN_RS5
|
||||
2DB%h%W3-N2%h%PJG-MVHW%h%3-G7%h%TDK-9H%h%KR4__Volume:MAK_EnterpriseSN_RS1
|
||||
NTX%h%6B-BR%h%YC2-K678%h%6-F6%h%MVQ-M7%h%V2X__Volume:MAK_EnterpriseSN_TH
|
||||
G3K%h%NM-CH%h%G6T-R36X%h%3-9Q%h%DG6-8M%h%8K9______Retail_ProfessionalSingleLanguage
|
||||
HNG%h%CC-Y3%h%8KG-QVK8%h%D-WM%h%WRK-X8%h%6VK______Retail_ProfessionalCountrySpecific
|
||||
DXG%h%7C-N3%h%6C4-C4HT%h%G-X4%h%T3X-2Y%h%V77______Retail_ProfessionalWorkstation
|
||||
WYP%h%NQ-8C%h%467-V2W6%h%J-TX%h%4WX-WT%h%2RQ______Retail_ProfessionalWorkstationN
|
||||
8PT%h%T6-RN%h%W4C-6V7J%h%2-C2%h%D3X-MH%h%BPB______Retail_ProfessionalEducation
|
||||
GJT%h%YN-HD%h%MQY-FRR7%h%6-HV%h%GC7-QP%h%F8P______Retail_ProfessionalEducationN
|
||||
C4N%h%TJ-CX%h%6Q2-VXDM%h%R-XV%h%KGM-F9%h%DJC__Volume:MAK_EnterpriseG
|
||||
46P%h%N6-R9%h%BK9-CVHK%h%B-HW%h%Q9V-MB%h%JY8__Volume:MAK_EnterpriseGN
|
||||
NJC%h%F7-PW%h%8QT-3324%h%D-68%h%8JX-2Y%h%V66______Retail_ServerRdsh
|
||||
V3W%h%VW-N2%h%PV2-CGWC%h%3-34%h%QGF-VM%h%J2C______Retail_Cloud
|
||||
NH9%h%J3-68%h%WK7-6FB9%h%3-4K%h%3DF-DJ%h%4F6______Retail_CloudN
|
||||
2HN%h%6V-HG%h%TM8-6C97%h%C-RK%h%67V-JQ%h%PFD______Retail_CloudE
|
||||
XQQ%h%YW-NF%h%FMW-XJPB%h%H-K8%h%732-CK%h%FFD______OEM:DM_IoTEnterprise
|
||||
QPM%h%6N-7J%h%2WJ-P88H%h%H-P3%h%YRH-YY%h%74H__OEM:NONSLP_IoTEnterpriseS_VB
|
||||
KBN%h%8V-HF%h%GQ4-MGXV%h%D-34%h%7P6-PD%h%QGT_Volume:GVLK_IoTEnterpriseS_NI
|
||||
K9V%h%KN-3B%h%GWV-Y624%h%W-MC%h%RMQ-BH%h%DCD______Retail_CloudEditionN
|
||||
KY7%h%PN-VR%h%6RX-83W6%h%Y-6D%h%DYQ-T6%h%R4W______Retail_CloudEdition
|
||||
MPB%h%3G-XN%h%BR7-CC43%h%M-FG%h%64B-F9%h%GBK______Retail_IoTEnterpriseSK
|
||||
) do (
|
||||
for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
|
||||
|
||||
@ -689,7 +1005,7 @@ 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")
|
||||
echo "%branch%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B")
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -701,21 +1017,21 @@ 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
|
||||
|
||||
set h=
|
||||
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
|
||||
WC2%h%BQ-8N%h%RM3-FDD%h%YY-2B%h%FGV-KHK%h%QY_RS1_ServerStandard%Cor%
|
||||
CB7%h%KF-BW%h%N84-R7R%h%2Y-79%h%3K2-8XD%h%DG_RS1_ServerDatacenter%Cor%
|
||||
JCK%h%RF-N3%h%7P4-C2D%h%82-9Y%h%XRT-4M6%h%3B_RS1_ServerSolution
|
||||
QN4%h%C6-GB%h%JD2-FB4%h%22-GH%h%WJK-GJG%h%2R_RS1_ServerCloudStorage
|
||||
VP3%h%4G-4N%h%PPG-79J%h%TQ-86%h%4T4-R3M%h%QX_RS1_ServerAzureCor
|
||||
9JQ%h%NQ-V8%h%HQ6-PKB%h%8H-GG%h%HRY-R62%h%H6_RS1_ServerAzureNano
|
||||
VN8%h%D3-PR%h%82H-DB6%h%BJ-J9%h%P4M-92F%h%6J_RS1_ServerStorageStandard
|
||||
48T%h%QX-NV%h%K3R-D8Q%h%R3-GT%h%HHM-8FH%h%XC_RS1_ServerStorageWorkgroup
|
||||
2HX%h%DN-KR%h%XHB-GPY%h%C7-YC%h%KFJ-7FV%h%DG_RS3_ServerDatacenterACor
|
||||
PTX%h%N8-JF%h%HJM-4WC%h%78-MP%h%CBR-9W4%h%KR_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")
|
||||
|
@ -42,10 +42,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
|
@ -70,10 +70,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
@ -86,7 +85,9 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "Com
|
||||
|
||||
if %_cwmi% EQU 0 (
|
||||
echo:
|
||||
echo Error: wmic.exe is not responding in the system.
|
||||
echo Error: WMI is not responding in the system.
|
||||
echo:
|
||||
echo In MAS, Goto Troubleshoot and run Fix WMI option.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
@ -362,7 +363,7 @@ exit /b
|
||||
function PrintModePerPridFromRegistry
|
||||
{
|
||||
$vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext"
|
||||
$vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_ -Ne 'InstalledGraceKey' -And $_ -Ne 'MigrationToV5Done' -And $_ -Ne 'test' -And $_ -Ne 'unknown'}
|
||||
$vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}
|
||||
If ($vNextPrids -Eq $null)
|
||||
{
|
||||
Write-Host "No registry keys found."
|
||||
@ -457,15 +458,20 @@ function PrintLicensesInformation
|
||||
$license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License
|
||||
$decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json
|
||||
$licenseType = $decodedLicense.LicenseType
|
||||
$userId = $decodedLicense.Metadata.UserId
|
||||
$identitiesRegkey = Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\${userId}*" -ErrorAction Ignore
|
||||
If ($null -Ne $decodedLicense.ExpiresOn)
|
||||
{
|
||||
$expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48)
|
||||
}
|
||||
Else
|
||||
{
|
||||
$expiry = New-Object DateTime
|
||||
}
|
||||
$licenseState = $null
|
||||
If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter))
|
||||
{
|
||||
$licenseState = "RFM"
|
||||
}
|
||||
ElseIf (($decodedLicense.ExpiresOn -Eq $null) -Or
|
||||
((Get-Date) -Lt (Get-Date $decodedLicense.ExpiresOn)))
|
||||
ElseIf ((Get-Date) -Lt (Get-Date $expiry))
|
||||
{
|
||||
$licenseState = "Licensed"
|
||||
}
|
||||
@ -483,11 +489,11 @@ function PrintLicensesInformation
|
||||
Acid = $decodedLicense.Acid;
|
||||
LicenseState = $licenseState;
|
||||
EntitlementStatus = $decodedLicense.Status;
|
||||
EntitlementExpiration = $decodedLicense.ExpiresOn;
|
||||
ReasonCode = $decodedLicense.ReasonCode;
|
||||
NotBefore = $decodedLicense.Metadata.NotBefore;
|
||||
NotAfter = $decodedLicense.Metadata.NotAfter;
|
||||
NextRenewal = $decodedLicense.Metadata.RenewAfter;
|
||||
Expiration = $decodedLicense.ExpiresOn;
|
||||
TenantId = $decodedLicense.Metadata.TenantId;
|
||||
} | ConvertTo-Json
|
||||
}
|
||||
@ -502,11 +508,11 @@ function PrintLicensesInformation
|
||||
DeviceId = $decodedLicense.Metadata.DeviceId;
|
||||
LicenseState = $licenseState;
|
||||
EntitlementStatus = $decodedLicense.Status;
|
||||
EntitlementExpiration = $decodedLicense.ExpiresOn;
|
||||
ReasonCode = $decodedLicense.ReasonCode;
|
||||
NotBefore = $decodedLicense.Metadata.NotBefore;
|
||||
NotAfter = $decodedLicense.Metadata.NotAfter;
|
||||
NextRenewal = $decodedLicense.Metadata.RenewAfter;
|
||||
Expiration = $decodedLicense.ExpiresOn;
|
||||
TenantId = $decodedLicense.Metadata.TenantId;
|
||||
} | ConvertTo-Json
|
||||
}
|
||||
|
@ -53,10 +53,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
@ -114,22 +113,12 @@ goto done2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Check desktop location
|
||||
:: Fix for the special characters limitation in path name
|
||||
|
||||
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 done2
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Fix for the special characters limitation in path name
|
||||
|
||||
set "_work=%~dp0"
|
||||
if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
|
||||
|
||||
@ -137,6 +126,7 @@ set "_batf=%~f0"
|
||||
set "_batp=%_batf:'=''%"
|
||||
set "_pdesk=%desktop:'=''%"
|
||||
|
||||
set _PSarg="""%~f0""" -el %_args%
|
||||
set "_ttemp=%temp%"
|
||||
|
||||
set "_dir=%desktop%\$OEM$\$$\Setup\Scripts"
|
||||
@ -145,14 +135,6 @@ setlocal EnableDelayedExpansion
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if not exist "!desktop!\" (
|
||||
%eline%
|
||||
echo Desktop location was not detected, aborting...
|
||||
goto done2
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
echo "!_batf!" | find /i "!_ttemp!" 1>nul && (
|
||||
if /i not "!_work!"=="!_ttemp!" (
|
||||
%eline%
|
||||
@ -166,7 +148,27 @@ goto done2
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
mode 66, 26
|
||||
:: Elevate script as admin and pass arguments and preventing loop
|
||||
|
||||
>nul fltmc || (
|
||||
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 done2
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if not exist "!desktop!\" (
|
||||
%eline%
|
||||
echo Desktop location was not detected, aborting...
|
||||
goto done2
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
mode con cols=78 lines=30
|
||||
|
||||
if exist "!desktop!\$OEM$\" (
|
||||
echo _____________________________________________________
|
||||
@ -176,14 +178,9 @@ echo _____________________________________________________
|
||||
goto done2
|
||||
)
|
||||
|
||||
set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd
|
||||
set KMS38_Activation.cmd=HWID-KMS38_Activation\KMS38_Activation.cmd
|
||||
set ClipUp.exe=HWID-KMS38_Activation\BIN\ClipUp.exe
|
||||
set gatherosstate.exe=HWID-KMS38_Activation\BIN\gatherosstate.exe
|
||||
|
||||
set Activate.cmd=Online_KMS_Activation\Activate.cmd
|
||||
set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe
|
||||
set cleanosppx86.exe=Online_KMS_Activation\BIN\cleanosppx86.exe
|
||||
set HWID_Activation.cmd=Activators\HWID_Activation.cmd
|
||||
set KMS38_Activation.cmd=Activators\KMS38_Activation.cmd
|
||||
set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd
|
||||
|
||||
pushd "!_work!"
|
||||
|
||||
@ -191,11 +188,7 @@ set _nofile=
|
||||
for %%# in (
|
||||
%HWID_Activation.cmd%
|
||||
%KMS38_Activation.cmd%
|
||||
%ClipUp.exe%
|
||||
%gatherosstate.exe%
|
||||
%Activate.cmd%
|
||||
%cleanosppx64.exe%
|
||||
%cleanosppx86.exe%
|
||||
%Online_KMS_Activation.cmd%
|
||||
) do (
|
||||
if not exist "%%#" set _nofile=1
|
||||
)
|
||||
@ -215,25 +208,27 @@ goto done2
|
||||
:Menu
|
||||
|
||||
cls
|
||||
mode con cols=78 lines=30
|
||||
echo:
|
||||
echo:
|
||||
echo:
|
||||
echo:
|
||||
echo: Extract $OEM$ folder on the desktop
|
||||
echo: ________________________________________________________
|
||||
echo:
|
||||
echo: [1] HWID
|
||||
echo: [2] KMS38
|
||||
echo: [3] Online KMS
|
||||
echo:
|
||||
echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
||||
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
||||
echo:
|
||||
echo: [6] Exit
|
||||
echo: ________________________________________________________
|
||||
echo: Extract $OEM$ folder on the desktop
|
||||
echo: ________________________________________________________
|
||||
echo:
|
||||
echo: [1] HWID
|
||||
echo: [2] KMS38
|
||||
echo: [3] Online KMS
|
||||
echo:
|
||||
echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^)
|
||||
echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^)
|
||||
echo:
|
||||
echo: [0] Exit
|
||||
echo: ________________________________________________________
|
||||
echo:
|
||||
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6]"
|
||||
choice /C:123456 /N
|
||||
call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,0]"
|
||||
choice /C:123450 /N
|
||||
set _erl=%errorlevel%
|
||||
|
||||
if %_erl%==6 exit /b
|
||||
@ -249,14 +244,18 @@ goto :Menu
|
||||
:hwid
|
||||
|
||||
cls
|
||||
call :prep
|
||||
call :hwidprep
|
||||
call :pop_d
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export hwid_setup
|
||||
call :hwidprep2
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
set "_oem=HWID"
|
||||
|
||||
set oem=HWID
|
||||
goto done
|
||||
|
||||
:hwid_setup:
|
||||
@ -264,7 +263,7 @@ goto done
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
@ -275,14 +274,18 @@ cd \
|
||||
:kms38
|
||||
|
||||
cls
|
||||
call :prep
|
||||
call :kms38prep
|
||||
call :pop_d
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export kms38_setup
|
||||
call :kms38prep2
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
set "_oem=KMS38"
|
||||
|
||||
set oem=KMS38
|
||||
goto done
|
||||
|
||||
:kms38_setup:
|
||||
@ -290,7 +293,7 @@ goto done
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
@ -301,14 +304,18 @@ cd \
|
||||
:kms
|
||||
|
||||
cls
|
||||
call :prep
|
||||
call :kmsprep
|
||||
call :pop_d
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export kms_setup
|
||||
call :kmsprep2
|
||||
|
||||
if defined _kerror goto errorfound
|
||||
set "_oem=Online KMS"
|
||||
set _error=
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
|
||||
set oem=Online KMS
|
||||
goto done
|
||||
|
||||
:kms_setup:
|
||||
@ -316,8 +323,7 @@ goto done
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /wo
|
||||
start /b /wait cmd /c "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-WindowsOffice
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
@ -328,17 +334,20 @@ cd \
|
||||
:hwid_kms
|
||||
|
||||
cls
|
||||
call :prep
|
||||
call :hwidprep
|
||||
call :kmsprep
|
||||
call :pop_d
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export hwid_kms_setup
|
||||
call :hwidprep2
|
||||
call :kmsprep2
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\HWID_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
if defined _kerror goto errorfound
|
||||
set "_oem=HWID [Windows] + Online KMS [Office]"
|
||||
|
||||
set oem=HWID [Windows] + Online KMS [Office]
|
||||
goto done
|
||||
|
||||
:hwid_kms_setup:
|
||||
@ -346,10 +355,9 @@ goto done
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a
|
||||
start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID
|
||||
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
||||
start /b /wait cmd /c "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Office
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
@ -360,17 +368,20 @@ cd \
|
||||
:kms38_kms
|
||||
|
||||
cls
|
||||
call :prep
|
||||
call :kms38prep
|
||||
call :kmsprep
|
||||
call :pop_d
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts"
|
||||
pushd "!_work!"
|
||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||
copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
|
||||
popd
|
||||
call :export kms38_kms_setup
|
||||
call :kms38prep2
|
||||
call :kmsprep2
|
||||
|
||||
set _error=
|
||||
if not exist "!_dir!\KMS38_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
|
||||
if not exist "!_dir!\SetupComplete.cmd" set _error=1
|
||||
if defined _error goto errorfound
|
||||
if defined _kerror goto errorfound
|
||||
set "_oem=KMS38 [Windows] + Online KMS [Office]"
|
||||
|
||||
set oem=KMS38 [Windows] + Online KMS [Office]
|
||||
goto done
|
||||
|
||||
:kms38_kms_setup:
|
||||
@ -378,10 +389,9 @@ goto done
|
||||
|
||||
fltmc >nul || exit /b
|
||||
|
||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a
|
||||
start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38
|
||||
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /rat
|
||||
start /b /wait cmd /c "%~dp0Activate.cmd" /o
|
||||
start /b /wait cmd /c "%~dp0Online_KMS_Activation.cmd" /KMS-ActAndRenewalTask /KMS-Office
|
||||
|
||||
cd \
|
||||
(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
|
||||
@ -397,11 +407,16 @@ goto :done2
|
||||
|
||||
:done
|
||||
|
||||
echo _______________________________________________________
|
||||
echo ______________________________________________________________
|
||||
echo:
|
||||
call :ex_color %Magenta% "%_oem%"
|
||||
call :ex_color %Magenta% "%oem%"
|
||||
call :ex_color %Green% "$OEM$ folder is successfully created on the Desktop."
|
||||
echo _______________________________________________________
|
||||
echo "%oem%" | find /i "38" %nul% && (
|
||||
echo:
|
||||
echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^),
|
||||
echo Check this page https://massgrave.dev/oem-folder
|
||||
)
|
||||
echo ______________________________________________________________
|
||||
|
||||
:done2
|
||||
|
||||
@ -412,88 +427,6 @@ exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:prep
|
||||
|
||||
pushd "!desktop!"
|
||||
md "!desktop!\$OEM$\$$\Setup\Scripts\BIN"
|
||||
pushd "!_work!"
|
||||
exit /b
|
||||
|
||||
:hwidprep
|
||||
|
||||
copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
|
||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
||||
exit /b
|
||||
|
||||
:kms38prep
|
||||
|
||||
copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul%
|
||||
copy /y /b "%ClipUp.exe%" "!_dir!\BIN\ClipUp.exe" %nul%
|
||||
copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul%
|
||||
exit /b
|
||||
|
||||
:kmsprep
|
||||
|
||||
copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul%
|
||||
copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul%
|
||||
copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul%
|
||||
exit /b
|
||||
|
||||
:hwidprep2
|
||||
|
||||
set _error=
|
||||
pushd "!_dir!\"
|
||||
|
||||
for %%# in (
|
||||
HWID_Activation.cmd
|
||||
BIN\gatherosstate.exe
|
||||
SetupComplete.cmd
|
||||
) do (
|
||||
if not exist "%%#" set _error=1
|
||||
)
|
||||
popd
|
||||
exit /b
|
||||
|
||||
:kms38prep2
|
||||
|
||||
set _error=
|
||||
pushd "!_dir!\"
|
||||
|
||||
for %%# in (
|
||||
KMS38_Activation.cmd
|
||||
BIN\ClipUp.exe
|
||||
BIN\gatherosstate.exe
|
||||
SetupComplete.cmd
|
||||
) do (
|
||||
if not exist "%%#" set _error=1
|
||||
)
|
||||
popd
|
||||
exit /b
|
||||
|
||||
:kmsprep2
|
||||
|
||||
set _kerror=
|
||||
pushd "!_dir!\"
|
||||
|
||||
for %%# in (
|
||||
Activate.cmd
|
||||
BIN\cleanosppx64.exe
|
||||
BIN\cleanosppx86.exe
|
||||
SetupComplete.cmd
|
||||
) do (
|
||||
if not exist "%%#" set _kerror=1
|
||||
)
|
||||
popd
|
||||
exit /b
|
||||
|
||||
:pop_d
|
||||
|
||||
popd
|
||||
popd
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Extract the text from batch script without character and file encoding issue
|
||||
|
||||
:export
|
||||
|
Binary file not shown.
@ -1,22 +0,0 @@
|
||||
=================================================================================
|
||||
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.
|
||||
|
||||
=================================================================================
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
|
||||
:: For unattended mode, run the script with /u parameter.
|
||||
:: For unattended mode, run the script with "/Insert-HWID-Key" parameter
|
||||
|
||||
|
||||
|
||||
@ -56,10 +56,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
@ -69,7 +68,7 @@ popd
|
||||
|
||||
cls
|
||||
color 07
|
||||
title Install Windows Retail/OEM/MAK Key
|
||||
title Install Windows HWID Key
|
||||
|
||||
set _args=
|
||||
set _elev=
|
||||
@ -80,7 +79,7 @@ if defined _args set _args=%_args:"=%
|
||||
if defined _args (
|
||||
for %%A in (%_args%) do (
|
||||
if /i "%%A"=="-el" set _elev=1
|
||||
if /i "%%A"=="/u" set _unattended=1
|
||||
if /i "%%A"=="/Insert-HWID-Key" set _unattended=1
|
||||
)
|
||||
)
|
||||
|
||||
@ -111,13 +110,20 @@ set "_Yellow="Black" "Yellow""
|
||||
set "nceline=echo: &echo ==== ERROR ==== &echo:"
|
||||
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
|
||||
set "line=echo ___________________________________________________________________________________________"
|
||||
if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %winbuild% LSS 10240 (
|
||||
%eline%
|
||||
echo Unsupported OS version detected.
|
||||
echo Project is supported for Windows 10/11.
|
||||
echo This option is supported only for Windows 10/11.
|
||||
goto ins_done
|
||||
)
|
||||
|
||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||
%eline%
|
||||
echo HWID Activation is not supported for Windows Server.
|
||||
goto ins_done
|
||||
)
|
||||
|
||||
@ -160,7 +166,7 @@ goto ins_done
|
||||
|
||||
:: Elevate script as admin and pass arguments and preventing loop
|
||||
|
||||
%nul% reg query HKU\S-1-5-19 || (
|
||||
>nul fltmc || (
|
||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||
%eline%
|
||||
echo This script require administrator privileges.
|
||||
@ -172,13 +178,11 @@ goto ins_done
|
||||
|
||||
cls
|
||||
mode 98, 30
|
||||
|
||||
call :dk_initial
|
||||
|
||||
:: Check product name
|
||||
|
||||
cls
|
||||
echo:
|
||||
echo Initializing...
|
||||
call :dk_product
|
||||
call :dk_ckeckwmic
|
||||
call :dk_actids
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -206,34 +210,23 @@ goto ins_done
|
||||
:: Detect key
|
||||
|
||||
set key=
|
||||
set pkey=
|
||||
set _chan=
|
||||
set channel=
|
||||
set actidnotfound=
|
||||
|
||||
if defined applist call :hwiddata attempt1
|
||||
if not defined key call :hwiddata attempt2
|
||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
|
||||
|
||||
set pkey=
|
||||
if not defined key call :dk_hwidkey %nul%
|
||||
if defined applist call :hwidkey key attempt1
|
||||
if not defined key call :hwidkey key attempt2
|
||||
|
||||
if not defined key (
|
||||
%eline%
|
||||
%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
|
||||
echo PowerShell is not responding properly.
|
||||
echo:
|
||||
)
|
||||
echo Unable to find HWID key for [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||
echo Make sure you are using updated version of the script
|
||||
echo:
|
||||
if not "%regSKU%"=="%wmiSKU%" (
|
||||
echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
|
||||
echo Restart the system and try again.
|
||||
)
|
||||
echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
|
||||
echo Unable to find this product in the HWID supported product list.
|
||||
echo Make sure you are using updated version of the script.
|
||||
echo https://massgrave.dev
|
||||
goto ins_done
|
||||
)
|
||||
|
||||
if defined key call :dk_pkeychannel %key%
|
||||
if defined pkeychannel set _chan=%pkeychannel% Key
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
if %_unattended%==1 goto insertkey
|
||||
@ -241,19 +234,17 @@ if %_unattended%==1 goto insertkey
|
||||
cls
|
||||
%line%
|
||||
echo:
|
||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan%
|
||||
echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %channel% Key
|
||||
echo [%key%]
|
||||
%line%
|
||||
echo:
|
||||
if not "%regSKU%"=="%wmiSKU%" (
|
||||
echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
|
||||
echo Restart the system to resolve it
|
||||
echo:
|
||||
)
|
||||
call :dk_color %_Green% "Press [1] to Continue or [2] to Exit"
|
||||
choice /C:21 /N
|
||||
call :dk_color %_Green% "Press [1] to Continue or [0] to %_exitmsg%"
|
||||
choice /C:01 /N
|
||||
if %errorlevel%==1 exit /b
|
||||
cls
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -270,20 +261,18 @@ set error_code=%errorlevel%
|
||||
cmd /c exit /b %error_code%
|
||||
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
|
||||
|
||||
echo:
|
||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||
echo Installing %channel% [%key%]
|
||||
echo:
|
||||
|
||||
if %error_code% EQU 0 (
|
||||
call :dk_refresh
|
||||
echo:
|
||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||
echo Installing %_chan% [%key%]
|
||||
echo:
|
||||
call :dk_color %Green% "[Successful]"
|
||||
) else (
|
||||
%eline%
|
||||
echo [%winos% ^| SKU:%osSKU% ^| %winbuild%]
|
||||
echo Installing %_chan% [%key%]
|
||||
echo:
|
||||
call :dk_color %Red% "[Unsuccessful] %error_code%"
|
||||
if not defined applist echo Not Respoding: %e_wmispp%
|
||||
if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key."
|
||||
echo Check this page for help https://massgrave.dev/troubleshoot
|
||||
)
|
||||
%line%
|
||||
|
||||
@ -293,7 +282,7 @@ if not defined applist echo Not Respoding: %e_wmispp%
|
||||
|
||||
echo:
|
||||
if %_unattended%==1 timeout /t 2 & exit /b
|
||||
call :dk_color %_Yellow% "Press any key to exit..."
|
||||
call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
|
||||
pause >nul
|
||||
exit /b
|
||||
|
||||
@ -317,22 +306,6 @@ if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISE
|
||||
%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
|
||||
@ -343,91 +316,32 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
|
||||
)
|
||||
exit /b
|
||||
|
||||
:dk_initial
|
||||
:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used)
|
||||
|
||||
echo:
|
||||
echo Initializing...
|
||||
:dk_product
|
||||
|
||||
:: Check and enable WinMgmt, sppsvc services if required
|
||||
call :dk_reflection
|
||||
|
||||
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
|
||||
set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3);
|
||||
set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%')
|
||||
|
||||
set winos=
|
||||
for /f "delims=" %%s in ('"%psc% %d1%"') 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!
|
||||
)
|
||||
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
|
||||
|
||||
::========================================================================================================================================
|
||||
:: Common lines used in PowerShell reflection code
|
||||
|
||||
:: Get Product Key from pkeyhelper.dll for future new editions
|
||||
:: It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later)
|
||||
:dk_reflection
|
||||
|
||||
:dk_pkey
|
||||
|
||||
set pkey=
|
||||
set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p);
|
||||
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k
|
||||
for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a)
|
||||
exit /b
|
||||
|
||||
:: Get channel name for the key which was extracted from pkeyhelper.dll
|
||||
|
||||
:dk_pkeychannel
|
||||
|
||||
set k=%1
|
||||
set pkeychannel=
|
||||
set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
|
||||
set m=[System.Runtime.InteropServices.Marshal]
|
||||
set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f);
|
||||
set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272);
|
||||
set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','')
|
||||
for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a)
|
||||
exit /b
|
||||
|
||||
:dk_hwidkey
|
||||
|
||||
for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
|
||||
for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do (
|
||||
call :dk_pkey %osSKU% '%%#'
|
||||
if defined pkey call :dk_pkeychannel !pkey!
|
||||
if /i [!pkeychannel!]==[%%#] (
|
||||
set key=!pkey!
|
||||
exit /b
|
||||
)
|
||||
)
|
||||
set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1);
|
||||
set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False);
|
||||
set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0);
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -446,76 +360,78 @@ exit /b
|
||||
:: 1st column = Activation ID
|
||||
:: 2nd column = Generic Retail/OEM/MAK 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
|
||||
:: 4th column = Key Type
|
||||
:: 5th column = WMI Edition ID
|
||||
:: 6th 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 > OEM:NONSLP > OEM:DM > Volume:MAK
|
||||
|
||||
:hwidkey
|
||||
|
||||
:hwiddata
|
||||
|
||||
set f=
|
||||
for %%# in (
|
||||
8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_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
|
||||
d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019
|
||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016
|
||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_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
|
||||
1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG
|
||||
8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_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
|
||||
8b351c9c-f398-4515-9900-09df49427262_XGV%f%PP-NM%f%H47-7TTH%f%J-W3F%f%W7-8HV%f%2C___4_OEM:NONSLP_Enterprise
|
||||
c83cef07-6b72-4bbc-a28f-a00386872839_3V6%f%Q6-NQ%f%XCX-V8YX%f%R-9QC%f%YV-QPF%f%CT__27_Volume:MAK_EnterpriseN
|
||||
4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7%f%JG-NP%f%HTM-C97J%f%M-9MP%f%GT-3V6%f%6T__48_____Retail_Professional
|
||||
9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B8%f%7N-8K%f%FHP-DKV6%f%R-Y2C%f%8J-PKC%f%KT__49_____Retail_ProfessionalN
|
||||
f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CP%f%RK-NM%f%3K3-X6XX%f%Q-RXX%f%86-WXC%f%HW__98_____Retail_CoreN
|
||||
1d1bac85-7365-4fea-949a-96978ec91ae0_N24%f%34-X9%f%D7W-8PF6%f%X-8DV%f%9T-8TY%f%MD__99_____Retail_CoreCountrySpecific
|
||||
3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT7%f%9Q-G7%f%N6G-PGBY%f%W-4YW%f%X6-6F4%f%BT_100_____Retail_CoreSingleLanguage
|
||||
2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTM%f%G3-N6%f%DKC-DKB7%f%7-7M9%f%GH-8HV%f%X7_101_____Retail_Core
|
||||
2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKC%f%NC-J2%f%6Q9-KFHD%f%2-FKT%f%HY-KD7%f%2Y_119_OEM:NONSLP_PPIPro
|
||||
e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNM%f%GQ-8R%f%YV3-4PGQ%f%3-C8X%f%TP-7CF%f%BY_121_____Retail_Education
|
||||
c5198a66-e435-4432-89cf-ec777c9d0352_84N%f%GF-MH%f%BT6-FXBX%f%8-QWJ%f%K7-DRR%f%8H_122_____Retail_EducationN
|
||||
cce9d2de-98ee-4ce2-8113-222620c64a27_KCN%f%VH-YK%f%WX8-GJJB%f%9-H9F%f%DT-6F7%f%W2_125_Volume:MAK_EnterpriseS_VB
|
||||
d06934ee-5448-4fd1-964a-cd077618aa06_43T%f%BQ-NH%f%92J-XKTM%f%7-KT3%f%KK-P39%f%PB_125_OEM:NONSLP_EnterpriseS_RS5
|
||||
706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK9%f%6Y-D9%f%CD8-W44C%f%Q-R8Y%f%TK-DYJ%f%WX_125_OEM:NONSLP_EnterpriseS_RS1
|
||||
faa57748-75c8-40a2-b851-71ce92aa8b45_FWN%f%7H-PF%f%93Q-4GGP%f%8-M8R%f%F3-MDW%f%WW_125_OEM:NONSLP_EnterpriseS_TH
|
||||
2c060131-0e43-4e01-adc1-cf5ad1100da8_RQF%f%NW-9T%f%PM3-JQ73%f%T-QV4%f%VQ-DV9%f%PT_126_Volume:MAK_EnterpriseSN_VB
|
||||
e8f74caa-03fb-4839-8bcc-2e442b317e53_M33%f%WV-NH%f%Y3C-R7FP%f%M-BQG%f%PT-239%f%PG_126_Volume:MAK_EnterpriseSN_RS5
|
||||
3d1022d8-969f-4222-b54b-327f5a5af4c9_2DB%f%W3-N2%f%PJG-MVHW%f%3-G7T%f%DK-9HK%f%R4_126_Volume:MAK_EnterpriseSN_RS1
|
||||
60c243e1-f90b-4a1b-ba89-387294948fb6_NTX%f%6B-BR%f%YC2-K678%f%6-F6M%f%VQ-M7V%f%2X_126_Volume:MAK_EnterpriseSN_TH
|
||||
eb6d346f-1c60-4643-b960-40ec31596c45_DXG%f%7C-N3%f%6C4-C4HT%f%G-X4T%f%3X-2YV%f%77_161_____Retail_ProfessionalWorkstation
|
||||
89e87510-ba92-45f6-8329-3afa905e3e83_WYP%f%NQ-8C%f%467-V2W6%f%J-TX4%f%WX-WT2%f%RQ_162_____Retail_ProfessionalWorkstationN
|
||||
62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PT%f%T6-RN%f%W4C-6V7J%f%2-C2D%f%3X-MHB%f%PB_164_____Retail_ProfessionalEducation
|
||||
13a38698-4a49-4b9e-8e83-98fe51110953_GJT%f%YN-HD%f%MQY-FRR7%f%6-HVG%f%C7-QPF%f%8P_165_____Retail_ProfessionalEducationN
|
||||
df96023b-dcd9-4be2-afa0-c6c871159ebe_NJC%f%F7-PW%f%8QT-3324%f%D-688%f%JX-2YV%f%66_175_____Retail_ServerRdsh
|
||||
d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3W%f%VW-N2%f%PV2-CGWC%f%3-34Q%f%GF-VMJ%f%2C_178_____Retail_Cloud
|
||||
af5c9381-9240-417d-8d35-eb40cd03e484_NH9%f%J3-68%f%WK7-6FB9%f%3-4K3%f%DF-DJ4%f%F6_179_____Retail_CloudN
|
||||
8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQ%f%YW-NF%f%FMW-XJPB%f%H-K87%f%32-CKF%f%FD_188_____OEM:DM_IoTEnterprise
|
||||
ed655016-a9e8-4434-95d9-4345352c2552_QPM%f%6N-7J%f%2WJ-P88H%f%H-P3Y%f%RH-YY7%f%4H_191_OEM:NONSLP_IoTEnterpriseS_VB
|
||||
d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9V%f%KN-3B%f%GWV-Y624%f%W-MCR%f%MQ-BHD%f%CD_202_____Retail_CloudEditionN
|
||||
92fb8726-92a8-4ffc-94ce-f82e07444653_KY7%f%PN-VR%f%6RX-83W6%f%Y-6DD%f%YQ-T6R%f%4W_203_____Retail_CloudEdition
|
||||
d4f9b41f-205c-405e-8e08-3d16e88e02be_J7N%f%JW-V6%f%KBM-CC8R%f%W-Y29%f%Y4-HQ2%f%MJ_205_OEM:NONSLP_IoTEnterpriseSK
|
||||
) do (
|
||||
for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
|
||||
for /f "tokens=1-6 delims=_" %%A in ("%%#") do (
|
||||
|
||||
if %1==attempt1 if not defined key (
|
||||
if %1==key if %osSKU%==%%C (
|
||||
|
||||
REM Detect key attempt 1
|
||||
|
||||
if "%2"=="attempt1" if not defined key (
|
||||
echo "!applist!" | find /i "%%A" 1>nul && (
|
||||
set key=%%B
|
||||
set channel=%%D
|
||||
)
|
||||
)
|
||||
|
||||
if %1==attempt2 if not defined key (
|
||||
set 7th=%%G
|
||||
if not defined 7th (
|
||||
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
|
||||
if not defined key set key=%%B
|
||||
REM Detect key attempt 2
|
||||
|
||||
if "%2"=="attempt2" if not defined key (
|
||||
set actidnotfound=1
|
||||
set 6th=%%F
|
||||
if not defined 6th (
|
||||
set key=%%B
|
||||
set channel=%%D
|
||||
) else (
|
||||
echo "%winos%" | find /i "%%G" 1>nul && (
|
||||
if %winbuild% GTR 19044 call :dk_hwidkey %nul%
|
||||
if not defined key set key=%%B
|
||||
echo "%branch%" | find /i "%%F" 1>nul && (
|
||||
set key=%%B
|
||||
set channel=%%D
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
)
|
||||
)
|
||||
exit /b
|
||||
|
@ -1,15 +0,0 @@
|
||||
====================================================================================================
|
||||
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
|
||||
|
||||
====================================================================================================
|
Binary file not shown.
Binary file not shown.
@ -53,10 +53,9 @@ 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 Error: Script either has LF line ending issue, or it failed to read itself.
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
pause >nul
|
||||
ping 127.0.0.1 -n 6 > nul
|
||||
popd
|
||||
exit /b
|
||||
)
|
||||
@ -66,7 +65,7 @@ popd
|
||||
|
||||
cls
|
||||
color 07
|
||||
title Activation Troubleshoot
|
||||
title Troubleshoot
|
||||
|
||||
set _elev=
|
||||
if /i "%~1"=="-el" set _elev=1
|
||||
@ -86,6 +85,7 @@ 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 %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -135,7 +135,7 @@ goto at_done
|
||||
|
||||
:: Elevate script as admin and pass arguments and preventing loop
|
||||
|
||||
%nul% reg query HKU\S-1-5-19 || (
|
||||
>nul fltmc || (
|
||||
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
|
||||
%nceline%
|
||||
echo This script require administrator privileges.
|
||||
@ -167,7 +167,7 @@ setlocal EnableDelayedExpansion
|
||||
|
||||
cls
|
||||
color 07
|
||||
title Activation Troubleshoot
|
||||
title Troubleshoot
|
||||
mode con cols=77 lines=30
|
||||
|
||||
echo:
|
||||
@ -176,18 +176,18 @@ echo:
|
||||
echo:
|
||||
echo: _______________________________________________________________
|
||||
echo:
|
||||
echo: [1] ReadMe
|
||||
echo: ___________________________________________________
|
||||
call :_color2 %_White% " [1] " %_Green% "Help"
|
||||
echo: ___________________________________________________
|
||||
echo:
|
||||
echo: [2] Dism RestoreHealth
|
||||
echo: [3] SFC Scannow
|
||||
echo:
|
||||
echo: [4] Rebuild Licensing Tokens
|
||||
echo: [5] Clear Office vNext License
|
||||
echo: ___________________________________________________
|
||||
echo: [2] Dism RestoreHealth
|
||||
echo: [3] SFC Scannow
|
||||
echo:
|
||||
echo: [6] Solution: Office is not genuine banner
|
||||
echo: [0] Exit
|
||||
echo: [4] Fix WMI
|
||||
echo: [5] Fix Licensing
|
||||
echo: [6] Fix WPA Registry
|
||||
echo: ___________________________________________________
|
||||
echo:
|
||||
echo: [0] %_exitmsg%
|
||||
echo: _______________________________________________________________
|
||||
echo:
|
||||
call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :"
|
||||
@ -195,9 +195,9 @@ 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%==6 start https://massgrave.dev/fix-wpa-registry.html &goto at_menu
|
||||
if %_erl%==5 goto:retokens
|
||||
if %_erl%==4 goto:fixwmi
|
||||
if %_erl%==3 goto:sfcscan
|
||||
if %_erl%==2 goto:dism_rest
|
||||
if %_erl%==1 start https://massgrave.dev/troubleshoot.html &goto at_menu
|
||||
@ -209,7 +209,7 @@ goto :at_menu
|
||||
|
||||
cls
|
||||
mode 98, 30
|
||||
title Dism /Online /Cleanup-Image /RestoreHealth
|
||||
title Dism /English /Online /Cleanup-Image /RestoreHealth
|
||||
|
||||
if %winbuild% LSS 9200 (
|
||||
%eline%
|
||||
@ -219,8 +219,9 @@ 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))
|
||||
for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.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 (
|
||||
@ -242,7 +243,7 @@ call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properl
|
||||
echo:
|
||||
echo %line%
|
||||
echo:
|
||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||
choice /C:09 /N /M "> [9] Continue [0] Go back : "
|
||||
if %errorlevel%==1 goto at_menu
|
||||
|
||||
cls
|
||||
@ -256,15 +257,9 @@ 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 /english /online /cleanup-image /restorehealth
|
||||
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
|
||||
)
|
||||
dism /english /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%
|
||||
@ -295,7 +290,7 @@ echo restarting the PC after each time to completely fix everything that it
|
||||
echo:
|
||||
echo %line%
|
||||
echo:
|
||||
choice /C:29 /N /M "> [9] Continue [2] Go back : "
|
||||
choice /C:09 /N /M "> [9] Continue [0] Go back : "
|
||||
if %errorlevel%==1 goto at_menu
|
||||
|
||||
cls
|
||||
@ -312,108 +307,22 @@ 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."
|
||||
call :_color %Gray% "CBS log is 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)
|
||||
title Fix Licensing ^(ClipSVC ^+ Office vNext ^+ SPP ^+ OSPP^)
|
||||
|
||||
echo:
|
||||
echo %line%
|
||||
@ -422,21 +331,187 @@ 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 - This option will,
|
||||
echo - Deactivate Windows and Office, you may need to reactivate
|
||||
echo - Clear ClipSVC, Office vNext, SPP and OSPP licenses
|
||||
echo - Fix SPP permissions of tokens folder and registries
|
||||
echo - 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 : "
|
||||
choice /C:09 /N /M "> [9] Continue [0] Go back : "
|
||||
if %errorlevel%==1 goto at_menu
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Rebuild ClipSVC Licences
|
||||
|
||||
cls
|
||||
:cleanlicensing
|
||||
|
||||
echo:
|
||||
echo %line%
|
||||
echo:
|
||||
call :_color %Magenta% "Rebuilding ClipSVC Licences"
|
||||
echo:
|
||||
|
||||
if %winbuild% LSS 10240 (
|
||||
echo ClipSVC Licence rebuilding is supported only on Win 10/11 and Server equivalent.
|
||||
echo Skipping...
|
||||
goto :cleanvnext
|
||||
)
|
||||
|
||||
%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').Get()).Name" 2>nul | findstr /i "Windows" 1>nul && (
|
||||
echo Windows is permanently activated.
|
||||
echo Skipping rebuilding ClipSVC licences...
|
||||
goto :cleanvnext
|
||||
)
|
||||
|
||||
echo Stopping ClipSVC service...
|
||||
call :_stopservice ClipSVC
|
||||
timeout /t 2 %nul%
|
||||
|
||||
echo:
|
||||
echo Applying the command to Clean ClipSVC Licences...
|
||||
echo rundll32 clipc.dll,ClipCleanUpState
|
||||
|
||||
rundll32 clipc.dll,ClipCleanUpState
|
||||
|
||||
if %winbuild% LEQ 10240 (
|
||||
echo [Successful]
|
||||
) else (
|
||||
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
|
||||
call :_color %Red% "[Failed]"
|
||||
) else (
|
||||
echo [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"
|
||||
set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
|
||||
|
||||
reg query "%RegKey%" %nul% && %nul% call :regownstart
|
||||
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.
|
||||
) || (
|
||||
echo [Successful]
|
||||
)
|
||||
|
||||
:: Clear HWID token related registry to fix activation incase if there is any corruption
|
||||
|
||||
echo:
|
||||
echo Deleting a IdentityCRL Registry Key...
|
||||
echo [%_ident%]
|
||||
reg delete "%_ident%" /f %nul%
|
||||
reg query "%_ident%" %nul% && (
|
||||
call :_color %Red% "[Failed]"
|
||||
) || (
|
||||
echo [Successful]
|
||||
)
|
||||
|
||||
call :_stopservice ClipSVC
|
||||
|
||||
:: Rebuild ClipSVC folder to fix permission issues
|
||||
|
||||
echo:
|
||||
if %winbuild% GTR 10240 (
|
||||
echo Deleting Folder %ProgramData%\Microsoft\Windows\ClipSVC\
|
||||
rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul%
|
||||
|
||||
if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
|
||||
call :_color %Red% "[Failed]"
|
||||
) else (
|
||||
echo [Successful]
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Rebuilding Folder %ProgramData%\Microsoft\Windows\ClipSVC\
|
||||
net start ClipSVC /y %nul%
|
||||
timeout /t 3 %nul%
|
||||
if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul%
|
||||
if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
|
||||
call :_color %Red% "[Failed]"
|
||||
) else (
|
||||
echo [Successful]
|
||||
)
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Restarting [wlidsvc LicenseManager] services...
|
||||
for %%# in (wlidsvc LicenseManager) do (net stop %%# /y %nul% & net start %%# /y %nul%)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Clear Office vNext License
|
||||
|
||||
:cleanvnext
|
||||
|
||||
echo:
|
||||
echo %line%
|
||||
echo:
|
||||
call :_color %Magenta% "Clearing Office vNext License"
|
||||
echo:
|
||||
|
||||
setlocal DisableDelayedExpansion
|
||||
set "_Local=%LocalAppData%"
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul%
|
||||
attrib -R "!_Local!\Microsoft\Office\Licenses" %nul%
|
||||
|
||||
if exist "!ProgramData!\Microsoft\Office\Licenses\" (
|
||||
rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul%
|
||||
if exist "!ProgramData!\Microsoft\Office\Licenses\" (
|
||||
echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\
|
||||
) else (
|
||||
echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\
|
||||
)
|
||||
) else (
|
||||
echo Not Found - !ProgramData!\Microsoft\Office\Licenses\
|
||||
)
|
||||
|
||||
if exist "!_Local!\Microsoft\Office\Licenses\" (
|
||||
rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul%
|
||||
if exist "!_Local!\Microsoft\Office\Licenses\" (
|
||||
echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\
|
||||
) else (
|
||||
echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\
|
||||
)
|
||||
) else (
|
||||
echo Not Found - !_Local!\Microsoft\Office\Licenses\
|
||||
)
|
||||
|
||||
echo:
|
||||
for %%# in (
|
||||
HKCU\Software\Microsoft\Office\16.0\Common\Licensing
|
||||
HKCU\Software\Microsoft\Office\16.0\Registration
|
||||
) do (
|
||||
reg query %%# %nul% && (
|
||||
reg delete %%# /f %nul% && (
|
||||
echo Deleted Registry - %%#
|
||||
) || (
|
||||
echo Failed to Delete - %%#
|
||||
)
|
||||
) || (
|
||||
echo Not Found Registry - %%#
|
||||
)
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:: Rebuild SPP Tokens
|
||||
|
||||
echo:
|
||||
echo %line%
|
||||
echo:
|
||||
@ -451,6 +526,64 @@ call :_color %Red% "tokens.dat file not found."
|
||||
echo tokens.dat file: [%token%]
|
||||
)
|
||||
|
||||
if %winbuild% GEQ 14393 (
|
||||
set wpaerror=
|
||||
set /a count=0
|
||||
for /f %%a in ('reg query "HKLM\SYSTEM\WPA" 2^>nul') do set /a count+=1
|
||||
for /L %%# in (1,1,!count!) do (
|
||||
reg query "HKLM\SYSTEM\WPA\8DEC0AF1-0341-4b93-85CD-72606C2DF94C-7P-%%#" /ve /t REG_BINARY %nul% || set wpaerror=1
|
||||
)
|
||||
|
||||
if defined wpaerror (
|
||||
echo:
|
||||
echo Checking WPA Registry Keys...
|
||||
call :_color %Red% "[Error Found] [Registry Count - !count!]"
|
||||
)
|
||||
)
|
||||
|
||||
set tokenstore=
|
||||
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore 2^>nul') do call set "tokenstore=%%b"
|
||||
|
||||
:: Check sppsvc permissions and apply fixes
|
||||
|
||||
if %winbuild% GEQ 10240 (
|
||||
|
||||
echo:
|
||||
echo Checking SPP permission related issues...
|
||||
call :checkperms
|
||||
|
||||
if defined permerror (
|
||||
|
||||
mkdir "%tokenstore%" %nul%
|
||||
set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';"
|
||||
set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;"
|
||||
set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);"
|
||||
set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;"
|
||||
%psc% "!d!" %nul%
|
||||
|
||||
for %%# in (
|
||||
"HKLM:\SYSTEM\WPA_QueryValues, EnumerateSubKeys, WriteKey"
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform_SetValue"
|
||||
) do for /f "tokens=1,2 delims=_" %%A in (%%#) do (
|
||||
set "d=$acl = Get-Acl '%%A';"
|
||||
set "d=!d! $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', '%%B', 'ContainerInherit, ObjectInherit','None','Allow');"
|
||||
set "d=!d! $acl.ResetAccessRule($rule);"
|
||||
set "d=!d! $acl.SetAccessRule($rule);"
|
||||
set "d=!d! Set-Acl -Path '%%A' -AclObject $acl"
|
||||
%psc% "!d!" %nul%
|
||||
)
|
||||
|
||||
call :checkperms
|
||||
if defined permerror (
|
||||
call :_color %Red% "[Failed To Fix]"
|
||||
) else (
|
||||
echo [Successfully Fixed]
|
||||
)
|
||||
) else (
|
||||
echo [Error Not Found]
|
||||
)
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Stopping sppsvc service...
|
||||
call :_stopservice sppsvc
|
||||
@ -481,7 +614,7 @@ echo:
|
||||
if not defined token (
|
||||
call :_color %Red% "Failed to rebuilt tokens.dat file."
|
||||
) else (
|
||||
call :_color %Green% "tokens.dat file was rebuilt successfully."
|
||||
echo tokens.dat file was rebuilt successfully.
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
@ -491,17 +624,15 @@ call :_color %Green% "tokens.dat file was rebuilt successfully."
|
||||
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:
|
||||
|
||||
sc qc osppsvc %nul% || (
|
||||
echo OSPP based Office is not installed
|
||||
echo Skipping rebuilding OSPP tokens...
|
||||
goto :repairoffice
|
||||
)
|
||||
|
||||
call :scandatospp check
|
||||
|
||||
if not defined token (
|
||||
@ -540,17 +671,11 @@ echo:
|
||||
if not defined token (
|
||||
call :_color %Red% "Failed to rebuilt tokens.dat file."
|
||||
) else (
|
||||
call :_color %Green% "tokens.dat file was rebuilt successfully."
|
||||
echo tokens.dat file was rebuilt successfully.
|
||||
)
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:cleanclipsvc
|
||||
|
||||
:: This section is removed
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:repairoffice
|
||||
|
||||
echo:
|
||||
@ -597,10 +722,11 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
|
||||
%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% && (
|
||||
if %winbuild% GEQ 10240 (
|
||||
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
|
||||
%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" 1>nul && set uwp16=Office 16.0 UWP
|
||||
)
|
||||
|
||||
set /a counter=0
|
||||
@ -645,7 +771,7 @@ goto :repairend
|
||||
echo:
|
||||
) else (
|
||||
echo:
|
||||
call :_color %_Yellow% "A Window will popup, in that Window you need to select Repair Option..."
|
||||
call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..."
|
||||
call :_color %_Yellow% "Press any key to continue..."
|
||||
echo:
|
||||
pause >nul
|
||||
@ -691,6 +817,147 @@ echo %line%
|
||||
echo:
|
||||
echo:
|
||||
call :_color %Green% "Finished"
|
||||
goto :at_back
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:fixwmi
|
||||
|
||||
cls
|
||||
mode 98, 34
|
||||
title Fix WMI
|
||||
|
||||
:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484
|
||||
|
||||
if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
|
||||
%eline%
|
||||
echo WMI rebuild is not recommended on Windows Server. Aborting...
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
|
||||
%eline%
|
||||
echo wmic.exe file is not found in the system. Aborting...
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Checking WMI
|
||||
|
||||
set error=
|
||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
||||
if %errorlevel% NEQ 0 set error=1
|
||||
winmgmt /verifyrepository %nul%
|
||||
if %errorlevel% NEQ 0 set error=1
|
||||
|
||||
if not defined error (
|
||||
echo [Working]
|
||||
echo No need to apply this option. Aborting...
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
call :_color %Red% "[Not Responding]"
|
||||
|
||||
echo:
|
||||
sc query Winmgmt %nul% || (
|
||||
%eline%
|
||||
echo Winmgmt service is not installed. Aborting...
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
echo Disabling Winmgmt service
|
||||
sc config Winmgmt start= disabled %nul%
|
||||
if %errorlevel% EQU 0 (
|
||||
echo [Successful]
|
||||
) else (
|
||||
call :_color %Red% "[Failed] Aborting..."
|
||||
sc config Winmgmt start= auto %nul%
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Stopping Winmgmt service
|
||||
call :_stopservice Winmgmt
|
||||
call :_stopservice Winmgmt
|
||||
call :_stopservice Winmgmt
|
||||
sc query Winmgmt | find /i "1 STOPPED" %nul% && (
|
||||
echo [Successful]
|
||||
) || (
|
||||
call :_color %Red% "[Failed]"
|
||||
echo:
|
||||
call :_color %Magenta% "Its recommended to select [Restart] option and then apply Fix WMI option again."
|
||||
echo %line%
|
||||
echo:
|
||||
choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :"
|
||||
if !errorlevel!==1 (sc config Winmgmt start= auto %nul%&goto :at_back)
|
||||
echo:
|
||||
echo Restarting...
|
||||
shutdown -t 5 -r
|
||||
exit
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Deleting WMI repository
|
||||
rmdir /s /q "%windir%\System32\wbem\repository\" %nul%
|
||||
if exist "%windir%\System32\wbem\repository\" (
|
||||
call :_color %Red% "[Failed]"
|
||||
) else (
|
||||
echo [Successful]
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Enabling Winmgmt service
|
||||
sc config Winmgmt start= auto %nul%
|
||||
if %errorlevel% EQU 0 (
|
||||
echo [Successful]
|
||||
) else (
|
||||
call :_color %Red% "[Failed]"
|
||||
)
|
||||
|
||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
||||
if %errorlevel% EQU 0 (
|
||||
echo:
|
||||
echo Checking WMI
|
||||
call :_color %Green% "[Working]"
|
||||
goto :at_back
|
||||
)
|
||||
|
||||
echo:
|
||||
echo Registering .dll's and Compiling .mof's, .mfl's
|
||||
call :registerobj %nul%
|
||||
|
||||
echo:
|
||||
echo Checking WMI
|
||||
wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
|
||||
if %errorlevel% NEQ 0 (
|
||||
call :_color %Red% "[Not Responding]"
|
||||
echo:
|
||||
echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors.
|
||||
) else (
|
||||
call :_color %Green% "[Working]"
|
||||
)
|
||||
|
||||
goto :at_back
|
||||
|
||||
:registerobj
|
||||
|
||||
:: https://eskonr.com/2012/01/how-to-fix-wmi-issues-automatically/
|
||||
|
||||
call :_stopservice Winmgmt
|
||||
cd /d %systemroot%\system32\wbem\
|
||||
regsvr32 /s %systemroot%\system32\scecli.dll
|
||||
regsvr32 /s %systemroot%\system32\userenv.dll
|
||||
mofcomp cimwin32.mof
|
||||
mofcomp cimwin32.mfl
|
||||
mofcomp rsop.mof
|
||||
mofcomp rsop.mfl
|
||||
for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s
|
||||
for /f %%s in ('dir /b *.mof') do mofcomp %%s
|
||||
for /f %%s in ('dir /b *.mfl') do mofcomp %%s
|
||||
|
||||
winmgmt /salvagerepository
|
||||
winmgmt /resetrepository
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
@ -708,7 +975,7 @@ goto :at_menu
|
||||
:at_done
|
||||
|
||||
echo:
|
||||
echo Press any key to exit...
|
||||
echo Press any key to %_exitmsg%...
|
||||
pause >nul
|
||||
exit /b
|
||||
|
||||
@ -732,6 +999,23 @@ exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:checkperms
|
||||
|
||||
set permerror=
|
||||
if not exist "%tokenstore%\" set permerror=1
|
||||
|
||||
for %%# in (
|
||||
"%tokenstore%"
|
||||
"HKLM:\SYSTEM\WPA"
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
|
||||
) do if not defined permerror (
|
||||
%psc% "$acl = Get-Acl '%%#'; if ($acl.Access.Where{ $_.IdentityReference -eq 'NT SERVICE\sppsvc' -and $_.AccessControlType -eq 'Deny' -or $acl.Access.IdentityReference -notcontains 'NT SERVICE\sppsvc'}) {Exit 2}" %nul%
|
||||
if !errorlevel!==2 set permerror=1
|
||||
)
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:scandat
|
||||
|
||||
set token=
|
||||
@ -779,7 +1063,41 @@ del /S /F /Q "%%#*.dat"
|
||||
)
|
||||
exit /b
|
||||
|
||||
::========================================================================================================================================\
|
||||
::========================================================================================================================================
|
||||
|
||||
:regownstart
|
||||
|
||||
%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);"
|
||||
exit /b
|
||||
|
||||
:: Below code takes ownership of a volatile registry key and deletes it
|
||||
:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState
|
||||
|
||||
:regown:
|
||||
$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1)
|
||||
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False)
|
||||
$TypeBuilder = $ModuleBuilder.DefineType(0)
|
||||
|
||||
$TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null
|
||||
$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null
|
||||
|
||||
$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
|
||||
$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value
|
||||
$Admin = New-Object System.Security.Principal.NTAccount($IDN)
|
||||
|
||||
$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState'
|
||||
$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership')
|
||||
|
||||
$acl = $key.GetAccessControl()
|
||||
$acl.SetOwner($Admin)
|
||||
$key.SetAccessControl($acl)
|
||||
|
||||
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow")
|
||||
$acl.SetAccessRule($rule)
|
||||
$key.SetAccessControl($acl)
|
||||
:regown:
|
||||
|
||||
::========================================================================================================================================
|
||||
|
||||
:_color
|
||||
|
44
README.md
44
README.md
@ -1,23 +1,45 @@
|
||||
**Microsoft Activation Scripts (MAS):**
|
||||
## Microsoft Activation Scripts (MAS):
|
||||
|
||||
A collection of scripts for activating Microsoft products using HWID / KMS38 / Online KMS activation methods
|
||||
with a focus on open-source code, less antivirus detection and user-friendliness.
|
||||
|
||||
A Windows and Office activator using HWID / KMS38 / Online KMS activation methods, with a focus on open-source code and fewer antivirus detections.
|
||||
|
||||
**[Download Link](https://github.com/massgravel/Microsoft-Activation-Scripts/releases)** <br/>
|
||||
## Download / How to use it?
|
||||
|
||||
Latest Version: 1.6
|
||||
Release date: 25-July-2022
|
||||
### Method 1 - PowerShell
|
||||
|
||||
**For more details, check Homepage:** https://massgrave.dev/ <br/>
|
||||
- On Windows 10/11, right-click on the windows start menu and select PowerShell or Terminal (Not CMD).
|
||||
- Copy-paste the below code and press enter\
|
||||
`irm https://massgrave.dev/get | iex`
|
||||
- You will see the activation options, and follow onscreen instructions.
|
||||
- That's all.
|
||||
|
||||
### Method 2 - Traditional
|
||||
|
||||
- Download the file named `MAS_1.8_Password_1234.7z` from [here](https://github.com/massgravel/Microsoft-Activation-Scripts/releases)
|
||||
- Extract this file with a 3rd party archive manager, such as [7zip](https://www.7-zip.org/download.html)
|
||||
- Password is `1234`
|
||||
- In the extracted folder, find the folder named `All-In-One-Version`
|
||||
- Run the file named `MAS_AIO.cmd`
|
||||
- You will see the activation options, and follow onscreen instructions.
|
||||
- That's all.
|
||||
|
||||
To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches.html)
|
||||
|
||||
```
|
||||
Latest Version: 1.8
|
||||
Release date: 16-Mar-2023
|
||||
```
|
||||
|
||||
### For more details, check Homepage: https://massgrave.dev/
|
||||
|
||||
### [Download Original Windows & Office](https://massgrave.dev/genuine-installation-media.html)
|
||||
|
||||
<a href="https://discord.gg/gjJEfq7ux8">
|
||||
<img src="https://discordapp.com/api/guilds/746721520931569757/widget.png?style=banner3" />
|
||||
</a>
|
||||
|
||||
<hr />
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
Made with Love ❤️
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user