使用PowerShell从主机名解析IP地址

时间:2011-12-28 20:25:22

标签: powershell

我正在尝试使用Powershell从主机名获取ipaddress,但我真的无法弄清楚如何。

任何帮助?

12 个答案:

答案 0 :(得分:49)

如果您想获取IP地址以便使用该地址,可以执行以下操作:

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

您可以像这样迭代它们:

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

服务器可能有多个IP,因此这将返回一个IP数组。

答案 1 :(得分:19)

这很简单,并且可以获取所有节点。

$ip = Resolve-DNSName google.com
$ip

也尝试输入ip而不是域名,并查看这些结果!

答案 2 :(得分:8)

使用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

答案 3 :(得分:5)

我会使用vcsjones评论的解决方案,但由于在具有多个IP地址的主机名上使用他的解决方案的结果将是一个IP数组,这将导致进一步ping / tracert的问题。

我使用的解决方案如下:

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

这将显示单个IP字符串(在$ips变量中),从单个ICMP回复中解析,防止具有多个IP的主机名的IP数组。

答案 4 :(得分:3)

解释了从powershell 中的主机名获取IPv4和IPv6地址here。此外,您可以通过单击上述文章中的Resolve IP address from Hostname来获取脚本。

答案 5 :(得分:1)

如果您知道子网的一部分(即本例中的10.3),那么这将获取给定子网中的任何地址:

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

答案 6 :(得分:1)

最简单的方法:

ping hostname

e.g。

ping dynlab938.meng.auth.gr

它将打印:    使用32字节数据ping dynlab938.meng.auth.gr [155.207.29.38]

答案 7 :(得分:1)

如果您想从集合中获得单个结果,请使用一个班轮:

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

HTH

答案 8 :(得分:1)

Test-Connection命令似乎是一个有用的替代方法,它可以提供Win32_PingStatus对象或布尔值。

文档: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/test-connection

答案 9 :(得分:0)

这很适合我的目的

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

如果文本文件中有一堆主机

,则可以使用此代码
$a = get-content "C:\Users\host.txt"(file path) 

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

}