WMIC 查询返回意外答案?

WMIC 查询返回意外答案?

如果这看起来像是一个新手问题,请原谅...但我无论如何也想不出答案。我正在使用 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操作员将执行您所期望的操作。

相关内容