所以我正在使用它:
$IPA = (Get-NetIPAddress | Where-Object InterfaceAlias -eq "MyPortName").IPv4Address
然后我想使用以下内容来获取该IP的子网掩码:
$IPInfo = (Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress -Match $IPA)
其次是:
$SubMask = $IPInfo.IPSubnet[0]
但是因为$ IPInfo为空而失败了。如果我硬编码IPAddress,它可以工作:
$IPInfo = (Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress -Match 10.45.22.100)
但端口IP总是不同的。为什么不将$ IPA作为匹配参数?
编辑:报告的IP地址同时具有IPv4和IPv6,这就是我尝试做的原因 - 针对IPv4进行匹配。
答案 0 :(得分:1)
正如我们在评论中发现的那样,您正在为$IPA
返回一个数组。它在控制台中看起来很好,因为PowerShell展开数组以显示所有元素。因为只有一个它有误导性。
((Get-NetIPAddress | Where-Object InterfaceAlias -eq "Local Area Connection").IPv4Address).gettype().fullname
System.Object[]
可能它试图匹配“System.Object []”,这就是为什么你没有得到你想要的结果。
有很多方法可以解决这个问题。一个简单的方法是始终在查询中返回-First
结果。
(Get-NetIPAddress | Where-Object InterfaceAlias -eq "Local Area Connection").IPv4Address | select -first 1).gettype().fullname
所以只需使用| select -first 1
即可获得您期望的结果。
我提醒在这里使用-match
。了解-match
和-replace
支持正则表达式模式字符串。因此,如果你的字符串中有正则表达式元字符,你可能会得到意想不到的结果。
答案 1 :(得分:0)
这是因为$ IPA实际上是一个对象数组。
运行Get-NetIPAddress | Where-Object InterfaceAlias -eq "MyPortName"
时,它返回MSFT_NetIPAddress类型的CIM实例数组。
当您通过运行IPv4Address
请求$IPA = (Get-NetIPAddress | Where-Object InterfaceAlias -eq "MyPortName").IPv4Address
成员时,阵列仍然存在,但不显示没有IPv4Address的阵列元素。
看一下下面的例子。
$NetIPAddresses = (Get-NetIPAddress | where {$_.InterfaceAlias -eq "Ethernet" -and $_.AddressFamily -eq "IPv4"})
foreach ($NetIPAddress in $NetIPAddresses) {
$IPA = $NetIPAddress.IPv4Address
$IPInfo = (Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress -Match $IPA)
$IPInfo.IPSubnet[0]
}
这将显示给定接口上每个IPv4地址的子网掩码。