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

netstat avec le nom du processus ?

Advertisement

En utilisant netstat -a -o -n je peux obtenir la liste des ports et le PID

puis je dois aller dans le gestionnaire de tâches et ajouter le PID et voir qui c'est. (assez frustrant)

Je me demandais s'il y a une commande CMD qui fait tout (en utilisant find , for , powershell)

pour que je puisse obtenir le nom du processus

Advertisement

Réponses (6)

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

Solution

Utilisez le paramètre -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.

Note La commande netstat -b échouera à moins d'être exécutée à partir d'une invite de commande élevée.

Palliatif

Filtrez la liste des processus et trouvez le PID qui vous intéresse :

tasklist | findstr /c:"PID"

Solution de rechange

Vous pouvez utiliser Tcpvcon.exe à la place. Aucun droit d'administration n'est requis.

Tcpvcon l'utilisation est similaire à celle de l'utilitaire intégré 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

Je pense que vous cherchez TCPView de SysInternals.

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

Voici un exemple pour les fenêtres utilisant FOR pour analyser la sortie netstat puis DO tasklist avec le filtre /fi sur pid pour afficher le nom du processus.

La dernière trouvaille consiste à supprimer les en-têtes tasklist.

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

imprime les enregistrements comme

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

Des champs supplémentaires de netstat peuvent être ajoutés en ajoutant des tokens.

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

Si vous aimez utiliser la PS, vous pouvez bifurquer ce code (note : il est super-basique)

$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)"
}

Notez que vous pouvez essayer Path au lieu de ProcessName pour obtenir un chemin d'accès complet à l'exécutable - cela ne fonctionnera pas avec les services système cependant. Vous pouvez également ajouter le ProcessName à la fin de la ligne au lieu de remplacer la valeur du PID.

Appréciez-le ;)

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

Essayez d'utiliser ceci…

Nom du processus avec horodatage :) en oneliner … pas besoin de script rapide et facile …

Vous pouvez modifier le paramètre SYN_SENT par ÉTABLI ou ÉCOUTE

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

Très beau Erik Bitemo ! Je pensais ajouter une variable pour le chemin, puis j'ai réalisé que vous l'avez déjà, bien qu'elle ne soit pas définie. Donc le code que j'ai réutilisé était :

$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*"}
     }

J'essayais de trouver les processus et les services pour une application où j'ai utilisé un chemin d'accès à deux lignes un peu différent.

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
Advertisement
Advertisement