02-01-2019 10:18 AM - edited 02-01-2019 11:43 AM
My company has been in the process of getting our task sequences to auto update our computers' BIOS. We want to utilize smbiosbiosversion/major/minor to accomplish this. Unlike the ThinkPad's,which already list it as "version", the Lenovo Support BIOS page for ThinkCentres and ThinkStations do not tell you what the smbiosversion the BIOS is supposed to be. The readme doesn't tell you either.
This has become a huge pain point for us, because we have to install updates first in order to determine what the magic number is. Can this number be added to the webpage or the readme for the ThinkCentre/ ThinkStations like it is for the ThinkPads? It's critical for our detection methods!
Specifically looking for SystemBiosMinorVersion and SystemBiosMajorVersion values, not smbiosbiosversion
Changed title to reflect this.
Solved! Go to Solution.
02-01-2019 11:14 AM
You should find these documented in the Deployment Recipe cards at
Scroll down to the ThinkCentre models
02-01-2019 11:42 AM
I appologize I embassingly used the wrong term.
What I care about are the follwing:
I know that these values change with each BIOS upgrade, and at least for ThinkPad's they match up with the model's BIOS webpage.
I'm looking for something similar for the ThinkCentres'/ThinkStations' to allow us to input those values into our detection method without needing to upgrade the computer first and writing down the values. Right now it causes us to roll back the bios retest, which is eating up alot of time for these specific model types.
02-04-2019 11:57 AM
Any particular reason you can't use the SMBIOSBIOSVersion? That's what we use in our task sequence, with a WMI query like the following:
select * from WIN32_BIOS where SMBIOSBIOSVersion < "M1AKT37A"
02-04-2019 01:30 PM
Alot of our computer may have different BIOS versions. If it's one thing I've observed, it's that ThinkCentre's and ThinkStation's do not have a consistent SMBIOSBIOSVersion naming convention.
For example, here are two models and the SMBIOSBIOSVersion that the order of a past few releases:
ThinkCentre M900 - FWKT7FA, FWKT8DA, FWKT90A, FWKT91A
ThinkStation P500 - A4KT96A, A4KT97A, A4KT99A, A4KTA0A, A4KTA1A
There isn't a great way to really sort these and say "if older than X install the BIOS, else if newer than X don't install it.".
Thats where the Major/Minor versions come in. All of these SMBIOSBIOSVersion have a consistent numbering system through the SystemBiosMajorVersion and SystemBiosMinorVersion in WMI. So far, it's been a relaible way for us to detect if a BIOS is newer or older.
Currently the ThinkPad driver support pages, seem to support this, since they provide the SystemBiosMajorVersion and SystemBiosMinorVersion, even if they don't call it that on their page.
SMBIOBIOSVERSION = JBET69WW (1.33 )
SystemBiosMajorVersion = 1
SystemBiosMinorVersion = 33
02-05-2019 08:56 AM
When you use a comparison operator in WQL with a pair of strings, it compares them using an alphabetical sort where the digits are "less than" alphabetical characters. (I assume it's comparing the ASCII values.) It works out that the SMBIOSBIOSVersion string for any newer version is always "greater than" the version string for an older version. In the examples you provided:
ThinkCentre M900 - FWKT7FA < FWKT8DA < FWKT90A < FWKT91A
ThinkStation P500 - A4KT96A < A4KT97A < A4KT99A < A4KTA0A < A4KTA1A
I've used this technique for years and have never had an issue.
02-07-2019 06:33 AM - edited 02-07-2019 06:34 AM
I compare the informations in the WMI with the BIOS Readme textfile:
#Read BIOS version Write-Log -Message "Start reading BIOS Version which will be installed from readme file - $appName $appVersion $env:PROCESSOR_ARCHITECTURE" $BIOSVersion = Select-String -Path "$dirFiles\m1ujy*" -Pattern "Version M1UKT" $split = $BIOSVersion -split (" ") $appVersion = $split Write-Log -Message "Set new AppVersion variable - $appName $appVersion" Write-Log -Message "Start reading BIOS Versions history from readme file - $appName $appVersion $env:PROCESSOR_ARCHITECTURE" $BIOSVersionArray = Select-String -Path "$dirFiles\m1ujy*" -Pattern "Changes for" $splitArray = $BIOSVersionArray -split (" ") Write-Log -Message "Array of BIOS Versions - $splitArray" #Read BIOS version from WMI Write-Log -Message "Start reading BIOS Version from WMI - $appName $appVersion" $WMIBIOSVersion = (Get-WmiObject -Class win32_bios).SMBIOSBIOSVersion Write-Log -Message "End reading BIOS Version from WMI: $WMIBIOSVersion - $appName $appVersion" #Get array position of the BIOS versions $posBIOSversion = [array]::IndexOf($splitArray, $appVersion) $posWMIBIOSversion = [array]::IndexOf($splitArray, $WMIBIOSVersion)
Write-Log is a Powershell Deployment Toolkit command. You can remove or change it to Write-Host.
If ($posBIOSversion -ilt $posWMIBIOSversion -and $posWMIBIOSversion -ne "-1")
If the value from $posWMIBIOSversion could not be found in the readme.txt (e.g. m1ujy... .txt) the error -1 appears.
02-11-2019 06:58 AM