Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell - Get server name and IP from text list

Tags:

powershell

csv

I am using the following suggestion provided in this link: Experts-Exchange

I am trying to take a server (host name) list and save the host name and IP address in a .csv file.

Using the following Powershell code, I do see the host name but the same IP address, for every server, in the results pane.

$servers = get-content "C:\TEMP\servers.txt"
$serversAndIps = "C:\TEMP\List_of_servers_with_ips.csv"


$results =@()
foreach ($server in $servers) {
  $results =@()
    $result = "" | Select ServerName , ipaddress
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
    $result.servername = $server
    $results += $result
}
$results | export-csv -NoTypeInformation $serversandips

When I open the .csv file, I get this:

"ServerName","ipaddress"
"Server_name_1","System.Net.IPAddress[]"

If I run this PowerShell script, I can get the host name and the correct IP address in the results pane. I just need to know how to transfer the results to a .csv file.

$servers = get-content "C:\TEMP\servers.txt"
foreach ($server in $servers) {
  $addresses = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
}

Any suggestions?

like image 968
Jeremy F. Avatar asked Apr 24 '15 17:04

Jeremy F.


1 Answers

Looks like some simple typos at work.

  • $result was being reset inside the in the loop
  • $addresses inside the loop wasn't assigned.
  • $result.ipaddress was not assigned to $a.IPAddressToString for the output object.

Try this:

$servers = get-content "X:\servers.txt"
$serversAndIps ="X:\test.csv"

$results = @()
foreach ($server in $servers)
{
    $result = "" | Select ServerName , ipaddress
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
    $addresses = [System.Net.Dns]::GetHostAddresses($server)

    foreach($a in $addresses) 
    {
        "{0},{1}" -f $server, $a.IPAddressToString
        $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
    }

    $result.servername = $server
    $result.ipaddress = $a.IPAddressToString
    $results += $result
}

$results | export-csv -NoTypeInformation $serversandips
like image 57
Jeffrey Eldredge Avatar answered Nov 16 '22 19:11

Jeffrey Eldredge