HOWTO · PowerShell

Cómo obtener una lista de procesos en ejecución en PowerShell

Usa Get-Process de PowerShell para enumerar los procesos locales, filtrar por nombre, inspeccionar las propiedades de los procesos y solicitar la cuenta asociada en Windows.

En esta página

Usa Get-Process para enumerar los procesos que se ejecutan en el equipo local, reducir los resultados por nombre de proceso e inspeccionar valores como Id y CPU. Los ejemplos siguientes son comandos de PowerShell y no se han ejecutado en la evidencia de entorno de ejecución proporcionada. Los nombres de los procesos y los valores mostrados dependen de lo que se esté ejecutando en tu equipo y del entorno de PowerShell.

Enumerar todos los procesos en ejecución con Get-Process

Ejecuta Get-Process sin argumentos para obtener objetos de proceso de los procesos locales. PowerShell da formato a esos objetos para mostrarlos, normalmente como una tabla. La vista predeterminada puede incluir campos como Id (el identificador del proceso), ProcessName, CPU (tiempo acumulado de procesador en segundos) y valores relacionados con la memoria. Las columnas mostradas son una vista, no una lista completa ni fija de todas las propiedades de los procesos; las columnas y los valores pueden variar según el entorno. gps es un alias opcional de Get-Process.

Este ejemplo selecciona un pequeño conjunto de campos útiles de los diez primeros objetos de proceso devueltos:

Get-Process | Select-Object -First 10 Id, ProcessName, CPU, WorkingSet64

Buscar procesos por nombre

Pasa un nombre de proceso a -Name para filtrar los resultados. Sustituye el nombre seleccionado por uno que se esté ejecutando en tu equipo. Puedes pasar una matriz de nombres para obtener coincidencias de varios procesos, o usar caracteres comodín como * para coincidir con un patrón de nombre. El ejemplo obtiene los nombres de procesos del equipo actual, de modo que no depende de que esté instalada una aplicación concreta:

$names = @(Get-Process | Select-Object -First 2 -ExpandProperty ProcessName | Sort-Object -Unique)
if ($names.Count -gt 0) {
    Get-Process -Name $names
    $prefix = $names[0].Substring(0, [Math]::Min(2, $names[0].Length))
    Get-Process -Name "$prefix*"
}

Get-Process -Name puede devolver más de un proceso cuando varias instancias coinciden con un nombre. Los comodines son útiles cuando solo conoces parte del nombre de un proceso. Si tu propia consulta no devuelve coincidencias, comprueba la ortografía y si ese proceso se está ejecutando en este momento.

Leer las propiedades de los procesos

Get-Process devuelve objetos, por lo que puedes leer una propiedad directamente en lugar de depender de la tabla con formato. Id es el identificador del proceso. CPU informa del tiempo acumulado de procesador en segundos cuando ese valor está disponible; no es una medición de porcentaje en vivo. Un nombre puede coincidir con varios objetos de proceso, por lo que el acceso a la propiedad puede producir varios valores. Este ejemplo lee ambas propiedades de un proceso encontrado en el equipo local:

$process = Get-Process | Select-Object -First 1
if ($process) {
    $process.Id
    $process.CPU
}

Usa Select-Object Id, CPU después de un filtro por nombre cuando quieras que esos campos se muestren juntos para cada proceso coincidente. La lista de procesos es una instantánea, por lo que un proceso puede iniciarse o detenerse entre comandos separados.

Mostrar el propietario del proceso

En Windows, añade -IncludeUserName para solicitar la cuenta asociada a cada proceso devuelto. El valor de la cuenta se expone como UserName; no es una propiedad ProcessOwner. El acceso a la información de la cuenta puede depender de los permisos y del proceso. Esta opción es específica de la plataforma, así que úsala en un entorno de PowerShell de Windows que la admita. Identificar una cuenta es útil para solucionar problemas, pero no es necesario simplemente para terminar un proceso.

El ejemplo elige un proceso presente actualmente en el equipo y captura un error de búsqueda como texto si la cuenta no se puede recuperar:

$process = Get-Process | Select-Object -First 1
if ($process) {
    try {
        Get-Process -Id $process.Id -IncludeUserName | Select-Object Id, ProcessName, UserName
    }
    catch {
        "Could not retrieve UserName: $($_.Exception.Message)"
    }
}