Steamy PowerShell Get-Process Cmdlet for Running Processes

¿Interesado en usar el cmdlet PowerShell Get-Process para mostrar los procesos en ejecución de un sistema? Con Get-Process puedes encontrar el propietario del proceso, el ID del proceso, o incluso dónde en el disco está ubicado el proceso.

En este artículo, aprenderás cómo usar el cmdlet Get-Process de PowerShell a través de ejemplos del mundo real. Si controlar procesos para doblegarlos a tu voluntad en Windows o Linux suena divertido, ¡entonces sigue leyendo!

Relacionado: Cómo Matar un Proceso en Linux Usando ps, pgrep, pkill ¡y más!

Prerrequisitos

Antes de continuar, aquí están los prerrequisitos necesarios para seguir los ejemplos en este artículo.

  • Aunque PowerShell 5.1 de Windows es suficiente para la mayoría de los ejemplos aquí, PowerShell 7.1 y superior es necesario para el soporte de Linux.

Relacionado: Actualización a PowerShell 7: Un Recorrido

  • Este artículo utiliza Windows 10 y Ubuntu 20.04 LTS, pero cualquier sistema operativo en el que se ejecute PowerShell funcionará.

¿Listo? ¡Sumérgete y gestiona algunos procesos!

Mostrando Procesos en Ejecución

Get-Process administra los procesos locales. En este primer ejemplo, estás utilizando el cmdlet Get-Process de PowerShell. Este comando muestra todos los procesos en ejecución.

Get-Process devuelve una instantánea en un punto en el tiempo de la información de los procesos en ejecución del sistema. Para mostrar información de procesos en tiempo real, Windows ofrece el Administrador de tareas y Linux ofrece el comando top.

Para comenzar, abre tu consola de PowerShell y ejecuta Get-Process. Observa que Get-Process devuelve la información de los procesos en ejecución, como se muestra a continuación. El formato de salida es idéntico para los sistemas operativos Windows y Linux.

Using the Get-Process cmdlet on Windows to display local processes.

Por defecto, los alias de comando gps o ps existen para Get-Process. Como PowerShell 7 es multiplataforma, el comando ps entra en conflicto con un comando Linux integrado. Por lo tanto, ps no funcionará en Linux, solo el alias gps.

El significado de la salida de Get-Process puede no ser inmediatamente obvio. Las propiedades predeterminadas de Get-Process se describen con más detalle a continuación.

  • NPM(K) – La cantidad de memoria no paginada que está utilizando un proceso, se muestra en kilobytes, como se indica con la notación (K).
  • PM(M) – La cantidad de memoria pageable que está utilizando un proceso, mostrada en megabytes, como se indica mediante la notación (M).
  • WS(M) – El tamaño del conjunto de trabajo del proceso, mostrado en megabytes. El conjunto de trabajo consiste en las páginas de memoria que fueron referenciadas recientemente por el proceso.
  • VM(M) – La cantidad de memoria virtual que está utilizando el proceso, mostrada en megabytes. Incluye el almacenamiento en los archivos de paginación en disco.
  • CPU(S) – La cantidad de tiempo del procesador que el proceso ha utilizado en todos los procesos, mostrada en segundos.
  • Id – El ID de proceso (PID) del proceso.
  • SI – Identificador de sesión del proceso en ejecución. La sesión 0 indica que el proceso está disponible para todos los usuarios, 1 indica que el proceso existe bajo el primer usuario conectado, y así sucesivamente.
  • ProcessName – El nombre del proceso en ejecución.

Para mostrar una lista de alias de propiedad mapeados a nombres completos de propiedad, use el comando Get-Process | Get-Member -MemberType 'AliasProperty'.

A continuación, hay otro gran ejemplo. Para cada instancia del proceso brave que encuentra, utiliza el ID de ese proceso ($_.id) y lo pasa a Get-NetTCPConnection. PowerShell luego utiliza Get-NetTCPConnection para encontrar información sobre cada conexión de red que el proceso brave tiene abierta.

Ejecuta el siguiente código en tu sesión de PowerShell cuando el navegador Brave esté en ejecución.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

¡Gracias a Jay Adams en SystemFrontier!

¡Felicidades, ahora puedes ver todos los procesos en ejecución tanto en Windows como en Linux usando Get-Process!

Búsqueda de Atributos Específicos del Proceso

Get-Process devuelve muchas propiedades diferentes de los procesos en ejecución, como has visto antes. Al igual que con todos los demás objetos de PowerShell, puedes seleccionar propiedades de los objetos de manera selectiva.

Veamos ahora un ejemplo simple de cómo puedes recuperar propiedades específicas para un proceso en particular:

  1. Abre tu calculadora de Windows.

2. Con una consola de PowerShell abierta, ejecuta Get-Process utilizando el parámetro Name para mostrar solo los procesos en ejecución con Calculator como nombre. Verás la misma salida que has visto anteriormente.

Get-Process -Name 'Calculator'

Get-Process devuelve muchas propiedades como se esperaba. Tal vez solo quieras encontrar la utilización de la CPU con el valor bajo la columna CPU(s). Rodea el comando Get-Process con paréntesis y haz referencia a la propiedad CPU como se muestra a continuación. Verás que solo devuelve el valor de la propiedad CPU.

