【问题标题】:How can i show only local address and PID in powershell?如何在 powershell 中仅显示本地地址和 PID?
【发布时间】:2022-01-08 10:06:16
【问题描述】:
 (netstat -ano) -replace '0\.0\.0\.0:(\d+)','$1        '

我想要的是使用上面的代码只显示本地地址和 pid

  Proto  Local Address          Foreign Address        State           PID
  TCP    135                    0                      LISTENING       1172
  TCP    445                    0                      LISTENING       4
  TCP    5040                   0                      LISTENING       7300
  TCP    5357                   0                      LISTENING       4
  TCP    7680                   0                      LISTENING       14100
  TCP    49664                  0                      LISTENING       988
  TCP    49665                  0                      LISTENING       896
  TCP    49666                  0                      LISTENING       1724
  TCP    49667                  0                      LISTENING       1472
  TCP    49668                  0                      LISTENING       3520
  TCP    49728                  0                      LISTENING       968

但我想要什么

Local Address             PID
135                       1172
445                       4
5040                      7300
.                         .
.                         .
.                         .

【问题讨论】:

  • 为什么不使用Get-NetTCPConnection
  • 因为我不知道,我怎么知道127 192和udp
  • 我给你留下了关于你上一个问题的评论

标签: powershell netstat


【解决方案1】:

要通过 Powershell 中的列标题获取您请求的输出,您可以使用:

Get-NetTCPConnection | 
  Select-Object LocalAddress, OwningProcess | 
  Sort-Object LocalAddress, OwningProcess

您的示例数据似乎显示的是端口而不是地址,所以:

Get-NetTCPConnection | 
  Select-Object LocalPort, OwningProcess | 
  Sort-Object LocalPort, OwningProcess

如果您还需要 UDP 连接,请将Get-NetUDPEndpoint 替换为上面的Get-NetTCPConnection

最后,如果你想一起做:

(Get-NetUDPEndpoint |
    Select-Object @{L="Proto"; E={"TCP"}}, LocalAddress, LocalPort, OwningProcess
) + (Get-NetTCPConnection |
    Select-Object @{L="Proto"; E={"UDP"}}, LocalAddress, LocalPort, OwningProcess
) |
    Sort-Object Proto, LocalPort, LocalAddress

【讨论】:

    【解决方案2】:

    您已经获得了所需的信息,现在只需使用讨厌的正则表达式循环删除多余的属性?可能需要一些间距调整

     (netstat -ano) `
      -replace '0\.0\.0\.0:(\d+)','$1        '|
      foreach{
        Write-host `
         -nonewline "$([regex]::split("$_",'\s\s+')[2,5])`r`n"
      }
    

    为了便于阅读,我使用了严重口音(poweshell 转义键)来转义换行符| 将通过管道传递到下一行的任何内容

    【讨论】:

    • 不错的正则表达式解决方案。
    【解决方案3】:

    这会做你想要的吗?我假设“本地地址”是指端口号,而“PID”是指拥有的进程ID。如果可以避免的话,我不想重命名它们。

    Get-NetTCPConnection |
        Where-Object { $_.LocalAddress -notmatch '^(127\..*|192\..*|0\..*|::$)' } |
        Select-Object -Property @{n='LocalAddress';e={$_.LocalPort}},@{n='PID';e={$_.OwningProcess}} |
        Sort-Object -Property LocalAddress
    

    【讨论】:

    • 你的意思可能是-match
    • 我认为 OP 想从输出中删除这些地址。如果不是,那么是的,应该是-match 而不是-notmatch
    • 他只是不想看到(但不过滤)本地 IP 地址,并查看哪些端口正在侦听他的主机。
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 2017-11-05
    • 1970-01-01
    • 2021-08-25
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多