Powershell – 捕获套接字和进程

我正在尝试这个小PowerShell脚本每五秒查找一次netstat -ano输出,然后只在端口80上过滤任何IP地址上的传出连接,另外捕获打开套接字的相关进程。 我认为这里的问题是如果在输出中有多个条目,那么它不能处理数组。 这里缺less什么? 任何更好的方法来做到这一点?

while(1) {netstat -ano | ? {$_ -like "*10.10.10.10:* *:80 *"} | % { $_ -match "\d+$"; $matches | ForEach-Object { Get-Process -id $matches[0] | Format-List *; (Get-Process -id $matches[0]).WaitForExit() } Start-Sleep -s 5; } } 

Shay Levy写了一个函数来处理netstat信息,它可以帮助你过滤你的信息,并以一种更易于过滤的方式输出: 如何找到正在运行的进程及其端口号

注:我知道大多数人可能会说,在页面丢失的事件发布在这里的代码。 Shay正在更新这个页面,因为事情发生了变化或者需要改进(比如增加对IPv6连接的支持),所以我怀疑他会很快把它取下来。

请参阅Get-NetworkStatistics :

 > Get-NetworkStatistics | where Localport -eq 8000 ComputerName : DESKTOP-JL59SC6 Protocol : TCP LocalAddress : 0.0.0.0 LocalPort : 8000 RemoteAddress : 0.0.0.0 RemotePort : 0 State : LISTENING ProcessName : node PID : 11552