Cómo matar un proceso de Windows en un sistema remoto

Quizás estás trabajando felizmente en un servidor remoto con Windows, luego descubres un proceso que se descontrola, consumiendo valiosos ciclos de CPU. ¿Qué haces? ¡Mátalo!

En este tutorial, aprenderás cómo finalizar un proceso en Windows utilizando utilidades nativas, utilidades de terceros y PowerShell. Primero aprenderás cómo examinar los procesos en ejecución en Windows y luego cómo finalizar esos procesos.

Prerrequisitos

Si deseas seguir los pasos de este tutorial, asegúrate de tener lo siguiente de antemano:

  • A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
  • A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
  • La Suite Sysinternals de Microsoft.
  • Windows PowerShell 5 o superior. Este tutorial utiliza PowerShell v7.1.3

Consulta de Procesos Remotos de Windows con Tasklist

Desde Windows XP, existe una herramienta útil llamada tasklist. Tasklist es una herramienta práctica que consulta los procesos en computadoras remotas. Antes de poder finalizar un proceso, ¡primero debes descubrirlos!

Abre una sesión de PowerShell o símbolo del sistema en tu escritorio y escribe el siguiente comando para mostrar todos los procesos en ejecución en tu computadora remota.

El comando a continuación consulta una computadora remota (/S) autenticando la conexión con el nombre de usuario de administrador (/U) y la contraseña (/P).

tasklist /S WIN-BANGJIEFNOC.local.net /U administrator /P password

Notarás a continuación que el Nombre de la Sesión no aparece. Dado que estás ejecutando tasklist en un equipo remoto, tasklist no proporciona el Nombre de la Sesión.

list of processes on a remote server

Tal vez prefieras listar solo un proceso. No hay problema. Para hacerlo, especifica el parámetro /FI. El parámetro /FI acepta una consulta que se pasa a tasklist para filtrar procesos específicos.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
The output of tasklist showing a specific process

Consulta de Procesos Remotos de Windows con PSList

Otra herramienta para ver procesos en ejecución es PSList, y esta utilidad es parte de la Suite Sysinternals. ¡Esta suite de herramientas ha estado disponible durante muchos años y fue creada por Mark Russinovich, CTO de Azure!

Comencemos con cómo puedes ver procesos en ejecución en un equipo remoto.

1. Abre una sesión de PowerShell o un símbolo del sistema en tu escritorio y cambia el directorio a donde extrajiste la Suite Sysinternals.

2. En tu sesión de PowerShell, ejecuta el siguiente comando para mostrar los procesos en ejecución en el equipo remoto y el uso de la CPU asociado en tiempo real.

El comando a continuación ejecuta pslist para consultar todos los procesos remotos de Windows en la computadora WIN-BANGJIEFNOC autenticando el nombre de usuario Administrador (-u) y la contraseña (-p).

El comando utiliza el interruptor -s para convertir pslist en el “modo administrador de tareas” que actualiza la lista repetidamente.

Si es la primera vez que utiliza una herramienta de Sysinternals, puede aparecer un banner que le pide que acepte el EULA; haga clic en OK.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -s

Ahora ve el siguiente resultado de ejecutar ese comando; para este artículo, le interesan 3 de estos valores. Como se muestra a continuación.

  • Nombre: El nombre del proceso.
  • Pid: Identificador de proceso, un valor crítico utilizado en este tutorial, el número de PID se puede utilizar para finalizar un proceso remoto. Es el identificador numérico asignado a un proceso.
  • CPU: Esto muestra en tiempo casi real la utilización de la CPU disponible en general.

Los demás valores están relacionados con la memoria y están fuera del alcance de este artículo.

Output in real-time of pslist

3. Dado que el paso dos utilizó el interruptor -s, presione Ctrl-C para salir de pslist y volver a la consola.

Reduzca la lista de procesos devueltos utilizando el interruptor -e seguido del nombre del proceso, por ejemplo, -e Winlogon.

Matando Procesos Por Nombre de Proceso con PSKill

Una vez que sepas cómo encontrar procesos remotos, ahora veamos cómo matarlos. Para empezar, cubramos la utilidad pskill . Primero, aprende cómo matar procesos por nombre de proceso.

1. Asegúrate de tener un proceso que puedas matar en tu servidor remoto. Este tutorial usará el proceso notepad.

2. Abre una sesión de PowerShell o símbolo del sistema en tu escritorio local y cambia el directorio a donde hayas extraído la Suite Sysinternals y ejecuta el siguiente comando. Puedes ver que la sintaxis para pskill es similar a la de pslist.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p 'password' -e notepad.exe
Output of pskill

3. Ahora, ejecuta pslist, como se explicó en la sección anterior, para confirmar que el proceso está realmente detenido.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -e notepad.exe
Output of pslist

Matando Procesos Por ID de Proceso con PSKill

Matar el proceso por nombre puede ser suficiente para tus necesidades si solo se está ejecutando una instancia de ese proceso o si deseas matar todos los procesos con ese nombre. ¿Qué pasa si quieres matar una instancia particular de un proceso en ejecución? Los siguientes pasos lo demostrarán.

