为什么我的WQL查询不接受IPAddress不为空的筛选条件?
问题原因
Win32_NetworkAdapterConfiguration类的IPAddress是字符串数组类型的多值属性,而WQL的WHERE子句不支持直接对多值属性做NULL判断或普通值比较。你之前测试的MACAddress是单值字符串属性,所以可以用!= NULL的判断逻辑,这就是两条语句运行结果不同的核心原因。
可行解决方案
你要实现的「筛选IP地址不为空的网卡」逻辑,完全可以用该类自带的单值布尔属性IPEnabled来替代判断,该属性为TRUE时就代表网卡已配置IP地址,对应IPAddress不为空的场景,合法的WQL查询写法如下:
Get-CimInstance -Query "SELECT MACAddress, IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE"
如果用-Filter参数也可以写成:
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "IPEnabled = TRUE" -Property MACAddress,IPAddress
补充WQL规则说明
WQL对多值属性的操作支持度极低,除了极少数专门适配的WMI类支持专用的数组查询操作符外,绝大多数场景都不能直接在WHERE子句中对多值属性做筛选,遇到这类需求时优先查找对应类中同逻辑的单值标记属性,是最符合WQL语法规范的实现方式。
内容的提问来源于stack exchange,提问作者Abraham Zinala
相关产品推荐
相关产品推荐

