
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.exe
tareas 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 tasklist
ni 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
wmic
Tambié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.xml
de %WINDIR%\System32\wbem\en-US
a %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 process
el 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