Làm thế nào để có được lệnh đã gọi một tác vụ với danh sách tác vụ?


18

Trình quản lý tác vụ Windows có một cột có nhãn Dòng lệnh hiển thị lệnh đã bắt đầu tác vụ đã cho, với tất cả các công tắc và tham số, ví dụ:

test.exe -V -A 127.0.0.1 -P 6062

Bây giờ tôi phải xác định một tác vụ nhất định đang lắng nghe trên một cổng nhất định và / hoặc được gọi với một tổ hợp chuyển đổi nhất định. Mục đích của tôi là đóng các tác vụ đã chọn, nhưng không phải các tác vụ khác, vì vậy nếu có nhiều test.exetác vụ đang chạy, tôi không thể đơn giản đóng tất cả các tác vụ được trả về bởi:

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

Đáng tiếc là nó có vẻ như không phải tasklistvà cũng không pslist( ở đây ) có thể trả lại Command Line lĩnh vực. Làm thế nào tôi có thể khắc phục vấn đề này?


Có lẽ bạn có thể làm một cái gì đó với netstat -aon | grep \.0:6062cổng 6062 và cột cuối cùng sẽ là PID của chương trình của bạn. Không chắc chắn nếu điều đó đủ cho bạn. tasklist /FI "PID eq <PID>"sẽ cung cấp cho thực thi của bạn một lần nữa.
Rik

@Rik Đáng buồn thay, điều đó là không đủ, vì bản thân cổng không đủ để xác định tác vụ chính xác, do đó cũng cần phải xem các đối số dòng lệnh.
István Zachar

Không thể tưởng tượng nhiều chương trình nghe trên cùng một cổng ... :) Nhưng phải có được các tham số ... process explorertừ Sysiternals có thể hiển thị các chương trình này trong gui. Vì vậy, thông tin phải ở đâu đó.
Rik

Bạn có sử dụng cho một lệnh powershell? Giống như <<< Get-WmiObject win32_ process -Filter "tên như '% test.exe'" | chọn CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> Xem tại đây
Rik

@Rik, cổng tất nhiên là khác nhau, nhưng tôi cũng phải trích xuất các đối số dòng lệnh để kiểm tra xem tác vụ có phải là nhiệm vụ tôi cần phải giết hay không.
István Zachar

Câu trả lời:


35

Làm thế nào về điều này:

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

Và nếu bạn làm điều này, bạn cũng nhận được ProcessId để giết:

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

wmiccũng có một chuyển đổi để đầu ra để csv. Vì thế:

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

Lưu ý: Nếu bạn gặp lỗi với cái cuối cùng ( Invalid XSL format (or) file name) bạn cần sao chép csv.xmltừ %WINDIR%\System32\wbem\en-USsang %WINDIR%\System32\wbem. Bạn có thể đọc về lỗi này ở đây .


Bạn cũng có thể sử dụng PowerShell:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`

Cảm ơn, đó là nó, wmicgiải quyết vấn đề, và điều này kết thúc ngày. :)
István Zachar

1
Hoàn hảo - điều này thực sự cung cấp cho dòng lệnh đầy đủ. Trong trình quản lý tác vụ, nó chỉ hiển thị 300 ký tự đầu tiên hoặc lâu hơn.
ArtOfWarfare
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.