1. En tu servidor remoto, abre Notepad dos veces; matarás uno de estos procesos en esta demostración; por supuesto, puedes sustituir otros procesos.

2. Ejecuta el siguiente comando tomando nota de uno de los Pid como se muestra a continuación; necesitarás eso para el siguiente paso.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p password -e notepad
Using pslist to list PID’s of Notepad

3. Usando el PID, ejecuta ahora pskill, proporcionando el PID como último argumento.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p password 1984
The output of pskill for a particular PID

4. Finalmente, verifica que todavía tienes una instancia de Notepad en ejecución volviendo a ejecutar pslist. Ahora solo deberías ver una única instancia de Notepad en ejecución.

Output of pslist

Matando Procesos Remotos de Windows con TaskKill por Nombre

La utilidad taskkill es nativa de Windows e incluye más opciones de línea de comandos para reiniciar procesos por nombre de usuario y nombre de aplicación. ¡Comencemos y matemos Notepad nuevamente!

Matar Proceso por Nombre

1. En tu servidor remoto, abre Notepad; Notepad es el proceso que matarás en esta demostración; por supuesto, puedes sustituirlo por otro proceso.

2. Abre una sesión de PowerShell o un símbolo del sistema en tu escritorio. Escribir el siguiente comando matará notepad.exe

taskkill /S WIN-BANGJIEFNOC.local.net /you administrator /p password /IM notepad.exe

La salida se muestra a continuación:

/IM es el parámetro para Imagen; en este caso, es notepad.exe

The output of taskkill command

3. Para confirmar que el proceso se detuvo, ejecuta tasklist. Ahora no deberías ver tareas que coincidan con ese filtro.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
Output of tasklist using imagename

Matando Procesos Remotos de Windows con TaskKill por PID

Matar un proceso con taskkill usando un PID no es muy diferente que usar el nombre del proceso. Pero, como no puedes usar el nombre, primero necesitarás encontrar el PID y luego pasarlo a taskkill.

Suponiendo que tienes Notepad en ejecución en tu host remoto de Windows:

1. Ejecute tasklist como se muestra a continuación para encontrar el PID del proceso Notepad. Tome nota de uno de los PID como se muestra a continuación; necesitará eso para el próximo paso.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
the output of tasklist to view PIDS

2. Ahora, ejecute taskkill proporcionando el PID como el último argumento.

taskkill /S WIN-BANGJIEFNOC.local.net /u administrator /p 'password' /PID 3776
The output of taskkill specifying a particular PID

3. Finalmente, ejecute tasklist para confirmar que el proceso se ha detenido.

Output of tasklist

Matar un proceso remoto de Windows con PowerShell

PowerShell le ofrece un par de opciones para matar procesos remotos; el primer cmdlet Stop-Process no puede matar nativamente un proceso remoto, ya que no tiene una opción para especificar un nombre de equipo. Sin embargo, puede resolver este problema ejecutando Stop-Process de forma remota a través de Remoting de PowerShell.

1. Si su host y servidor remoto no están en un dominio de Active Directory, primero proporcione un nombre de usuario y contraseña, creando un objeto PSCredential.

$credentials = Get-Credential
Setting up credentials

2. A continuación, como el tutorial utilizará SSL para conectarse al ordenador remoto y utilizará un certificado autofirmado, crea un PSSessionOption que omitirá la verificación del certificado para una autoridad de certificación confiable.

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. Ahora, conéctate al servidor con el comando Enter-PSSession, que establece una sesión interactiva en el servidor remoto.

El siguiente comando se está conectando al ordenador WIN-BANGJIEFNOC.local.net utilizando el nombre de usuario y la contraseña proporcionados anteriormente (Credential), omitiendo la verificación de la autoridad de certificación (SessionOption), y conectándose a través de SSL (UseSSL).

Enter-PSSession -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -SessionOption $PSSessionOption -UseSSL
Using Enter-PsSession for an interactive session

4. Una vez que estés conectado al host remoto, verifica el proceso que deseas detener ejecutando Get-Process. En este caso, verás el proceso notepad.

Get-Process -ProcessName Notepad
Output of Get-Process

5. Para detener este proceso, ejecuta Stop-Process, como se muestra a continuación.

Stop-Process -ProcessName Notepad

6. Por último, confirma que has detenido el proceso volviendo a ejecutar Get-Process, y deberías recibir un mensaje de error.

Checking for Notepad as a running process

Si deseas detener un proceso de Windows remoto de forma no interactiva, utiliza el comando Invoke-Command con los siguientes parámetros: Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL. Al encapsular el comando Stop-Proces en el parámetro ScriptBlock, se envía el comando al host remoto.

Conclusión

Has aprendido sobre diferentes métodos para finalizar procesos remotos y cómo superar situaciones en las que las reglas del firewall de red pueden impedir que las utilidades funcionen correctamente; este tutorial también podría haberte ayudado a solucionar problemas en Windows.

Las utilidades sobre las que has aprendido son herramientas potentes; ¡úsala con precaución!

Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/