This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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