WMI解析不是预期的结果

时间:2014-11-19 14:19:25

标签: powershell wmi

我写了一个脚本来获取远程机器的IP地址,这是按预期工作的。问题是我试图只显示IPv4地址而不是IPv6地址所以我创建了一些逻辑,但它不起作用,我在这里做错了什么?

Get-WmiObject -ComputerName remoteserver Win32_NetworkAdapterConfiguration | ? {
  $_.IPAddress -ne $null -and $_.IPAddress -ne 'fe80*'
} | select -ExpandProperty IPAddress

2 个答案:

答案 0 :(得分:1)

查看下面的内容,您可以看到IPAddressWin32_NetworkAdapterConfiguration对象的属性,但它实际上是一个对象数组:

DHCPEnabled      : False
IPAddress        : {192.168.3.1, fe80::8c4a:cfd3:6c30:5695}
DefaultIPGateway :
DNSDomain        :
ServiceName      : VMnetAdapter
Description      : VMware Virtual Ethernet Adapter for VMnet1
Index            : 5

PS> ((Get-WmiObject Win32_NetworkAdapterConfiguration | select ipaddress ).ipaddress).gettype()

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

这意味着您需要使用foreach %迭代数组以提取所需的值:

Get-WmiObject Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null} | % { $_.ipaddress -inotlike 'fe80*' }

另请注意,我已将-ne的比较更改为-inotlike-ne完全匹配,而您可以在*比较中使用通配符-like

答案 1 :(得分:1)

您还可以在过滤之前展开IPAddress属性:

Get-WmiObject -ComputerName remoteserver Win32_NetworkAdapterConfiguration |
  select -ExpandProperty IPAddress |
  ? { $_ -ne $null -and $_ -notlike 'fe80*' }