2012-08-12 24 views
2

我想這個小PowerShell腳本每五秒尋找netstat -ano輸出,然後在任何IP地址上只過濾端口80上的傳出連接,再加上捕獲打開套接字的相關進程。 我認爲這裏的問題是如果輸出中有多個條目,那麼它不能處理數組。這裏缺少什麼?任何更好的方式來做到這一點?PowerShell - 捕獲套接字和進程

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; 
    } 
} 

回答

1

Shay Levy寫了一個函數與netstat信息,可以幫助你過濾了你的信息,並將其輸出的方式,會更容易過濾的工作:How to find running processes and their port number

注:我大概知道大多數人如果在頁面丟失的情況下發布代碼。 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