检查WQL中的缺失值或(WQL / WMIfilter为台式机/服务器返回“true”,而在笔记本电脑上返回“false”)

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

在构buildWMIfilter(使用WQL)的过程中,遇到了一个问题:确定一组WQL语句,这些语句总是会在桌面/服务器上返回true ,在笔记本电脑/笔记本电脑上返回false

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

接下来,我find了使用win32_battery引用,并检查Status属性的非零值; 但我很快意识到,这将在通过USB连接UPS的台式机和服务器上返回一个价值。

由于以上都不会总是(+ / – 容忍N)返回到桌面/服务器的true ,而笔记本电脑/笔记本电脑是false的,我find了win32_portablebattery类。

兴奋起来,我开始testing,很快发现win32_portablebattery在桌面或服务器上执行时win32_portablebattery返回任何内容。 通过“没有”我不是指{empty string}/"" ,我不是指NULL ,我不是指false ,我的意思是什么都没有。 我甚至试图检查__CLASS = ""__CLASS IS NULL并且桌面和服务器仍然返回false

有谁知道任何进一步的WQL fu试图获得true结果使用win32_portablebattery

有两件事你可以做。

  1. 如果您有标准的计算机模型,则可以基于Win32_ComputerSystem模型属性进行筛选。

  2. 如果您使用组策略首选项,则可以使用“ Item Level Targeting根据各种因素过滤出策略所应用的用户/计算机。 其中之一便携式计算机定位 。 简而言之,Windows将确定机器是否是便携式的。

我个人喜欢#2,因为如果这是错误的,那么你总是可以责备微软并告诉用户

MS认为你的电脑应该是便携式的。

不是你的问题的确切答案,但它可能适用于你。

我使用内存的形状因素来确定某件东西是否是笔记本电脑。 所以我们的WMIfilter,在笔记本电脑上返回true

Select * from Win32_PhysicalMemory where FormFactor = 12

如果你需要它返回false(FormFactor != 12) ,当然。 如果你把这个WMI查询joinGoogle,你会得到相当数量的结果,这似乎表明这是一个可靠的testing,但是你可能首先要做一些testing。 它在我的环境中工作,没有我意识到的任何检测不到,所以它也可以为你的工作。

我有一台笔记本电脑,在查询Win32_PortableBattery时不返回对象,但是在查询Win32_Battery时返回一个对象。 可能不是使用这些类中的任何一个的好select。