2014-04-28 62 views
0

我試圖將註冊表項與多宿主服務器中的DNS相匹配。問題是system.net.dns似乎返回更多然後在DNS中。Powershell返回的內容超過DNS中的內容

實施例:

nslookup hostname.dns.net 
Server DNS.server.naem 
Address: IP.Address.of.server 

Name: hostname.dns.net 
Address: single.ip.of.server 

然而,當使用:

$DNSResult = [System.Net.Dns]::GetHostEntry($Computer) 
$DNSresult.addresslist 

它輸出2在服務器的IP地址,已發佈的一個和未公開的一個....

我如何才能獲得由DNS發佈的結果。

+0

也許這會幫助 http://stackoverflow.com/questions/22842082/how-do-i-force-the-dns-gethostaddresses-net-method-to-only-query-dns-or-the -dns/22842379#22842379 – Raf

+0

謝謝,如果沒有辦法解決系統調用,我可能不得不走這條路,但我不希望。 – user3566297

+0

將您附加的方法與問題掛鉤: $ computername = $ env:COMPUTERNAME function dnsLookup($ hostname){ $ r =(nslookup $ hostname | Out-String).split(「n」) for($ i = 4; $ i -lt($ r.count - 2); $ i ++)$ r [$ i] .replace(「Address:」,「」)。replace(「Addresses: 「」).replace(」」, 「」)替換( 「'T」, 「」) }} [Net.IPAddress] $ DNSIP = dnsLookup $計算機名 $ DNSIP 我得到的錯誤: 無法將值「10.0.0.1」轉換爲鍵入「System.Net.IPAddress」。錯誤:「指定了無效的IP地址。」 – user3566297

回答

0

Re Net.IPAddress]$dnsip=dnsLookup $computername $dnsip錯誤。我添加了一個換行符清理,它隱藏在輸出結尾並阻止了正確的解析。 nslookup的輸出被分解成字符串數組。用$i = 4你開始處理第5行的輸出,即第一個返回地址的輸出。 $r.count - 2停止處理最後一行,一個空字符串。

function dnsLookup($hostname){ 
    $r = (nslookup $hostname | Out-String).split("`n") 
    for($i = 4; $i -lt ($r.count - 2); $i++){ 
     $r[$i] -replace ("Address: |Addresses: | |`t|`r|Server"),"" 
    } 
} 

現在Net.IPAddress]$dnsip=dnsLookup $computername將工作。

+0

非常感謝!你能解釋這是如何工作的嗎?我理解從NSLookup的結果中刪除所有信息和空格,但是這是幹什麼的: ($ i = 4; $ i -lt($ r.count - 2); $ i ++) – user3566297

+0

沒問題,我修改了答案 – Raf