我在PowerShell中使用NETSTAT命令。我需要获取以XYZ名称开头的外部地址列表,并使用TCP连接将ESTABLISHED作为状态。
由于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。
答案 0 :(得分: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返回的文本后,应该很容易获得所需的数据。
答案 1 :(得分:0)
运行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
答案 2 :(得分:0)
+1
代表@ E.V.I.L。答案,但由于分配(NetStat
和$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
。