2014-04-16 52 views
0

一個問題難倒了這裏 - 運行PowerShell的1.0PowerShell的錯誤 - GetHostByAddress

代碼(假設IP地址是在被傳遞有效):

$ips = @(Import-CSV $attachmentLocation) 
foreach ($ip in $ips){ 
    $ipAddress = $ip.IPAddress 
$length = $ipaddress.length 
write-host "Length is: ($length)" 
    if(Test-Connection -ComputerName $ipAddress -Count 1 -ea silentlycontinue) { 
     write-host $ipAddress 
     $hostData = ([Net.Dns]::GetHostByAddress($ipAddress)).HostName 
    } 
} 

輸出:

Length is: (11) 
10.xx.xx.xx 
Exception calling "GetHostByAddress" with "1" argument(s): "The requested name is valid, but no data of the requested type was found" 
At FileName:13 char:43 
+   $hostData = ([Net.Dns]::GetHostByAddress <<<< ($ipAddress)).HostName 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

如果我運行以下它工作正常 - 似乎是數據類型問題(im傳遞字符串值):

$hostData = ([Net.Dns]::GetHostByAddress("10.xx.xx.xx")).HostName 

工作代碼:

$ipAddress = "10.xx.xx.xx" 
$hostData = ([Net.Dns]::GetHostByAddress($ipAddress)).HostName 

答: 問題是與ActiveDirectory域名DNS解析不是命令,而一些IP地址是ping命令他們不要在那裏運行腳本的機器上妥善解決。這導致錯誤'找不到所請求類型的數據'是指它無法將IP解析爲DNS名稱。

+0

$ ipaddress從哪裏來?任何機會都有尾隨空白?你在那個地址有RDNS嗎? – mjolinor

+0

沒有結尾的空格,當我直接以字符串的形式輸入IP地址時工作正常。已經搜索了互聯網已經沒有成功。謝謝回覆! –

+0

什麼意思是「該域名存在問題」?你能否進一步解釋? – Suncatcher

回答

2

我有兩個想法,你可以嘗試:

  1. GetHostByAddress()支持stringipaddress。所以在運行該函數之前,請嘗試將其轉換爲ipaddress類型。

    如果(試驗連接-ComputerName $ ip地址-Count 1 -ea silentlycontinue){ 寫主機$ ip地址 $ hostData =([Net.Dns] :: GetHostByAddress(([IPADDRESS] $ ip地址))) .HostName }

  2. 如果您使用PS 1.0,那麼您的首要任務應該是將機器升級到至少PowerShell 2.0。在PS 1.0中沒有什麼效果。

+0

不,它不起作用。有一個很好的理由,我沒有提供輸出見下面的問題的第二行: 「代碼(假設一個有效的IP地址被傳入):」 因此不需要發送輸出爲假設已輸入有效的IP地址。 感謝您的回覆! –

+0

我們需要看看'$ ipaddress'是如何創建的,我們需要看到它的值(如果你真的需要用X代替數字),我們需要看到'$ ipaddress.count'。當我們沒有得到必要的信息時,我們無法幫助您。該示例在PS 2.0上完美運行 - >。 –

+0

我已經添加了'輸出'不知道什麼幫助它會給你其他然後確認它的字符串不是我在描述中確認的對象「(即時通訊字符串值):」。希望它現在更清晰。 –

0

運行PS3時,在我們的域上遍歷子網時出現錯誤。特別是遠程位置。 我正在檢查我們域中的5個不同的C類子網,以確保沒有AD中沒有的設備。 也有可能有些設備不是帶有主機名的PC:路由器,交換機,防火牆,掃描儀等。 當我的代碼到達我的本地辦公室時,沒有錯誤。

我沒有使用文件,而是通過腳本中的代碼生成子網。