当前位置: 首页 > 编程笔记 >

如何使用PowerShell获取进程的端口号?

涂玉韵
2023-03-14
本文向大家介绍如何使用PowerShell获取进程的端口号?,包括了如何使用PowerShell获取进程的端口号?的使用技巧和注意事项,需要的朋友参考一下

在PowerShell中使用Get-Process cmdlet时,它没有属性来获取进程使用的端口号。因此,这里我们将编写一个函数,该函数将为我们提供与进程关联的端口号。

Windows命令NETSTAT有一个,它提供端口号和关联的进程ID,但不提供进程名称。我们有Get-Process命令,其中提供了进程名称和PID(进程ID),因此我们可以编写一个可以将这两个命令关联起来的程序,并可以检索进程ID,本地地址,远程地址以及是否存在状态。像侦听,建立等的端口。

让我们看看NETSTAT命令的样子。

PS C:\WINDOWS\system32> netstat                                                          

Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:9012         DESKTOP-9435KM9:56668  ESTABLISHED
  TCP    127.0.0.1:29885        DESKTOP-9435KM9:56733  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58748  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58755  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58766  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58772  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58780  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58782  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58788  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58797  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58799  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58801  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58810  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58815  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58833  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58835  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58836  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58837  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58838  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58843  ESTABLISHED
  TCP    127.0.0.1:49676        DESKTOP-9435KM9:58845  ESTABLISHED

在上面的命令中,我们需要获取端口号,本地地址和远程地址,因此我们将使用NETSTAT -ano命令。要获取有关此命令的更多信息,请查看下面的链接。

https://www.ionos.com/digitalguide/server/tools/introduction-to-netstat/

该命令的输出将是-

PS C:\WINDOWS\system32> netstat -ano
                                                 
Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1208
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:2869           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       7864
  TCP    0.0.0.0:5700           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:16861          0.0.0.0:0              LISTENING       26860
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       760
  TCP    0.0.0.0:49665          0.0.0.0:0              LISTENING       912
  TCP    0.0.0.0:49666          0.0.0.0:0              LISTENING       1704
  TCP    0.0.0.0:49667          0.0.0.0:0              LISTENING       2976
  TCP    0.0.0.0:49668          0.0.0.0:0              LISTENING       3868
  TCP    0.0.0.0:49669          0.0.0.0:0              LISTENING       3996
  TCP    0.0.0.0:49670          0.0.0.0:0              LISTENING       720
  TCP    127.0.0.1:515          0.0.0.0:0              LISTENING       9276
  TCP    127.0.0.1:1001         0.0.0.0:0              LISTENING       4
  TCP    127.0.0.1:8884         0.0.0.0:0              LISTENING       4
  TCP    127.0.0.1:9012         0.0.0.0:0              LISTENING       15532
  TCP    127.0.0.1:9012         127.0.0.1:56668        ESTABLISHED     15532
  TCP    127.0.0.1:29885        0.0.0.0:0              LISTENING       26860

我们在此表中获得了进程ID(PID),并且可以使用Get-Process命令检索具有PID的进程,并为其编写程序,以将两者关联。

function Get-ProcessPorts{
     [cmdletbinding()]
     Param(
        [parameter(Mandatory=$True, ValueFromPipeLine=$True)]
        [AllowEmptyCollection()]
        [string[]]$ProcessName
     )
     Begin{    
         Write-Verbose "Declaring empty array to store the output"
         $portout = @()            
     }
     Process{
          Write-Verbose "Processes to get the port information"      
          $processes = Get-Process $ProcessName  
          foreach($proc in $processes){
               # Get the port for the process.
               $mports = Netstat -ano | findstr $proc.ID
               # Separate each instance
               foreach($sport in $mports)
                   # Split the netstat output and remove empty lines from the output.
                   $out = $sport.Split('') | where{$_ -ne ""}
                   $LCount = $out[1].LastIndexOf(':')
                   $RCount = $out[2].LastIndexOf(':')
                   $portout += [PSCustomObject]@{              
                     'Process'  = $proc.Name
                     'PID' = $proc.ID
                     'Protocol' = $out[0]
                     'LocalAddress' = $out[1].SubString(0,$LCount)
                     'LocalPort' = $out[1].SubString($Lcount+1,($out[1].Length-$Lcount-1))
                     'RemoteAddress' = $out[2].SubString(0,$RCount)
                     'RemotePort' = $out[2].SubString($RCount+1,($out[2].Length-$Rcount-1))
                     'Connection' = $(
                        # Checking if the connection contains any empty string.
                        if(!($out[3] -match '\d')){$out[3]}      
                     )
                  }
               }  
         }
         $portout | ft -AutoSize
      }
      End{
      Write-Verbose "End of the program"
   }
}

