我正在尝试使用Powershell从主机名获取ipaddress,但我真的无法弄清楚如何。
任何帮助?
答案 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对象或布尔值。
答案 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)
}