function Get-Connections { [CmdletBinding()] param( [Parameter(Mandatory)][string[]]$Server ) foreach($currentServer in $Server) { #$ipaddresslist = [System.Net.Dns]::GetHostByName($server).AddressList | Select-Object -ExpandProperty IPAddressToString Write-Verbose "Invoke-Command Get-WmiObject Win32_NetworkAdapterConfiguration" $networkadapterconfiguration = Invoke-Command -ComputerName $currentServer -ScriptBlock { Get-WmiObject -Class Win32_NetworkAdapterConfiguration } $ipaddresslist = foreach($adapter in $networkadapterconfiguration) { if(-not $adapter.IPAddress) { Write-Verbose "$($adapter.Description) IPAddress `$null" continue } foreach($entry in $adapter.IPAddress) { Write-Verbose "$($adapter.Description) IPAddress $entry" Write-Output $entry } } $ipaddresslist += '[::]','0.0.0.0','127.0.0.1' Write-Verbose "Invoke-Command netstat -na" $netstat = Invoke-Command -ComputerName $currentServer -ScriptBlock { netstat -na } Write-Verbose "Result:`n$netstat" foreach($line in $netstat) { $str = $line.Trim() -replace " +", " " Write-Verbose "Processing: $str" if(-not $str.StartsWith("TCP")) { Write-Verbose "'$str' is not TCP" continue } $split = $str.Split(' ') #[0] protocol #[1] source:port #[2] destination:port #[3] state if(-not $split[1].StartsWith('[')) { #IPv6 $source = $split[1].Split(':') } else { $index = $split[1].IndexOf(']') + 1 $source = @( $split[1].Substring(0, $index) $split[1].Substring($index + 1) ) } #[0] ip #[1] port if(-not $split[2].StartsWith('[')) { #IPv6 $destination = $split[2].Split(':') } else { $index = $split[1].IndexOf(']') + 1 $destination = @( $split[2].Substring(0, $index) $split[2].Substring($index + 1) ) } #[0] ip #[1] port Write-Output ([pscustomobject]@{ Server = $currentServer.ToUpper() SourceIP = $source[0] SourcePort = $source[1] DestinationIP = $destination[0] DestinationPort = $destination[1] ServerIsSource = ($ipaddresslist -contains $source[0]) ServerIsDestination = ($ipaddresslist -contains $destination[0]) ConnectionState = $split[3] }) } } }