BIOS Update für Lenovo Desktops (M710q)

By | 25. April 2018

Nach den Spectre- und Meltdown-Updates für die Laptop-Reihen waren vor ein paar Tagen auch die Desktops dran. Auch beim BIOS-Update für Lenovo Desktops hatte ich ein paar Probleme, das Update zu verteilen. Die direkte Installation über RunAsEx aus dem DSM Verzeichnis war in keinem meiner Versuche erfolgreich, wie auch beim BIOS Update für die Laptop-Modelle mag das Update-Tool keine Leerzeichen in Pfaden. Daher habe ich es in dem Fall in einen Installationsordner in ProgramData abgelegt (C:\temp war hier nicht möglich, unsere Applocker-Richtlinie verbietet das Ausführen von Software dort). Das DSM log zeigt folgende Fehlermeldung:

nilsPipe: Service var bridge: Setting var returncode to 5

Bei manueller Ausführung ist der Fehler etwas aussagekräftiger:

Dabei macht es keinen Unterschied, ob man die wflash2.exe oder die wflash2x64.exe nutzt. Führt man das Update jedoch direkt aus dem Ordner aus, funktioniert dies problemlos:

Das Tool wflash möchte also immer in dem Ordner ausgeführt werden, in dem es auch liegt. Im Falle von DSM müssten die Dateien also in C:\Program Files (x86)\netinst liegen. Mir widerstrebt es jedoch, dort Dateien für eine Installation hinein zu kopieren und außerdem würde auch dort das Problem mit den Leerzeichen in den Pfaden auftauchen. Daher habe ich mir – ähnlich wie beim T470s (die Laptops verwenden ein anderes Tool zum BIOS flashen) – den Flashvorgang mal genauer angeschaut und siehe da, auch hier wird eigentlich eine andere Datei aufgerufen, welche den Flashvorgang durchführt:

In DSM sieh dies dann so aus:

Und in der Script.inc so:

RunAsEx(‚“%ALLUSERSPROFILE%\DSMInstall\BIOS\AFUWIN.EXE“‚,'“%ALLUSERSPROFILE%\DSMInstall\BIOS\imagem1a.rom“ /p /n /r /sp /b /defans /capsule‘,“,“,’5′,’returncode‘,raUseLocalSystem+WaitForExecution+UndoneContinueParentScript)/TS

Um das BIOS-Update abzuschließen, ist danach auf jeden Fall ein Neustart nötig.

Zusammen mit der vorherigen Überprüfung der BIOS-Version, die ich hier beschrieben habe, und dem Kopieren der Dateien (sowie dem nachträglichen Entfernen nach der Installation), sieht das Skript so aus:

Und in der Script.inc so:

!BIOS Version ermitteln
WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc/TS
!
If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
!
Else
! BIOS Version ist nicht aktuell und muss installiert werden
MakeDir(‚%ALLUSERSPROFILE%\DSMInstall‘)/TS
Copy(‚.\extern$\*.*‘,’%ALLUSERSPROFILE%\DSMInstall\BIOS\*.*‘)/S/TS
RunAsEx(‚“%ALLUSERSPROFILE%\DSMInstall\BIOS\AFUWIN.EXE“‚,'“%ALLUSERSPROFILE%\DSMInstall\BIOS\imagem1a.rom“ /p /n /r /sp /b /defans /capsule‘,“,“,’5′,’returncode‘,raUseLocalSystem+WaitForExecution+UndoneContinueParentScript)/TS
Delete(‚%ALLUSERSPROFILE%\DSMInstall\BIOS\*.*‘)/S/TS
RemoveDir(‚%ALLUSERSPROFILE%\DSMInstall\BIOS‘)/S/TS
System_Reset/?/TW