Wednesday, August 26, 2015

PowerShell - Gathering IPs from servers

 

Needed to gather all the IPs on a bunch of remote servers.

Here is my script to pull all the IPs from a server and dump each IP to a CSV file with each IP on its own row.

 

##### Set Variables #######

$fileCount = 0

$List = @()

$i = 0

 

#get the list of servers to scan from serverlist.txt

$serverlist = "C:\scripts\computers.txt"

 

 

 

#get the count of servers for updates to the user.

 

$fileCount = (Get-Content $serverlist | Measure-Object).Count

 

 

 

#Loop the server list.

foreach ($server in Get-Content $serverlist) {

 

#increment the number of records proccessed

$i++

 

#Write to the screen whats happening.

Write-Progress -activity "Connecting to server $server" -status "Scanning: $i of $($fileCount)" -percentComplete (($i / $fileCount)  * 100)

 

#do a try if there is an issue spit out the error.

try {

 

    #IF there is an error stop and go to the next record.

    $ErrorActionPreference = 'Stop'

  

    $configs=Get-WmiObject -ComputerName $server win32_networkadapterconfiguration  | select IPaddress, ServiceName, Description | where IPaddress -ne $null

 

    Write-Progress -activity "Scanning server $server" -status "Scanning: $i of $($fileCount)" -percentComplete (($i / $fileCount)  * 100)

 

    #Set the array for the output.

      if($configs.IPaddress.Count -eq 1){

      $List += [pscustomobject]@{

            'ComputerName'     = $server

            'IPaddress'        = $configs.IPaddress.Item(0)

            'Description'      = $configs.Description

            }

      }

      else{

       

        for($thecount=1; $theCount -le $configs.IPaddress.Count){

 

            $List += [pscustomobject]@{

            'ComputerName'     = $server

            'IPaddress'        = $configs.IPaddress.Item($thecount - 1)

            'Description'      = $configs.Description.Item($thecount - 1)

            }

            $thecount++

           

        }  

      }

    }

    catch {

        $List += [pscustomobject]@{

        'ComputerName' = $server

        'IPaddress'    = "Error"

        'ServiceName'  = "Error"

        'Description'  = "Error"

    }

  }

 

}

 

 

write-progress -activity "Completed."

 

$randomString = Get-Date -format M.d.yyyy.HH.mm.ss

 

try{

md "c:\scripts\export\"

}

Catch{

}

 

$csvFileName = 'c:\scripts\export\' + $randomString + '_GetServerIPs.csv'

 

$csvFileName

 

$List  | Export-Csv $csvFileName -noType

 

 

Invoke-Item $csvFileName

 

 

No comments:

Post a Comment