Showing posts from September, 2017

Dynamically Update BIOS on Think Products with SCCM

NOTE: What follows is a brief look at what is possible and not necessarily recommended for everyone.  Hopefully someone finds it useful.

Earlier at MMS this year, a fantastic session on modern driver management in OS deployments was presented by Kim Oppalfens and Tom Degreef.  This method and what it entails can be found here.

I was inspired by their session and wanted to see if this could work with Lenovo's BIOS updates in a similar manner.  The workflow is basically the same, with the key piece being the overridable task sequence variable in the Download Package Content step called OSDDownloadDownloadPackages.

Here's the layout of the Task Sequence:

Creating the Package(s):BIOS(s) You'll need to download the latest BIOS for your model from Lenovo's support site and extract the contents to a source directory.  Here's the folder structure I use in my lab:
<Share>\OSD\BIOS\<first 4 characters of BIOS>\<version>

Return codes for WINUPTP

For Lenovo ThinkPad computers the standard utility to perform a BIOS update is WINUPTP.exe (or WINUPTP64.exe). This utility can be called with a -s parameter to stage a BIOS update silently that will complete when the system is restarted - presumably by your task sequence.

To date, the possible return codes from this utility were not readily available. This post is meant to correct that. Below is a table of possible return codes from WINUPTP.exe:

Return CodeValueDescriptionRET_SUCC_REBOOTING0BIOS update is successful and system will reboot. (normal update)RET_SUCC_NOTREBOOTING1BIOS update is successful and system does not reboot. (silent update)RET_UNDEFINED-1WINUPTP Option is undefined.RET_FAIL_DRIVER_LOAD-2Driver(tpflhlp.sys) failed to load.RET_FAIL_UNSUPPORTEDSYSTEM-3This utility does not support this system or OS.RET_FAIL_NEEDADMINRIGHTS-4This utility requires Administrator privileges to run.RET_FAIL_NOBIOSIMAGEFORSYSTEM-5BIOS image file does not match this system.RET_FAIL_BADECIMA…