BIOS Version auslesen und im Escript nutzen

By | 5. März 2018

Aus aktuellem Anlass – die Meltdown und Spectre Lücken in fast allen CPU Typen – möchte ich hier kurz eine einfache Möglichkeit zeigen, wie man die aktuelle BIOS Version auslesen kann und im DSM damit weiterarbeitet. Mit Windows Updates ist es nicht getan, auch die CPU Microcode Updates müssen zuverlässig verteilt werden. Dabei soll das Paket nur laufen, wenn eine ältere BIOS Version installiert ist. Um die aktuell installierte Version auszulesen, kann man eine einfache WMI Abfrage nutzen, die im DSM über den Befehl „WMIGetIndexData“ realisiert wird:

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

WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc/TS

Damit hat man die aktuelle BIOS Version in der Variable „WMI_SMBIOSBIOSVersion“ gespeichert (siehe Bild oben: zusammengesetzt aus Variablenpräfix+Eigenschaften). Nun muss man diesen noch mit der Ziel-BIOS Version vergleichen. Dazu erzeugt man am einfachsten im Punkt „Installationsparameter“ eine neue logische Kategorie „BIOSVersion“ und darunter einen Parameter, der als Vorgabewert die Ziel-BIOS Version enthält:

 

Anschließend vergleicht man noch beide Werte: Sind diese gleich, soll nichts passieren. Sind sie ungleich, soll ein Update ausgeführt werden.

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

If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
Else
RunAsEx(‚hier kommt das BIOS Update rein‘,‘-s‘,“,“,’10‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TS
System_Reset/?/TW

 

Somit sieht das vollständige Paket so aus:

Und in der Script.inc:

WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc/TS
!
If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
Else
RunAsEx(‚hier kommt das BIOS Update rein‘,‘-s‘,“,“,’10‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TS
System_Reset/?/TW
!