可通过powershell的get-nettcpconnection与get-process配合winrm远程执行,批量获取远程主机tcp连接及对应pid;需目标机启用winrm、本地有管理员权限,并用invoke-command遍历主机采集,支持导出csv,udp可用get-netudpconnection替代。
可以通过 powershell 的 get-nettcpconnection 和 get-process 配合远程执行能力,批量获取远程主机上所有活动 tcp 连接及其对应的进程 pid。
使用 WinRM 远程执行命令(推荐)
确保目标主机已启用 WinRM(winrm quickconfig),且当前用户有远程管理员权限。
- 在本地运行以下脚本,遍历主机列表并收集每个主机的连接与 PID 映射:
$Computers = @("Server01", "Server02", "192.168.1.100")
$results = foreach ($comp in $Computers) {
try {
Invoke-Command -ComputerName $comp -ScriptBlock {
Get-NetTCPConnection |
Where-Object { $_.State -eq 'Established' -or $_.State -eq 'Listen' } |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
LocalAddress = $_.LocalAddress
LocalPort = $_.LocalPort
RemoteAddress= $_.RemoteAddress
RemotePort = $_.RemotePort
State = $_.State
PID = $_.OwningProcess
ProcessName = if ($proc) { $proc.ProcessName } else { 'N/A' }
UserName = if ($proc) { (Get-Process -Id $proc.Id -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty UserName -ErrorAction SilentlyContinue) } else { 'N/A' }
}
}
} -ErrorAction Stop
}
catch {
Write-Warning "无法连接到 $comp`: $($_.Exception.Message)"
}
}
$results | Export-Csv -Path "NetworkConnections_PID_Report.csv" -NoTypeInformation -Encoding UTF8
若 WinRM 不可用:通过 PSSession 手动建立会话
适用于临时调试或策略限制 WinRM 的环境。
- 先创建持久会话:
$s = New-PSSession -ComputerName Server01 -Credential (Get-Credential) - 再用
Invoke-Command -Session $s -ScriptBlock { ... }执行采集逻辑 - 采集完毕后记得清理:
Remove-PSSession $s
补充说明:UDP 连接与非管理员权限限制
Get-NetTCPConnection 默认需要管理员权限才能获取完整 OwningProcess;普通用户可能看到 PID 为 0 或报错。
- 如需 UDP 连接,替换为
Get-NetUDPConnection,逻辑相同 - 若无本地管理员权限,可改用
netstat -ano解析文本输出(兼容性高但解析稍繁琐) - 注意防火墙策略:确保入站规则允许 Windows Remote Management (HTTP-In)
快速验证单机连接与 PID 的常用命令
调试阶段建议先在目标机本地运行确认效果:
Get-NetTCPConnection | ? State -eq 'Established' | Select LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcessGet-Process -Id 1234 | Select Id,ProcessName,UserName- 组合查询某 PID 的所有连接:
Get-NetTCPConnection | ? OwningProcess -eq 1234










