netstat -a -o -n
を使ってポートとPIDのリストを取得することができます
それから私はタスクマネージャに行き、PIDを追加してそれがだれであるか見る必要があります。 (かなりイライラする)
それをすべて行うCMDコマンドがあるかどうか(find
、for
、powershell
を使用)
プロセス名を取得できるように
-b
パラメーターを使用してください。
-b Displays the executable involved in creating each connection or
listening port. In some cases well-known executables Host
multiple independent components, and in these cases the
sequence of components involved in creating the connection
or listening port is displayed. In this case the executable
name is in [] at the bottom, on top is the component it called,
and so forth until TCP/IP was reached. Note that this option
can be time-consuming and will fail unless you have sufficient
permissions.
注netstat -b
コマンドは、昇格したコマンドプロンプトから実行しないと失敗します。
プロセスリストをフィルタリングして、興味のあるPIDを見つけます。
tasklist | findstr /c:"PID"
代わりにTcpvcon.exe
を使うことができます。管理者権限は必要ありません。
Tcpvcon の使い方は、組み込みのWindows
netstat
ユーティリティの使い方と似ています。
Usage: tcpvcon [-a] [-c] [-n] [process name or PID]
-a Show all endpoints (default is to show established TCP connections).
-c Print output as CSV.
-n Don't resolve addresses.
SysInternalsから TCPView を探していると思います。
あなたがPSを使用するのが好きなら、あなたはこのコードをフォークすることができます(注:それは超基本的です)
$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
# make split easier PLUS make it a string instead of a match object:
$p = $n -replace ' +',' '
# make it an array:
$nar = $p.Split(' ')
# pick last item:
$pname = $(Get-Process -id $nar[-1]).ProcessName
$ppath = $(Get-Process -id $nar[-1]).Path
# print the modified line with processname instead of PID:
$n -replace "$($nar[-1])","$($ppath) $($pname)"
}
完全な実行可能パスを取得するには、Path
の代わりにProcessName
を試すことができます。ただし、システムサービスでは機能しません。また、PID値を置き換える代わりに、行の終わりにProcessName
を追加することもできます。
楽しめ ;)
これは、FOR
を使用してnetstat
出力を解析し、次にpidに/fi
フィルターを付けてDO
tasklist
を使用してプロセス名を表示する例です。
最後の検索はtasklist
ヘッダーを削除することです。
FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"
以下のようなレコード出力を印刷します。
Tomcat8.exe.x64 4240 Services 0 931,864 K
トークンを追加することでnetstat
からの追加フィールドを追加できます。
とても素敵なErik Bitemo!私はパスに変数を追加することを考えていました、それから私はあなたがすでにそれが定義されていないけれどもそれを持っていることに気づきました。だから私が再利用したコードは次のとおりです。
$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
{
# make split easier PLUS make it a string instead of a match object
$p = $n -replace ' +',' ';
# make it an array
$nar = $p.Split(' ')
# pick last item...
$pname = $(Get-Process -id $nar[-1]).ProcessName
$ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
$n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
}
私はやや異なる2ライナーを使用したアプリケーションのプロセスとサービスを見つけようとしていました。
Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto
Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto
これを使ってみてください...
Onelinerのタイムスタンプ付きプロセス名:) ...スクリプトを作成する必要はありません。
パラメータSYN_SENTはESTABLISHEDまたはLISTENINGで変更できます。
filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp
filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp