2014-01-26 16:07:42 +0000 2014-01-26 16:07:42 +0000
46
46

netstat com nome de processo?

Usando netstat -a -o -n posso obter a lista de portos e PID

depois preciso de ir ao gestor de tarefas e adicionar o PID e ver quem é. (bastante frustrante)

perguntei-me se existe um comando CMD que faça tudo (usando find , for , powershell)

para que eu possa obter o nome do processo

Respostas (6)

56
56
56
2014-01-26 18:06:00 +0000

Solução

Use o parâmetro -b:

-b Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

Nota O comando netstat -b falhará, a menos que seja executado a partir de um prompt de comando elevado.

Resultante

Filtrar a lista de processos e encontrar o PID em que está interessado:

tasklist | findstr /c:"PID"

Solução alternativa

Pode usar Tcpvcon.exe em vez disso. Não são necessários direitos de administração.

Tcpvcon utilização é semelhante à do utilitário integrado do Windows netstat.

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.
8
8
8
2014-01-26 16:12:23 +0000

Penso que está à procura de TCPView da SysInternals.

2
2
2
2016-05-13 02:17:35 +0000

Aqui está um exemplo para janelas que usam FOR para analisar netstat e depois DO com tasklist filtro no pid para mostrar o nome do processo.

O último achado é para remover /fi cabeçalhos.

FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"

imprime registos como

tomcat8.exe.x64 4240 Services 0 931,864 K

Campos adicionais de tasklist podem ser adicionados adicionando fichas.

2
2
2
2016-03-07 22:14:01 +0000

Se gostar de usar PS, pode bifurcar este código (nota: é super-básico)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

Note que pode tentar Path em vez de ProcessName para obter um caminho executável completo - no entanto não funcionará com serviços de sistema. Também pode querer anexar o ProcessName ao fim da linha em vez de substituir o valor do PID.

Desfrute-o ;)

1
1
1
2018-02-11 10:10:26 +0000

Tente usar isto…

Nome do processo com carimbo de tempo :) em oneliner… não precisa de scripting rápido e fácil …

Pode alterar o param SYN_SENT por ESTABELECIDO ou OUVIDO

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp
0
0
0
2017-10-07 12:37:30 +0000

Muito bom Erik Bitemo! Estava a pensar em adicionar uma variável para o caminho, então percebi que já o tinha, embora não estivesse definido. Então o código que reutilizei foi:

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

Estava a tentar encontrar os processos e serviços para uma aplicação onde utilizei um 2 liner um pouco diferente.

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto