Today you will find out how to get netstat and traceroute results from remote machines. I often had a situation where I was asked to do some basic checks from a network perspective. It’s easy once you already have a script for that.
Netstat and traceroute
There are multiple ways to do network checks. I guess that most of you are probably familiar with commands like ipconfig, tracert, netstat and ping. In this example, I had to combine a simple netstat command and PowerShell Test-NetConnection cmdlet with -Traceroute parameter.
Please note that Traceroute can take a long time to complete. If you want to check multiple servers it will take few hours probably especially if URLs used for the testing purpose are inaccessible.
Below you can find a script which will run network tests on the remote machines. Here is the output in the console for a single machine:

And if you want to display property:

As you can see its difficult to read all the information in PowerShell console. This is why script will save results in Netstat and Traceroute folders on your desktop:

Final script:
#=========================================================================== # Server list $Servers = Get-Content "c:\users\$env:username\desktop\input.txt" # Define empty array $Results = @() # Looping each server and adding objects to array $Results = Invoke-Command -cn $Servers { # URLs $URLs = "http://test1.powershellbros.com", "http://test2.powershellbros.com", "http://test3.powershellbros.com" # Creating new object $Object = New-Object PSCustomObject $Object | Add-Member -MemberType NoteProperty -Name "Servername" -Value $env:computername $Object | Add-Member -MemberType NoteProperty -Name "Netstat" -Value $(netstat -an) # Looping each URL Foreach ($URL in $URLs){ $ObjectProp = (($URL -split "\//")[1]).trim() $Trace = Test-NetConnection $ObjectProp -traceroute $Object | Add-Member -MemberType NoteProperty -Name $($ObjectProp) -Value $Trace -Force } # Adding object to array $Object } | select * -ExcludeProperty runspaceid, pscomputername,PSShowComputerName #=========================================================================== # Paths for netstat and traceroute results $NetStatPath = "c:\users\$env:username\desktop\netstat\" $TracePath = "c:\users\$env:username\desktop\traceroute\" # Creating folders $NetFolder = Test-Path $NetStatPath; if ( -not $NetFolder) { New-Item $NetStatPath -type Directory } $TraceFolder = Test-Path $TracePath; if ( -not $TraceFolder) { New-Item $TracePath -type Directory } # Saving results to txt files foreach ($Item in $Results) { #Getting all properties from object $Properties = ($item | Get-Member -MemberType Properties).name | where {$_ -ne "Servername"} # Looping each property Foreach ($p in $Properties) { If($p -notmatch "netstat"){ $Path = $TracePath + "$($item.Servername)" + "_$($p)" + "_Traceroute.txt" $item.$p | Out-File $Path -Force } Else{ $Path = $NetStatPath + "$($item.Servername)" + "_NetStat.txt" $Item.$p | Out-File $Path -Force } } }