powershell 是 windows 原生端口监控利器,支持一键查端口占用(含进程名、pid)、批量扫描、导出csv、识别系统预留端口及安全终止进程。
powershell 是 windows 原生、无需安装的端口占用监控利器,比 netstat 更直观、更可编程,尤其适合开发者和运维人员快速定位冲突端口。
查指定端口是否被监听(含进程名)
管理员身份打开 PowerShell,运行:
- Get-NetTCPConnection -LocalPort 8080 -State Listen | ForEach-Object { $_; Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue | Select-Object ProcessName, Id } —— 一步返回端口、PID 和程序名,不需手动查表
- 若端口未监听,命令无输出;若监听但权限不足(如系统服务),加 -ErrorAction SilentlyContinue 可避免报错中断
批量扫描多个关键端口
适合日常巡检或部署前检查。例如检查开发常用端口:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- $ports = 3000, 8080, 8000, 5000; $ports | ForEach-Object { $c = Get-NetTCPConnection -LocalPort $_ -State Listen -ErrorAction SilentlyContinue; if ($c) { [PSCustomObject]@{Port=$_; Process=(Get-Process -Id $c.OwningProcess -EA 0).ProcessName; PID=$c.OwningProcess} } }
- 结果直接显示哪些端口正被哪个程序占用,支持导出:| Export-Csv .\port-check.csv -NoTypeInformation
区分“真占用”和“系统保留端口”
有时 netstat 和 Get-NetTCPConnection 都查不到占用进程,但端口仍不可用——很可能是 Windows 系统预留(excluded port range):
- 先查保留范围:netsh interface ipv4 show excludedportrange protocol=tcp
- 若目标端口(如 9595)落在某段区间内,说明被 Hyper-V、WSL2 或安全软件预占,不是普通进程在用
- 临时释放(慎用):netsh int ipv4 delete excludedportrange protocol=tcp startport=9595 numberofports=1
自动终止顽固占用进程(谨慎使用)
确认是可关闭的用户进程后,可一键杀掉:
- $pid = (Get-NetTCPConnection -LocalPort 3000 -State Listen).OwningProcess; if ($pid) { taskkill /F /PID $pid }
- 建议先用 Get-Process -Id $pid 确认进程名,避免误杀 svchost 或系统服务










