powershell – 过滤器中的WQL不起作用

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

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

但是我有一个错误:

Get-WmiObject : Invalid query
At line: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不起作用以及我应该做些什么来实现它?

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

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

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

转载注明原文:powershell – 过滤器中的WQL不起作用 - 代码日志