如果这看起来像是一个新手问题,请原谅...但我无论如何也想不出答案。我正在使用 WQL 在 SCCM 中的任务序列中查询 WMI 以获取 Dell BIOS 版本。该 WQL 查询如下:
select * from WIN32_BIOS where SMBIOSBIOSVersion < "1.10.5"
很简单。如果运行该序列的机器上的 BIOS 版本低于当前版本 1.10.5,则此步骤将运行(并安装最新版本的戴尔 BIOS)。长话短说...该步骤没有运行。所以我开始调查。
在应该运行任务序列的机器上,BIOS 版本为 1.7.3。我打开命令提示符并运行以下命令...
wmic BIOS get SMBIOSBIOSVersion
返回 1.7.3。但是...当我运行下面的 WMIC 查询时,我得到“没有可用实例”
C:\>wmic BIOS where "SMBIOSBIOSVersion < '1.10.5'" get SMBIOSBIOSVersion
No Instance(s) Available.
使用“>”而不是“<”运行查询会得到所需的结果。
C:\>wmic BIOS where "SMBIOSBIOSVersion > '1.10.5'" get SMBIOSBIOSVersion
SMBIOSBIOSVersion
1.7.3
我很困惑。即使以十六进制形式,1.10.5 也明显大于 1.7.3(我检查了一下,以防这是某种奇怪的异常)。
删除单引号不起作用,因为查询变得无效。(例如“SMBIOSBIOSVersion > 1.10.5”)
再次,如果这是一个新手问题,我深表歉意。我对 WMI 以及使用 WMIC 和 WQL 进行查询还很陌生。我不一定需要正确的脚本。我真的想知道为什么这个结果不像我预期的那样。
答案1
正如评论中指出的那样,该SMBIOSBIOSVersion
属性是一个字符串。因此,仅对文本字符进行比较;不考虑文本所表示的数值。例如,字符串9
将排在之后8
,但也排在后面,10
因为1
排在较大的数字之前。(可能相关:ASCII 表。
SMBIOSMajorVersion
如果有必要,你应该对房产和进行比较SMBIOSMinorVersion
。资料来源:Win32_BIOS
在 MSDN。如果您最终需要检查两者,and
操作员将执行您所期望的操作。