PowerShell中netstat筛选LISTENING无结果,用*却返回所有结果?
问题根源
你第一个命令失效的核心原因:netstat是Windows原生系统命令,输出的是纯文本,而非PowerShell的结构化对象。当你用Where-Object {$_.State -eq "LISTENING"}时,你在尝试访问每个文本行的State属性——但字符串根本没有这个属性,$_.State会返回$null,$null和"LISTENING"的比较永远不成立,所以没有任何结果输出。
至于你第二个命令能返回所有结果,大概率是条件写法的巧合($null -eq "*"本身判断为假,但可能你实际执行时误写了逻辑,比如用了-like而非-eq),但这不是重点。
正确的过滤方法
要筛选处于LISTENING状态的连接条目,有两种靠谱的实现方式:
- 直接匹配文本内容(简单直接):
netstat -aon | Where-Object { $_ -match "\sLISTENING\s" } - 使用PowerShell原生命令(结构化处理,更灵活):
放弃netstat,改用Get-NetTCPConnection命令,它直接返回结构化的TCP连接对象,支持通过属性精准过滤:Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess
内容的提问来源于stack exchange,提问作者Marstack01
相关产品推荐
相关产品推荐

