我正在使用Powershell尝试从主机名获取IP地址,但我真的搞不明白该怎么做。
有什么帮助吗?
我正在使用Powershell尝试从主机名获取IP地址,但我真的搞不明白该怎么做。
有什么帮助吗?
$ips = [System.Net.Dns]::GetHostAddresses("yourhosthere")
您可以像这样迭代它们:
[System.Net.Dns]::GetHostAddresses("yourhosthere") | foreach {echo $_.IPAddressToString }
这很好而且简单,并获取所有节点。
$ip = Resolve-DNSName google.com
$ip
也可以尝试输入IP地址而不是域名,查看那些结果!
Resolve-DnsName
不是 PowerShell Core / PowerShell 7 的一部分,因此为了跨平台,您需要使用 System.Net.Dns.GetHostAddresses
。 - Carl Walsh[System.Net.Dns] :: GetHostAddresses("yourhosthere")
不同,这个方法会有一点延迟(在我的情况下大约是一秒钟)。 - YakovLResolve-DNSName
被设置为SkipAsSource
时(例如在hosts
中指定),它可以成功地获取IP地址,而GetHostAddresses()
则失败。 - Hashbrown使用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
发送
一个ICMP回显请求并读取回显响应的Address
属性:$ping = New-Object System.Net.NetworkInformation.Ping
$ip = $($ping.Send("yourhosthere").Address).IPAddressToString
虽然文档中的注释说:
通过任何
Send
重载返回的Address
可能来自恶意远程计算机。不要使用此地址连接到远程计算机。请使用DNS确定您想要连接的计算机的IP地址。
如果您想从集合中获取单个结果,则可以使用以下一行代码:
$ipAddy = [System.Net.Dns]::GetHostAddresses("yahoo.com")[0].IPAddressToString;
hth
如果您知道子网的一部分(例如此示例中的10.3),则会获取给定子网中的任何地址:
PS C:\> [System.Net.Dns]::GetHostAddresses("MyPC") | foreach { $_.IPAddressToString | findstr "10.3."}
Test-Connection命令似乎是一个实用的替代方案,它可以提供Win32_PingStatus对象或布尔值。
Documentation: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/test-connection
$computername = $env:computername
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString }
这对我的目的非常有效
$ping = ping -4 $env:COMPUTERNAME
$ip = $ping.Item(2)
$ip = $ip.Substring(11,11)
如果你有一个主机列表的文本文件,你可以使用这段代码。
$a = get-content "C:\Users\host.txt"(file path)
foreach ($i in $a )
{
$i + "`n" + "==========================";[System.Net.Dns]::GetHostAddresses($i)
}