从`netstat`中捕获`PID`字段

时间:2014-08-16 18:44:47

标签: parsing powershell-v2.0

进行网络开发时,我有一个定期挂起的过程。

我想用PowerShell脚本杀死它。

据我所知,netstat命令似乎返回一个字符串而不是一个友好的对象,具有易于访问的属性。在我的阅读中,我还没有找到一个电源外壳友好的替代品,虽然我对一个人开放。

function killport($port) {
    // How do I capture the $PID from here?
    netstat -ao | findstr $port
    write-host Taskkill /PID $pid 
    sleep 5
    write-host Taskkill /PID $pid /f
}

示例运行:

netstat -ao | findstr 51135
  TCP    127.0.0.1:51135        r151:51135             ESTABLISHED     7968

1 个答案:

答案 0 :(得分:2)

假设您只获得一个结果(看起来很可能),您可以使用一个简单的正则表达式来捕获该行的最后一组数字。

$netstat = "TCP    127.0.0.1:51135        r151:51135             ESTABLISHED     7968";
$PortNumRegex = [regex]"(\d+)$";
$portnum = $PortNumRegex.Match($netstat);
$portnum.captures[0].Value;

在您的情况下,将$netstat行替换为netstat -ao | findstr 51135;您也可以通过运行findstr 51135netstat -ao或其他正则表达式匹配的输出来消除select-string,但对于这样的简单情况,上述情况应该可以正常工作。