2

我在 PowerShell 中使用 NETSTAT 命令。我需要获取以 XYZ 名称开头并使用 TCP 连接建立为状态的外部地址列表。

由于 NETSTAT 结果如下,我坚持解析。

PS C:\Windows\system32> .\NETSTAT.EXE

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    10.125.4.233:2310      157.05.39.133:2492     ESTABLISHED

我只需要外部地址名称而不是本地主机上的远程地址。
远程地址不显示 FQDN。

4

3 回答 3

4
 $netstats = netstat -p TCP -f
 $data = $netstats[4..($netstats.count)] #The good info starts on index 4
 foreach($line in $data){
     $line = $line -split ' ' | ? {$_ -ne ''}
     $final += @(New-Object -TypeName psobject -Property @{'Proto'=$line[0];'LAddress'=$line[1];'FAddress'=$line[2];'State'=$line[3]})
 }
 $netstat_results = $final
 $netstat_results | ? {$_.state -eq 'ESTABLISHED'}

现在,在解析 netstat 返回的文本后,应该很容易获得您想要的数据。

于 2013-03-22T03:10:38.923 回答
1

运行 netstat /? 产量,除其他外:

-f 显示外部地址的完全限定域名 (FQDN)。

使用 New-PSObjectFromMatches 解析:

netstat -f |
 new-psobjectfrommatches -pattern "(TCP|UDP)\s+(\S+)\s+(\S+):(\S+)\s+(\S+)" -property $nul,TCP/UDP,LocalAddress,ForeignAddress,Protocol,State |
 where {(
         ($_.TCP/UDP -eq 'TCP') -and
         ($_.State -eq 'ESTABLISHED') -and
         ($_.ForeignAddress -like 'XYZ*')
        )} | select -ExpandProperty ForeignAddress 
于 2013-03-22T00:20:34.847 回答
1

+1NetStat对于@EVIL 的答案,但由于分配($netstats和) ,它阻塞了(慢)流$final。为了保持管道流式传输,最好避免分配,例如:

netstat -p TCP -f | Select -Skip 4 | ForEach {
    $Properties = $_.Trim() -split '[\s]+'
    [PSCustomObject]@{
        'Proto'= $Properties[0]
        'Local Address'= $Properties[1]
        'Foreign Address'= $Properties[2]
        'State'= $Properties[3]
    }
}

通过添加例如| Select -Expand 'Foreign Address',您将得到Foreign Address.

于 2018-12-08T12:06:55.790 回答