Table of Contents
1. はじめに
PowerShell を使うと、Windows 上で動作しているプロセスがどのアドレスと通信しているかを簡単に調査できます。
本記事では、TCP 接続情報を取得し、プロセス名と紐づけて Out-GridView で可視化するワンライナーを解説します。
GUI でフィルタリングできるため、ネットワーク調査やトラブルシューティングに非常に便利です。
|
1 2 3 4 5 |
Get-NetTCPConnection | Where-Object state -ne Bound | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess, @{n="ProcessName"; e={(Get-Process -Id $_.OwningProcess).ProcessName}} | Out-GridView |
このワンライナーは、TCP 接続情報を取得し、不要な状態を除外し、プロセス名を付加したうえで GUI 表示します。
3. 各コマンドの役割と詳細解説
3-1. Get-NetTCPConnection
Get-NetTCPConnection は、Windows の TCP 接続情報を取得する PowerShell コマンドです。
取得できる主な情報は以下の通りです。
- LocalAddress / LocalPort
- RemoteAddress / RemotePort
- State(Established, Listen, TimeWait など)
- OwningProcess(プロセス ID)
従来の netstat と異なり、PowerShell オブジェクトとして扱えるため、加工やフィルタリングが容易です。
3-2. Where-Object state -ne Bound
state プロパティは TCP の状態を表します。 その中で Bound は「ローカルポートを確保しているが、まだ Listen していない状態」です。
多くの場合、調査対象外となるため、このワンライナーでは Bound を除外しています。
3-3. Select-Object による必要項目の抽出
次に、必要なプロパティだけを抽出します。
|
1 2 |
Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess, @{n="ProcessName"; e={(Get-Process -Id $_.OwningProcess).ProcessName}} |
ここでは、TCP 接続の基本情報に加えて、計算列(@{...})を使い、プロセス ID からプロセス名を取得しています。
OwningProcess… プロセス ID(Get-Process -Id $_.OwningProcess).ProcessName… プロセス名を取得
これにより、「どのプロセスが通信しているか」を一覧で確認できます。
3-4. Out-GridView による GUI 表示
Out-GridView は、PowerShell の出力を GUI で表示するためのコマンドです。
主な特徴:
- 列ごとのフィルタリング
- ソート
- 検索ボックスでの絞り込み
ネットワーク調査では、特定ポートや特定プロセスを探す場面が多いため、GUI での操作は非常に便利です。
4. 実行例と画面イメージ
実行すると、以下のような GUI ウィンドウが表示されます(イメージ)。
- LocalAddress / LocalPort
- RemoteAddress / RemotePort
- State
- OwningProcess
- ProcessName
例えば、ProcessName 列で「chrome」をフィルタリングすれば、Chrome が行っている通信だけを確認できます。
5. 応用例
5-1. 特定ポートを使用しているプロセスを調べる
|
1 2 3 |
Get-NetTCPConnection -LocalPort 443 |
5-2. 特定プロセスの通信だけを表示する
|
1 2 3 4 |
Get-NetTCPConnection | Where-Object OwningProcess -eq (Get-Process chrome).Id |
5-3. CSV に出力する
|
1 2 3 |
Get-NetTCPConnection | Export-Csv tcp.csv -NoTypeInformation |
6. まとめ
本記事で紹介したワンライナーは、TCP 接続をプロセス単位で可視化する強力なツールです。
- PowerShell オブジェクトとして扱えるため加工が容易
- プロセス名と紐づけて通信状況を確認できる
- Out-GridView により GUI で直感的に調査できる
ネットワーク調査やトラブルシューティングの際に、ぜひ活用してみてください。




