2012-04-18 113 views
3

我一直想弄清楚爲什麼我的代碼不工作。
幾乎我有一個CSV文件中的IP地址列表。從這個IP地址列表中我想獲取計算機名稱。當我執行不管我得到什麼使用CSV文件通過IP地址從網絡拉電腦名稱

異常調用帶有「1」參數的「GetHostByAddress」:「指定了無效的IP地址」。 在行:3字符:35 + [System.Net.dns] :: GetHostbyAddress < < < <( 「$ foo的[0]」) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

這裏是CSV文件和所使用的代碼的一個例子:

CSV文件


192.168.0.11
192.168.0。 12
192.168.0.13
192.168.0.14

正在使用的代碼:

$foo = import-csv C:\test\test\test.csv 
[System.Net.dns]::GetHostbyAddress("$foo[0]") 

回答

7

更新:如果存在,添加Trim()調用來刪除前導空格或尾隨空格。

刪除引號並調用值屬性:

$foo = import-csv C:\test\test\test.csv 
[System.Net.dns]::GetHostbyAddress($foo[0].Value.Trim()) 

要解決所有地址:

import-csv C:\test\test\test.csv | 
foreach-object { [System.Net.dns]::GetHostbyAddress($_.Value.Trim()) } 

您可以使用-as型操作者通過僅在有效地址:

import-csv C:\test\test\test.csv | 
where-object {$_.Value.Trim() -as [ipaddress]} | 
foreach-object { [System.Net.dns]::GetHostbyAddress($_.Value.Trim()) } 
+0

在我的盒子裏(七+ PowerShell 2.0)$ foo [0] .value或$ _。value總是$ null。我已經從OP的樣本中複製並粘貼了csv。你有一些提示嗎? th – 2012-04-18 19:45:58

+0

只需雙重檢查,$ foo [0] .value或$ _。value對我來說可以按預期工作。我看到你已經使用gc而不是ipcsv,可能是.Value返回空值的原因。 – 2012-04-18 19:53:19

+0

沒有。我在我的回答中使用了gc。我會談談你使用import-csv示例... – 2012-04-18 19:57:47

0

如果你的示例文件是正確的,我建議這樣做:

$foo = get-content C:\test\test\test.csv | ? { $_ -notmatch "Value" } 

[System.Net.dns]::GetHostbyAddress($foo[0])