输出-

Process  PID Protocol LocalAddress  LocalPort RemoteAddress  RemotePort Connection
-------  --- -------- ------------  --------- -------------  ---------- ----------
avp     4252 TCP      127.0.0.1     49676     0.0.0.0        0          LISTENING  
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50304      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50338      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50347      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50357      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50366      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50370      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50375      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50376      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50377      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50378      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50379      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50380      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50385      ESTABLISHED
avp     4252 TCP      127.0.0.1     49676     127.0.0.1      50387      ESTABLISHED
WINWORD 25852 TCP      192.168.0.107 53584     99.83.135.170  443        ESTABLISHED
WINWORD 25852 TCP      192.168.0.107 53592     99.83.135.170  443        ESTABLISHED

VERBOSE: End of the program
 类似资料:
  • 问题内容: 我需要获得Jenkins流程运行的PID和端口号。如果我获得该PID,则可以在需要时取消该进程。 我正在通过以下命令运行Jenkins进程: 有时,如果占用了该端口并且发生以下情况,则Jenkins Process无法启动: 而且我知道如何针对特定的Port#运行jenkins进程。 需要知道当前作业正在使用的PID和端口的命令。 问题答案: 该命令将在下面: 它将显示进程ID。

  • 问题内容: 我遇到了一个问题。有时,当我的JUnit测试正在运行时,请命令webDriver.quit();。不会杀死chromedriver进程,因此下一个测试无法开始。在那种情况下,我想添加一些可以在Linux上手动终止进程的方法,但是我不知道如何获取chromedriver的PID,因此可以执行以下操作:Runtime.getRuntime()。exec(KILL + PID); 问题答案:

  • 问题内容: 有谁知道如何使用Java获取当前打开的窗口或本地计算机的进程? 我想做的是:像Windows Taskmanager一样列出当前打开的任务,窗口或打开的进程,但要使用多平台方法-如果可能,仅使用Java。 问题答案: 这是从命令 解析进程列表的另一种方法: 如果你使用的是Windows,则应更改以下行:等(第三行),如下所示: 希望该信息对你有所帮助!

  • 问题内容: 我从shell脚本启动了一个后台进程,我想在脚本结束后终止该进程。 如何从我的shell脚本中获取此过程的PID?据我所知,变量包含当前脚本的PID,而不是后台进程。 问题答案: 您需要在启动时保存后台进程的PID: 您不能使用作业控制,因为它是一种交互式功能,并且与控制终端绑定在一起。脚本完全不必附加终端,因此作业控制不一定可用。

  • 问题内容: 我想使用env文件中定义的端口号,可以吗?以下是我的docker-compose.yml的内容: 这是env_file.env的内容 但是出现了一些错误: 如果有可能,我应该怎么做?谢谢 @lvthillo,感谢您之前的回复。但是我还有另一个问题,就是我的烧瓶应用程序无法访问该端口。代码如下所示 因为flask应用程序需要使用与容器相同的端口运行。有什么办法可以在docker-comp

  • 问题内容: 您经常会看到Node的示例hello world代码,该代码创建Http Server,开始侦听端口,然后执行以下操作: 但理想情况下,您希望这样做: 如何在调用前不将服务器号存储在变量中的情况下检索服务器当前正在侦听的端口? 我之前已经看过这件事,但是在Node文档中找不到。也许这是表达的特定内容? 问题答案: Express 4.x答案: Express 4.x(根据下面的Tien