如何用PowerShell的Get-NetTCPConnection按进程名导出远程IP与端口
修改PowerShell脚本获取指定进程的所有TCP连接
优化后的脚本(支持单个/多个进程名,保留所有连接状态)
# 替换为你需要监控的进程名,多个进程用逗号分隔 $targetProcesses = "目标进程名1", "目标进程名2" # 获取目标进程的ID列表,避免重复查询进程信息 $processIds = (Get-Process -Name $targetProcesses -ErrorAction SilentlyContinue).Id if ($processIds) { # 获取目标进程的所有TCP连接,包含所有状态 Get-NetTCPConnection -OwningProcess $processIds -ErrorAction SilentlyContinue | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess, @{Name = "ProcessName"; Expression = { (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName } }, @{Name = "UserName"; Expression = { (Get-Process -Id $_.OwningProcess -IncludeUserName -ErrorAction SilentlyContinue).UserName } } | Format-Table -AutoSize -Force } else { Write-Host "未找到指定的进程:$($targetProcesses -join ', ')" }
关键修改说明
- 移除状态过滤:删掉原脚本中
Where {$_.State -eq"Established"}这一行,就能保留所有TCP连接状态(如Listen、SynSent、TimeWait等)。 - 先过滤进程ID提升效率:先通过
Get-Process获取目标进程的ID集合,再传递给Get-NetTCPConnection的-OwningProcess参数,减少需要处理的连接数量,比原脚本逐个查询进程名快很多。 - 支持多进程监控:只需在
$targetProcesses变量中添加多个进程名,用逗号分隔即可。 - 错误处理:添加
-ErrorAction SilentlyContinue避免进程不存在或无权限获取信息时抛出报错。
快速单进程查询命令(适合临时使用)
如果只是临时查询单个进程,也可以用简化版命令(效率略低于上面的脚本):
Get-NetTCPConnection | Where-Object { (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName -eq "你的进程名" } | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess, ProcessName, UserName | Format-Table -AutoSize -Force
内容的提问来源于stack exchange,提问作者ZodTheDestroyer
相关产品推荐
相关产品推荐

