Wednesday, 24 June 2015

Powershell : Resolve Hostname from IP address and vice versa

In this article, I am going to write powershell script to find machinename from IP address and get IP address from computer name. We can resolve hostname from IP address and vice versa by using .NET class System.Net.Dns.

Find machine name from IP address:

$ipAddress= "192.168.1.54"
[System.Net.Dns]::GetHostByAddress($ipAddress).Hostname

Resolve Hostname to IP Address:

$machineName= "DC1"
$hostEntry= [System.Net.Dns]::GetHostByName($machineName)
$hostEntry.AddressList[0].IPAddressToString

Resolve Hostname for set of IP addresses from text file:

Use the below powershell script to find machine name for multiple IP addresses. First create the text file ip-addresses.txt which includes one IP address in each line. You will get the machinename list in the txt file machinenames.txt.
Get-Content C:\ip-addresses.txt | ForEach-Object{
$hostname = ([System.Net.Dns]::GetHostByAddress($_)).Hostname
if($? -eq $True) {
  $_ +": "+ $hostname >> "C:\machinenames.txt"
}
else {
   $_ +": Cannot resolve hostname" >> "C:\machinenames.txt"
}}

Find Computer name for set of IP addresses from CSV:

Use the below powershell script to get hostname for multiple IP addresses from csv file. First create the csv file ip-addresses.csv which includes the column IPAddress in the csv file. You will get the hostname and IP address list in the csv file machinenames.csv.
Import-Csv C:\ip-Addresses.csv | ForEach-Object{
$hostname = ([System.Net.Dns]::GetHostByAddress($_.IPAddress)).Hostname
if($? -eq $False){
$hostname="Cannot resolve hostname"
}
New-Object -TypeName PSObject -Property @{
      IPAddress = $_.IPAddress
      HostName = $hostname
}} | Export-Csv C:\machinenames.csv -NoTypeInformation -Encoding UTF8

Advertisements
Advertisements

4 comments:

  1. Thank you! Finally a simple solution.

    ReplyDelete
  2. Hey guys, I am testing this solution which seems amazing; however I am having an issue where the results being generated into the txt, is the actual name of the network host, rather than the actual PC names on our network. Am I doing something incorrectly?

    ReplyDelete
    Replies
    1. This is expected behaviour. This script extract hostname, but in most scenarios the computer name should have been added in your DNS store as hostname. Hope in your case, you have provided custom made hostname, you have to use WMI based query to get computer name. Will post relevant script if you needed.

      Delete
  3. Second snippet was just what I needed. Thanks!

    ReplyDelete