Resolving IP Address from hostname with PowerShell

Powershell

Powershell Problem Overview


I am trying to get the ipaddress from a hostname using Powershell, but I really can't figure out how.

Any help?

Powershell Solutions


Solution 1 - Powershell

You can get all the IP addresses with GetHostAddresses like this:

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

You can iterate over them like so:

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

A server may have more than one IP, so this will return an array of IPs.

Solution 2 - Powershell

this is nice and simple and gets all the nodes.

$ip = Resolve-DNSName google.com
$ip

also try inputting an ip instead of a domain name and check out those results too!

Solution 3 - Powershell

Use 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

Solution 4 - Powershell

You could use vcsjones's solution, but this might cause problems with further ping/tracert commands, since the result is an array of addresses and you need only one.

To select the proper address, Send an ICMP echo request and read the Address property of the echo reply:

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

Though the remarks from the documentation say:

> The Address returned by any of the Send overloads can originate from a malicious remote computer. Do not connect to the remote computer using this address. Use DNS to determine the IP address of the machine to which you want to connect.

Solution 5 - Powershell

Working one liner if you want a single result from the collection:

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

hth

Solution 6 - Powershell

If you know part of the subnet (i.e. 10.3 in this example), then this will grab any addresses that are in the given subnet:

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

Solution 7 - Powershell

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

Solution 8 - Powershell

The Test-Connection command seems to be a useful alternative, and it can either provide either a Win32_PingStatus object, or a boolean value.

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

Solution 9 - Powershell

The simplest way:

ping hostname

e.g.

ping dynlab938.meng.auth.gr

it will print: Pinging dynlab938.meng.auth.gr [155.207.29.38] with 32 bytes of data

Solution 10 - Powershell

This worked well for my purpose

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

Solution 11 - Powershell

You can use this code if you have a bunch of hosts in text file

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

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

}

Solution 12 - Powershell

try $address = 'HOST NAME'

Resolve-DnsName $address | Select-Object Name, IPAddress | Export-csv "C:\Temp\CompleteNSLookup.csv" -append -NoType

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSuneView Question on Stackoverflow
Solution 1 - PowershellvcsjonesView Answer on Stackoverflow
Solution 2 - PowershellBridgerView Answer on Stackoverflow
Solution 3 - PowershellD JView Answer on Stackoverflow
Solution 4 - PowershellRobbie PView Answer on Stackoverflow
Solution 5 - PowershellJoe JohnstonView Answer on Stackoverflow
Solution 6 - PowershellDNTView Answer on Stackoverflow
Solution 7 - PowershelldsaydonView Answer on Stackoverflow
Solution 8 - PowershellPeter SchofieldView Answer on Stackoverflow
Solution 9 - Powershelluser3770660View Answer on Stackoverflow
Solution 10 - PowershellGary BarnesView Answer on Stackoverflow
Solution 11 - Powershellvivek sharmaView Answer on Stackoverflow
Solution 12 - Powershelluser263988View Answer on Stackoverflow