(Get-Process -Name 'Calculator').CPU

Observa que Get-Process devuelve un nombre llamado CPU(s) y el fragmento de código anterior utiliza solo el nombre CPU. A veces PowerShell no muestra el nombre real de la propiedad en la salida. Este concepto se realiza con un archivo de formato PS1XML.

El tiempo de CPU se expresa como un total de segundos en todos los núcleos. Para obtener un número más legible para los humanos, redondea al décimo más cercano usando un método Math como se muestra a continuación.

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

Puedes usar el enfoque anterior para encontrar cualquier otra propiedad también, como Id si deseas ver solo el ID de un proceso.

Deja la aplicación Calculadora ejecutándose. Utilizarás esta aplicación para el resto de los ejemplos.

Recuperación del Uso de Memoria del Proceso

Diagnosticar sistemas con ejecución lenta puede ser un desafío, con la memoria limitada a menudo siendo una causa. Continuando con la aplicación Calculadora, recupera el proceso Calculadora y muestra solo la propiedad VM. Como se ve a continuación, la memoria utilizada se muestra en megabytes (MB).

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

Para ayudar a entender el uso de la memoria, utiliza los factores de conversión integrados de PowerShell para cambiar megabytes (MB) a gigabytes (GB). En el siguiente ejemplo, convertirás la memoria utilizada a GB y luego usarás el biblioteca matemática .NET método Round para redondear el valor, como se ve en la captura de pantalla a continuación.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# Usa el método Round del tipo Math de .NET
[Math]::Round($ProcessMemoryGB / 1GB)

Utilizar las utilidades integradas de PowerShell para convertir los valores hace que sea más fácil entender la salida. Sigue leyendo para aprender cómo localizar el ID de un proceso.

Converting the calculator process memory usage to a rounded GB format.

Exponiendo Propiedades Poco Conocidas

No todas las propiedades están incluidas o se muestran de forma predeterminada con Get-Process. Sigue leyendo a continuación para obtener más información sobre las propiedades Path y UserName y cómo usarlas!

Descubriendo Dónde Vive un Binario de Proceso

Hay muchos lugares en un sistema donde se puede almacenar un ejecutable de proceso. Si un proceso está en ejecución actualmente, Get-Process facilita encontrar la ruta del sistema de archivos del proceso, a pesar de que Path no se muestra de forma predeterminada. Como se muestra a continuación, la propiedad Path contiene la ubicación del sistema de archivos del ejecutable del proceso.

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

Así como en Windows, Get-Process en Linux también devuelve la ruta del sistema de archivos. En el ejemplo a continuación, el proceso gnome-calculator se está ejecutando con la ruta mostrada en la salida de la consola.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

Los actores malintencionados astutos pueden nombrar a un proceso de la misma manera o similar a uno de confianza. Por lo tanto, la capacidad de localizar la ruta del sistema de archivos ayuda en un escenario de respuesta a incidentes de seguridad (IR). Siga leyendo para descubrir cómo localizar al propietario del proceso, ya que UserName no está incluido en la salida predeterminada.

Encontrar al Propietario del Proceso

Para incluir el valor UserName en la salida, deberá utilizar el parámetro IncludeUserName. Es importante conocer al propietario del proceso, especialmente para evitar terminar inadvertidamente el proceso de otro usuario. Como se muestra a continuación, la propiedad UserName ahora está incluida en la salida del proceso.

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

¡Finalmente, siga leyendo para aprender a usar Get-Process en una computadora remota para recuperar información del proceso!

Encontrar Procesos en Computadoras Remotas

Aunque en Windows PowerShell, Get-Process no tiene capacidades remotas por sí solo, siempre puede aprovechar PowerShell Remoting y el Invoke-Command para ejecutarlo en computadoras remotas.

Relacionado: Cómo configurar PSRemoting con Windows y Linux

Pero, si estás en Linux o estás ejecutando PowerShell 6 en Windows, ahora tienes un parámetro ComputerName que puedes usar para consultar procesos en computadoras remotas.

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

El parámetro -ComputerName fue eliminado en PowerShell 7.x ya que el cmdlet no está directamente relacionado con la conexión remota. Para lograr lo mismo, puedes envolverlo en un Invoke-Command, así: Invoke-Command -ComputerName "NombreComputadora" -ScriptBlock { Get-Process -ProcessName 'proceso' }

Cuando se ejecuta el comando anterior contra una computadora remota, se muestra el mismo resultado que si el comando Get-Process se ejecutara localmente.

A continuación se muestra un ejemplo de conexión remota a otra computadora y obtención de procesos en ejecución:

Computer and Getting Running Processes

Puedes apuntar a varias computadoras separándolas con una coma, por ejemplo: Get-Process -ComputerName SRV1,SRV2.

Próximos pasos

En este artículo, has aprendido cómo usar el cmdlet PowerShell Get-Process para encontrar procesos en ejecución con PowerShell en computadoras locales y remotas tanto en Linux como en Windows.

Ahora, ¿qué harás con este conocimiento? ¡Intenta pasar un proceso recuperado por Get-Process a Stop-Process en una computadora local o remota para terminarlo!

Source:
https://adamtheautomator.com/powershell-get-process/