检查 WQL 中是否存在缺失值或(WQL/WMI 过滤器对台式机/服务器返回“true”,但对笔记本电脑返回“false”)

检查 WQL 中是否存在缺失值或(WQL/WMI 过滤器对台式机/服务器返回“true”,但对笔记本电脑返回“false”)

我面临一个挑战,我想使用 GPO 来设置电源计划。

在构建 WMI 过滤器(使用 WQL)时,我遇到了一个问题,即确定一组始终返回true台式机/服务器和false笔记本电脑/笔记本的 WQL 语句。

win32_systemenclosure我开始测试属性的使用ChassisTypes,但很快发现ChassisTypes是一个int array,它不能在(标准)WQL 中使用[尽管它在 SCCM WQL 扩展集中可用]。

接下来我找到了使用win32_battery和检查Status属性是否为非零值的参考;但我很快意识到这将返回通过 USB 连接 UPS 的台式机和服务器上的值。

由于以上任何一种情况都不会(+/- 可容忍的 N)出现true在台式机/服务器以及false笔记本电脑/笔记本上,因此我位于班上win32_portablebattery

兴奋之余,我开始测试,很快发现win32_portablebattery在桌面或服务器上执行时什么都不返回。我说的“什么都不返回”不是指{empty string}/"",不是指NULL,也不是指false,而是指真的什么都不返回。我甚至尝试检查__CLASS = "" 和和两者在桌面和服务器上__CLASS IS NULL仍然返回。false

是否有人知道使用WQL-fu 尝试获取结果?truewin32_portablebattery

答案1

您可以做两件事。

  1. 如果您有标准计算机型号,则可以根据Win32_ComputerSystem型号属性进行过滤。

  2. 如果您使用组策略首选项,则可以Item Level Targeting根据多种因素来筛选出该策略适用的用户/计算机。其中之一是便携式电脑瞄准. 简单来说就是Windows会决定机器是否可移植。

我个人比较喜欢 #2,因为如果使用不当,你总是可以责怪微软,并告诉用户

MS 认为您的计算机应该是便携式的。

答案2

这不是您问题的确切答案,但它可能对您有用。

我使用内存的外形尺寸来确定某物是否是笔记本电脑。因此,我们的 WMI 过滤器(true在笔记本电脑上返回)是:

Select * from Win32_PhysicalMemory where FormFactor = 12

当然,如果您需要它返回false(FormFactor != 12)。如果您将该 WMI 查询输入 Google,您会得到相当多的结果,这些结果似乎表明这是一个可靠的测试,但您可能希望先自己做一些测试。它在我的环境中有效,据我所知没有任何错误检测,因此它可能也适用于您的环境。

答案3

我面前有一台笔记本电脑,它在查询 Win32_PortableBattery 时不返回对象,但在查询 Win32_Battery 时返回对象。使用这两个类可能都不是好选择。

相关内容