2017-05-31 71 views
0

所以我用這個:獲取-WmiObject可以Win32_NetworkAdapterConfiguration的-Match失敗

$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爲空。如果我硬編碼IP地址它的工作原理:

$IPInfo = (Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress -Match 10.45.22.100) 

但端口IP將永遠是不同的。爲什麼它不把$ IPA作爲匹配參數?

編輯:被報告的IP地址具有IPv4和IPv6,這就是爲什麼我試圖做 - 與IPv4匹配。

+0

我現在檢查如果這是你的問題,但'-match'支持正則表達式,所以任何元字符都可能導致衝突。如果這是一個完全匹配,只需使用'-eq'instead。也可能獲得不止一個結果。在打印到控制檯時,'$ ipa'看起來像什麼? – Matt

+0

'$ IPA.GetType()。FullName'偶爾顯示'System.Object []'? – Matt

+0

當我在控制檯中做$ IPA時,它顯示10.45.22.100,但是當我做$ IPA.GetType()。全名時它顯示System.Object []。 另外我不能做-eq,因爲IP是這樣列出的: IPAddress {10.45.22.100,2001:0db8:85a3:0000:0000:8a2e:0370:7334} – PSNewb

回答

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支持正則表達式模式字符串。所以如果你的字符串中有正則表達式元字符,你可能會得到意想不到的結果。

+0

不錯。謝謝!完美工作。 :) – PSNewb

0

發生這種情況是因爲$ IPA確實是一個對象數組。 當您運行Get-NetIPAddress | Where-Object InterfaceAlias -eq "MyPortName"時,它將返回一個類型爲MSFT_NetIPAddress的CIM實例數組。 當您通過運行$IPA = (Get-NetIPAddress | Where-Object InterfaceAlias -eq "MyPortName").IPv4Address詢問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地址的子網掩碼。

相關問題