Jak uzyskać polecenie wywołujące zadanie z listą zadań?

18

Menedżer zadań systemu Windows ma kolumnę z etykietą Wiersz polecenia, która pokazuje polecenie, które uruchomiło dane zadanie, wraz ze wszystkimi przełącznikami i parametrami, na przykład:

test.exe -V -A 127.0.0.1 -P 6062

Teraz muszę zidentyfikować pewne zadanie, które nasłuchuje na określonym porcie i / lub zostało wywołane za pomocą określonej kombinacji przełączników. Moim celem jest zamknięcie wybranego zadania, ale nie innych, więc jeśli test.exeuruchomionych jest wiele zadań, nie mogę po prostu zamknąć wszystkich zadań zwróconych przez:

tasklist /fo csv /nh /fi "imagename eq test.exe"

Niestety wydaje się, że ani tasklistani pslist( tutaj ) nie jest w stanie zwrócić pola wiersza poleceń . Jak mogę rozwiązać ten problem?

István Zachar
źródło
Może możesz coś zrobić netstat -aon | grep \.0:6062dla portu 6062, a ostatnią kolumną będzie PID twojego programu. Nie jestem pewien, czy to ci wystarczy. tasklist /FI "PID eq <PID>"ponownie dałby plik wykonywalny.
Rik
@Rik Niestety, to nie wystarczy, ponieważ sam port nie jest wystarczający do zidentyfikowania prawidłowego zadania, dlatego konieczne jest również wyświetlenie argumentów wiersza poleceń.
István Zachar
Nie mogę sobie wyobrazić, że wiele programów nasłuchuje na tym samym porcie ... :) Ale musi być możliwe uzyskanie parametrów ... process explorerz Sysinternals może pokazać je w GUI. Więc informacja musi gdzieś być.
Rik
Czy używasz polecenia PowerShell? Jak <<< Get-WmiObject win32_process -Filter "nazwa jak '% test.exe'" | wybierz CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> Zobacz tutaj
Rik
@Rik, port jest oczywiście inny, ale muszę wyodrębnić argumenty wiersza poleceń, aby sprawdzić, czy muszę wykonać zadanie.
István Zachar

Odpowiedzi:

35

Co powiesz na ten:

wmic process where caption="test.exe" get commandline

A jeśli to zrobisz, otrzymasz ProcessId do zabicia:

wmic process where caption="test.exe" get commandline,processid

wmicma także przełącznik do wyjścia do csv. Więc:

wmic /output:c:\temp\proc.csv process where caption="test.exe" get commandline,processid /format:csv

Uwaga: Jeśli pojawi się błąd z ostatnim ( Invalid XSL format (or) file name), musisz skopiować csv.xmlz %WINDIR%\System32\wbem\en-USdo %WINDIR%\System32\wbem. O tym błędzie możesz przeczytać tutaj .


Możesz także użyć programu PowerShell:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`
Rik
źródło
Dzięki, to wszystko, wmicrozwiązuje problem, a to kończy dzień. :)
István Zachar
1
Idealnie - daje to pełną linię poleceń. W menedżerze zadań pokazuje tylko pierwsze 300 znaków.
ArtOfWarfare