@echo off | |
color 07 | |
cls | |
::Firmware file to update to: | |
set "fw_file=me.bin" | |
::======================================= | |
::Disclaimer | |
echo [97mDisclaimer: | |
echo [91mThis script is provided to you "As Is, Where Is", without any | |
echo support or warranty of any kind, express or implied. | |
echo Running the script implies acceptance of these terms.[97m | |
echo. | |
echo You will see this twice if you did not run as administrator. | |
echo. | |
pause | |
cls | |
::Self-Elevation from: | |
::https://stackoverflow.com/a/12264592/1016343 | |
:init | |
setlocal DisableDelayedExpansion | |
set cmdInvoke=1 | |
set winSysFolder=System32 | |
set "batchPath=%~0" | |
for %%k in (%0) do set batchName=%%~nk | |
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs" | |
setlocal EnableDelayedExpansion | |
:checkPrivileges | |
NET FILE 1>NUL 2>NUL | |
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) | |
:getPrivileges | |
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges) | |
echo Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%" | |
echo args = "ELEV " >> "%vbsGetPrivileges%" | |
echo For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%" | |
echo args = args ^& strArg ^& " " >> "%vbsGetPrivileges%" | |
echo Next >> "%vbsGetPrivileges%" | |
if '%cmdInvoke%'=='1' goto InvokeCmd | |
echo UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%" | |
goto ExecElevation | |
:InvokeCmd | |
echo args = "/c """ + "!batchPath!" + """ " + args >> "%vbsGetPrivileges%" | |
echo UAC.ShellExecute "%SystemRoot%\%winSysFolder%\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%" | |
:ExecElevation | |
"%SystemRoot%\%winSysFolder%\WScript.exe" "%vbsGetPrivileges%" %* | |
exit /B | |
:gotPrivileges | |
setlocal & cd /d %~dp0 | |
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1) | |
:: Finally, the *actual* start of the script | |
:Start | |
:: cd /d "%~dp0" | |
pushd "%~dp0" | |
echo :::::::::::::::::::::::: :::::::::::::::::::::::: :::::::::::::::::::::::: | |
echo. | |
echo Current Intel ME Firmware: | |
for /f "tokens=*" %%f in ('call FWUpdLcl64.exe -FWVER') do set curr_ver=%%f | |
echo %curr_ver% | |
echo. | |
echo Version of ME Firmware in update: | |
for /f "tokens=*" %%f in ('call FWUpdLcl64.exe -FWVER "%fw_file%"') do set file_ver=%%f | |
echo %file_ver% | |
echo. | |
:: Should probably warn user is versions are the same... | |
if "%curr_ver%"=="%file_ver%" ( | |
echo [93mYou already have the same version of the base firmware. | |
echo It is possible that PMC, PCHC, PHY or other blocks have been | |
echo updated, without updating the base firmware version. | |
echo. | |
echo Are you *sure* that you need to update?[97m | |
echo. | |
) | |
echo :::::::::::::::::::::::: :::::::::::::::::::::::: :::::::::::::::::::::::: | |
echo. | |
::get date and time in usable form for filename | |
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I | |
set datetime=%datetime:~0,8%-%datetime:~8,6% | |
echo Backing up current firmware to file... | |
echo Backing up current firmware to file... >>log.txt | |
FWUpdLcl64.exe -save ME-FW-backup_%datetime%.bin >>log.txt | |
set "el=%errorlevel%" | |
if %el% NEQ 0 ( | |
echo Possible error in backup, errorlevel returned: %el% >>log.txt | |
echo [91m======================================= | |
echo [91m WARNING, POSSIBLE ERROR SAVING BACKUP | |
echo [91m Answer "No", and check "log.txt" | |
echo [93m PROCEED WITH CAUTION | |
echo [91m=======================================[97m | |
echo. | |
) | |
echo Before updating, save and close all other files and programs. | |
echo. | |
echo [93mThe system will reboot to UEFI firmware screen for validation.[97m | |
echo. | |
choice /C YN /M "Are you sure you want to update?" | |
set answer=%errorlevel% | |
if !answer! EQU 1 ( | |
echo. | |
FWUpdLcl64.exe -allowsv -f "%fw_file%" | |
set "el=!errorlevel!" | |
echo. | |
if !el! EQU 0 ( | |
echo Flash successful, returned errorlevel 0 >>log.txt | |
echo Flash has completed. To ensure system stability, we must reboot IMMEDIATELY | |
::Sneakily leave ourselves a way to abort with shutdown /a | |
shutdown.exe /f /r /fw /t 30 /d P:1:1 /c "Flash has completed. To ensure system stability, we must reboot. 30s until reboot." | |
color | |
exit /b 0 | |
) else ( | |
echo Error Detected. Errorlevel returned: !el! >>log.txt | |
echo ERROR DETECTED. | |
echo Please READ the above error, and | |
echo take a screenshot BEFORE seeking help. | |
echo Errorlevel: !el! | |
pause | |
color | |
exit /b 1 | |
) | |
) | |
echo Exiting. | |
color | |
exit /b 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment