4

我正在尝试做类似的事情:

Get-WmiObject Win32_NetworkAdapterConfiguration `
    -Filter "DefaultIPGateway!=NULL"

但我有一个错误:

Get-WmiObject:无效查询在行:1 char:14 + Get-WmiObject <<<< Win32_NetworkAdapterConfiguration -Filter "DefaultIPGateway!=NULL" + CategoryInfo:InvalidOperation: (:) [Get-WmiObject],ManagementException + FullyQualifiedErrorId:GetWMIManagementException, Microsoft.PowerShell.Commands.GetWmiObjectCommand

这很奇怪,因为当我尝试获取 DefaultIPGateway 值的类型时。它是现有值的 System.Array:

PS> $result[0].DefaultIPGateway.Gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String[]                                 System.Array

对于不存在的值,则为 NULL:

PS> $result[1].DefaultIPGateway.GetType()
You cannot call a method on a null-valued expression.
At line:1 char:36
+ $result[1].DefaultIPGateway.GetType <<<< ()
    + CategoryInfo          : InvalidOperation: (GetType:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

有人可以帮我理解为什么我的 WQL 不起作用以及我应该怎么做才能让它运行吗?

4

2 回答 2

2

我不确定如何使过滤器查询工作,因为我不知道如何访问数组元素来检查它们,但有一个解决方法:

Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.DefaultIPGateway -ne $null }

这样,powershell 将负责过滤从查询返回的对象,而不是 WMI 在检索期间执行此操作。

于 2015-02-13T15:07:06.533 回答
1

WQL 查询不支持数组属性。

注意 WQL 不支持数组数据类型的查询。

资料来源:使用 WQL @ MSDN 进行查询

解决方案是使用 PowerShell 的Where-Objectcmdlet 过滤掉具有空值的对象。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration |
Where-Object { $_.DefaultIPGateway }
于 2016-01-31T11:20:32.450 回答