Pokaż ścieżkę do pliku EXE uruchomionych procesów w wierszu polecenia w systemie Windows

26

Jak mogę wyświetlić pełną ścieżkę pliku EXE każdego uruchomionego procesu z wiersza polecenia w systemie Windows?

Próbowałem tasklist i pslist , ale nie pokazują pełnej ścieżki:

tasklist /FI "ImageName eq Spring.Tests.exe" /v /fo List

Daje:

Image Name:   Spring.Tests.exe
PID:          3956
Session Name: Console
Session#:     1
Mem Usage:    9,772 K
Status:       Running
User Name:    W81ENTX64DELPHI\Developer
CPU Time:     0:00:01
Window Title: Spring

i

pslist Spring.Tests -x

daje:

Name                Pid      VM      WS    Priv Priv Pk   Faults   NonP Page
Spring.Tests       3956   83472    9772    5320    5692     5037     11  157
 Tid Pri    Cswtch            State     User Time   Kernel Time   Elapsed Time
1488  10     11018     Wait:UserReq  0:00:00.906   0:00:01.046    0:53:06.977

Ponieważ Spring.Tests.exemogą znajdować się w różnych katalogach, chcę wiedzieć, który został wykonany.

Jeroen Wiert Pluimers
źródło
1
och, to klasyczne pytanie ... oprócz menedżera zadań posiadającego kolumnę. W przypadku wiersza poleceń, WMIC i PowerShell mogą. to jest nawet tutaj lub na
przepełnieniu stosu
@barlop to zabawne: podczas pisania komentarza eksperymentowałem już z programem PowerShell, podobnie jak eksperymentowałem z innym
programem
nie ma potrzeby używania „:(”, metoda jest bardzo
schludna
1
Muszę być autystyczny! Może powinieneś włożyć nos w buźkę, aby było jaśniej ;-)
barlop
1
@kayleeFrye_onDeck Lepiej odniosłem sukces, uruchamiając rozwiązania pod podwyższonym tokenem UAC, ale naprawdę żałuję, że nie ma wersji wiersza polecenia technet.microsoft.com/en-us/sysinternals/processexplorer.aspx, która umożliwia niezawodne zapytania w ramach tego tokena.
Jeroen Wiert Pluimers

Odpowiedzi:

26

Oprócz linii, którą podałeś, oto kilka linii, które (oprócz drugiej) można wykorzystać do wyświetlenia ścieżek:

PS C:\> gwmi win32_process | select Handle, CommandLine | format-list
PS C:\> gwmi win32_process | select name
PS C:\> gwmi win32_process | select CommandLine
C:\>wmic process get ProcessID,ExecutablePath
C:\>wmic process where "name='mysqld.exe'" get ProcessID, ExecutablePath
C:\>wmic process where "name='mysqld.exe'" get ProcessID, ExecutablePath /FORMAT:LIST
barlop
źródło
ma to tę zaletę, że jest szybki (WMIC), ponieważ PowerShell jest tak cholernie powolny !!!
Mr.Robot
Bądź bardzo uważny na zastosowane formatowanie. Na przykład brak uwzględnienia pojedynczych cudzysłowów w namepolu spowoduje, że to się zepsuje.
kayleeFrye_onDeck
@kayleeFrye_onDeck dobrze, biorąc pod uwagę długość polecenia, spodziewałbym się, że ktoś i tak go skopiuje / wklei i po prostu zmieni nazwę procesu. Mamy więc nadzieję, że nie powinni popełnić błędu, pomijając pojedyncze cudzysłowy wokół nazwy procesu, ponieważ mogą pozostawić te, które tam są.
barlop
9

PowerShell na ratunek.

Najpierw użyłem Get-Member, aby zobaczyć, co może zwrócić Get-Process :

PowerShell Get-Process ^| Get-Member

Następnie odfiltrowałem ścieżkę z Get-Process, aby dowiedzieć się, które Spring.Testsprocesy były uruchomione:

PowerShell Get-Process Spring.Tests ^| Format-List Path

w wyniku czego:

Path : C:\Users\Developer\Versioned\Spring4D\Tests\Bin\DelphiXE\Spring.Tests.exe

dokładnie taką informację chciałem.

Jeroen Wiert Pluimers
źródło
1
jest też WMIC, ale PowerShell jest bardziej nowoczesny i elastyczny
Barlop
Czy to Pathto samo, co wiersz poleceń? A co z argumentami pliku wykonywalnego? @barlop WMI nadal ma wiele funkcji, które w innym przypadku byłyby niedostępne w PowerShell.
jpmc26
@ jpmc26 Nie potrzebowałem tych, ale myślę, że można je zdobyć StartInfozamiast na Pathpodstawie stackoverflow.com/questions/1012409/...
Jeroen Wiert Pluimers
@ jpmc26 ścieżki do plików, które wypuszcza polecenie wmic, są takie same jak ścieżki do plików, które wypuszcza polecenie powershell ........ np. otwierają kalkulator systemu Windows i wypróbowują go dla pliku calc.exe pastebin.com/raw/TK8xSPPL
barlop
Co robi marchewka w pierwszym poleceniu?
Jared Beach
6

Włóż PowerShell Get-Processdo Select-Object.

Przykładowe polecenie dla Notepad ++:

Get-Process notepad++ | Select-Object Path

Wydajność:

Path
----
D:\Notepad++\notepad++.exe
Arijit Sur
źródło
Aby uzyskać dane wyjściowe bezpośrednio (Get-Process notepad++).Path(może przechowywać w zmiennej).
nawfal