¿Cómo obtener el comando que invocó una tarea con lista de tareas?

¿Cómo obtener el comando que invocó una tarea con lista de tareas?

El administrador de tareas de Windows tiene una columna denominadaLínea de comandoque muestra el comando que inició la tarea dada, con todos los modificadores y parámetros, por ejemplo:

test.exe -V -A 127.0.0.1 -P 6062

Ahora tengo que identificar una determinada tarea que está escuchando en un determinado puerto y/o que fue llamada con una determinada combinación de conmutadores. Mi objetivo es cerrar la tarea seleccionada, pero no otras, por lo que si hay varias test.exetareas en ejecución, no puedo simplemente cerrar todas las tareas devueltas por:

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

Lamentablemente parece que ni tasklistni pslist(aquí) es capaz de devolver elLínea de comandocampo. ¿Cómo puedo superar este problema?

Respuesta1

Que tal este:

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

Y si haces esto también obtendrás el ProcessId para matar:

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

wmicTambién tiene un interruptor para enviar a csv. Entonces:

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

Nota: Si recibe un error con el último ( Invalid XSL format (or) file name), debe copiar csv.xmlde %WINDIR%\System32\wbem\en-USa %WINDIR%\System32\wbem. Puedes leer sobre este error.aquí.


También puedes usar PowerShell:

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

Respuesta2

Powershell 7:

get-process test | % commandline

Respuesta3

En Windows 11, al menos, la respuesta principal anterior no funcionó, ya que no hay una columna de "título" en wmic processel resultado, por lo que no se encontró ningún resultado. (Y sí, me doy cuenta de que wmic está obsoleto en Windows 11. Todavía funciona).

En cambio, existen otras columnas que podría usar para esa cláusula WHERE y están disponibles con wmic process list /?. Entre ellos se encuentran, por supuesto name, (para el nombre del proceso), y el processid(para el pid) mencionado anteriormente, por lo que esto funcionó para mí:

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

Una cosa más:Descubrí que tenía que ejecutar un símbolo del sistema elevado (como administrador) para ver la línea de comando. De lo contrario, la salida mostró la línea de comando vacía:

CommandLine  ProcessId
             10496

información relacionada