2011-12-28 117 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) 

}