我写了一个脚本来获取远程机器的IP地址,这是按预期工作的。问题是我试图只显示IPv4地址而不是IPv6地址所以我创建了一些逻辑,但它不起作用,我在这里做错了什么?
Get-WmiObject -ComputerName remoteserver Win32_NetworkAdapterConfiguration | ? {
$_.IPAddress -ne $null -and $_.IPAddress -ne 'fe80*'
} | select -ExpandProperty IPAddress
答案 0 :(得分:1)
查看下面的内容,您可以看到IPAddress
是Win32_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*' }