BIOS Update für Lenovo T470s

By | 28. März 2018

Die letzte Woche habe ich mich – auch wegen der Meltdown- und Spectre-Problematik – intensiv mit BIOS Updates bei Lenovo Notebooks (in unserem Fall einem T470s) beschäftigt. Es ging darum, sowohl beim Neuaufsetzen, als auch im „Feld“ sicher und zuverlässig Updates fahren zu können. Lenovo bietet dazu das Tool WINUPTP64.EXE (bzw. WINUPTP.EXE für 32bit Systeme) an. Ein Blick in die beiliegende readme verrät „WINUPTP64.EXE -s“ und es sollte funktionieren:

Leider war dem jedoch nicht so … Es kam immer wieder derselbe Returncode 4294967295 zurück. Danach habe ich noch folgendes ausprobiert:

–          Aufruf aus relativen Pfaden

–          Aufruf aus absoluten Pfaden

–          Aufruf mit Systemrechten

–          Aufruf mit explizitem lokalen Admin-Account

–          Aufruf über einen Batchcall

–          Aufruf über psexec

Es kam immer wieder derselbe Fehler, nach Tagen des Rumprobierens und Testens war der Frust groß und der Erfolg gleich Null. Bis mir dann beim händisch ausgeführten Test aufgefallen ist, dass die WINUPTP64.EXE eigentlich eine andere Datei aufruft, nämlich die WinFlash64.exe. Diese habe ich dann in der cmd gestartet und siehe da, mit WinFlash64.exe -help spuckt sie ihre Parameter aus. Das Ganze ist schnell in ein Escript gegossen:

Und siehe da, das BIOS-Update läut zuverlässig durch. Einzig der erzwungene Reboot nach dem Update lässt sich hier nicht mehr unterdrücken. Ich habe daher noch eine Abfrage vor Beginn des BIOS-Updates gesetzt:

Dazu noch das hier beschriebene Skript, um vorher die BIOS-Version auszulesen, ergibt:

 

In der Script.inc sieht dies folgendermaßen aus:

!Variablen initialisieren
WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc/TS
!
If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
!
MsgBoxEx(‚— Achtung! —<cr>Ein wichtiges Update für Ihren Rechner ist verfügbar. Bitte schliessen Sie alle Programme. Nach dem klick auf „OK“ startet der Rechner automatisch neu, nicht gespeicherte Daten gehen verloren.‘,’var_abfrage‘,“,mbOKCancel,’3600′,’1′)
If %var_abfrage%=’CANCEL‘
ExitProcEx(Undone,’Abbruch durch den Benutzer, Installation wird später fortgesetzt.‘)
!
RunAsEx(‚.\extern$\WinFlash64.exe‘,’/silent /file „.\extern$\N1WET45W\$0AN1W00.FL1″‚,“,“,’10‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TS
System_Reset/TW
!