为什么我的 WQL 查询不接受我的“IS NOT NULL”参数?

时间:2021-06-24 18:13:42

标签: powershell wql powershell-5.1

请原谅,如果这很简单,请尝试使用谷歌搜索功能,这里有一些类似的问题,但在这种情况下没有对我有用的答案。

为了尽可能避免管道,我正在阅读使用 WQL queries 中的 -Query 参数提供的 Get-CimInstance。在我看来,这是一个简单的查询(除非我遗漏了一些东西),它应该从 MACAddressIPAddress 类中选择 em>Win32_NetworkAdapterConfiguration,来自 IPAddress 属性不为空的可用实例。

Get-CimInstance -Query "SELECT MACAddress, IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPAddress != NULL" 

起初,我认为这是我的错误,因为抛出了异常,读取了一条消息说查询无效,但这是有效的:

Get-CimInstance -Query "SELECT MACAddress, IPAddress FROM Win32_NetworkAdapterConfiguration WHERE MACAddress != NULL" 

# or - using -Filter

Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "MACAddress != NULL"

我可以得到一些指导吗?也许分享这个问题的替代解决方案?


IPAddress 是一个有效的属性,我可以使用 Where-Object 轻松过滤它,但希望学习新知识并更好地理解 WQL。

1 个答案:

答案 0 :(得分:3)

<块引用>

[...] 希望学习新知识并更好地理解 WQL。

关于 WQL,您只需要在这里了解一件事[1]

WQL 不支持对数组值进行过滤

所以您最初使用 Where-Object 进行过滤的直觉是正确的 :)

过滤掉具有 NULL 值的实例的正确语法(假设您过滤的是标量类型的属性,这里以 MACAddress 属性为例)是:

SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress IS NOT NULL