2011-12-28 114 views

回答

43

如果你想要得到的IP地址,這樣你就可以與地址的工作,你可以這樣做:

$ips = [System.Net.Dns]::GetHostAddresses("yourhosthere") 

可以遍歷他們像這樣:

[System.Net.Dns]::GetHostAddresses("yourhosthere") | foreach {echo $_.IPAddressToString } 

服務器可以有多個IP,所以這將返回一個IP數組。

+3

$ ip = [System.Net.Dns] :: GetHostAddresses(「yourhosthere」)[0]將確保您只有一個IP地址,如果您確定它會解決 – 2014-11-10 14:36:46

3

從powershell中的主機名獲取IPv4和IPv6地址的解釋是here。另外,您可以通過點擊上述文章中的Resolve IP address from Hostname來獲得腳本。

+1

我們未來可能無法使用的鏈接,請包括核心組件在您的答案,只使用鏈接的「更多信息」 – rob 2016-10-07 08:39:17

5

我會使用解決方案vcsjones評論,但由於他的解決方案的結果,當用於具有多個IP地址的主機名將是一個IP數組,這將導致進一步的ping/tracert問題。

我使用的解決方案是:

$ping = New-Object System.Net.NetworkInformation.Ping 
$ips = $($ping.Send("yourhosthere").Address).IPAddressToString 

這將顯示單個IP串(在$ips變量),從單一的ICMP迴應解決,防止IP地址的陣列用於與多個IP主機名。

+0

爲什麼你有一個$前($ ping.Send .......? – 2017-05-09 03:53:33

+0

@Backwards_Dave,顯然我習慣用圓括號來分組項目已經結束(...): $ ips = $ ping.Send(「yourhosthere」)。Address.IPAddressToString 感謝您的詢問。Less is more ... – 2017-05-10 09:46:44

1

如果您知道子網(即在本例中10.3)的一部分,那麼這將搶在給定的子網中的所有地址:

PS C:\> [System.Net.Dns]::GetHostAddresses("MyPC") | foreach { $_.IPAddressToString | findstr "10.3."} 
1

最簡單的方法:

ping hostname 

例如

ping dynlab938.meng.auth.gr 

它將打印: ping命令dynlab938.meng.auth.gr [155.207.29.38]用32字節的數據

+0

作爲PowerShell的問題,我希望答案是一個字符串/包含IP地址的對象 – rob 2016-10-07 08:40:44

0

的這很適合於我的目的

$ping = ping -4 $env:COMPUTERNAME 
$ip = $ping.Item(2) 
$ip = $ip.Substring(11,11) 
11

這是好的簡單並獲得所有節點。

$ip = Resolve-DNSName google.com 
$ip 

也嘗試輸入一個IP而不是域名,並檢查出這些結果呢!

+0

Best answe在這裏! – gvee 2016-05-26 15:05:31

+0

底下是如何不同[System.Net.Dns] :: GetHostAddresses? – Castrohenge 2017-09-07 11:51:31

+0

如果您只想使用此方法訪問IP地址,請使用$ ip.IPAddress。注意,如果有多個IP,這將返回一個數組。 – 2018-01-19 21:04:37

1

工作一個襯墊,如果你想從集合單個結果:

$ipAddy = [System.Net.Dns]::GetHostAddresses("yahoo.com")[0].IPAddressToString; 

心連心

0
$computername = $env:computername  
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString } 
+1

儘管此代碼可能會回答問題,但爲何和/或如何通過此代碼來回答問題提供了其他上下文,這可以提高其長期價值。 – JAL 2015-12-23 15:12:59

4

使用Resolve-DnsName cmdlet的。

Resolve-DnsName computername | FT Name, IPAddress -HideTableHeaders | Out-File -Append c:\filename.txt 

PS C:\> Resolve-DnsName stackoverflow.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
stackoverflow.com        A  130 Answer  151.101.65.69 
stackoverflow.com        A  130 Answer  151.101.129.69 
stackoverflow.com        A  130 Answer  151.101.193.69 
stackoverflow.com        A  130 Answer  151.101.1.69 

PS C:\> Resolve-DnsName stackoverflow.com | Format-Table Name, IPAddress -HideTableHeaders 

stackoverflow.com 151.101.65.69 
stackoverflow.com 151.101.1.69 
stackoverflow.com 151.101.193.69 
stackoverflow.com 151.101.129.69 

PS C:\> Resolve-DnsName -Type A google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          A  16 Answer  216.58.193.78 


PS C:\> Resolve-DnsName -Type AAAA google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          AAAA 223 Answer  2607:f8b0:400e:c04::64 
+1

雖然這段代碼可能會回答這個問題,但提供關於爲什麼和/或該代碼如何回答問題的其他內容可以提高其長期價值。 – Jack 2016-01-07 15:36:20

0

如果你有一大堆主機的文本文件,您可以使用此代碼

$a = get-content "C:\Users\host.txt"(file path) 

foreach ($i in $a) 
    { 
$i + "`n" + "==========================";[System.Net.Dns]::GetHostAddresses($i) 

}