概要
Windowsサーバーでリッスンポートを調べるPowerShellコマンド。
よくあるnetstatコマンドで確認する方法だと、使用しているプロセスの情報がIDぐらいしか出せないけど、このコマンドだともう少し詳しく出力することができる。
<リッスン状態のポートを全て出力するコマンド>
Get-NetTCPConnection -State Listen | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
LocalPort = $_.LocalPort
Protocol = $_.Protocol
PID = $_.OwningProcess
ProcessName = $proc.ProcessName
Path = ($proc.Path -join '')
Description = try {
(Get-Item ($proc.Path)).VersionInfo.FileDescription
} catch { "" }
}
} | Sort-Object LocalPort | Format-Table -Wrap -AutoSize
<その中でもさらに外部接続があるポートを全て出力するコマンド>
※ただし、コマンドを実行した瞬間での話しなので参考程度に。
# LISTEN中で、実際にESTABLISHEDが存在するポートだけ抽出
$listenConnections = Get-NetTCPConnection -State Listen
$establishedConnections = Get-NetTCPConnection -State Established
$activePorts = $establishedConnections |
Group-Object LocalPort | ForEach-Object { $_.Name }
$listenConnections | Where-Object {
$activePorts -contains $_.LocalPort
} | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
LocalPort = $_.LocalPort
Protocol = $_.Protocol
PID = $_.OwningProcess
ProcessName = $proc.ProcessName
Path = ($proc.Path -join '')
Description = try {
(Get-Item ($proc.Path)).VersionInfo.FileDescription
} catch { "" }
}
} | Sort-Object LocalPort | Format-Table -Wrap -AutoSize