Cómo encontrar el uso de CPU y RAM usando PowerShell

  1. Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-Counter
  2. Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-WmiObject
  3. Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-Process
  4. Conclusión
Cómo encontrar el uso de CPU y RAM usando PowerShell

A medida que la tecnología avanza, la necesidad de un monitoreo eficiente del sistema se vuelve cada vez más crucial. Los administradores de Windows y los usuarios a menudo se encuentran buscando formas rápidas y efectivas de evaluar el uso de CPU y RAM para un rendimiento óptimo del sistema en sus máquinas Windows.

En este artículo, exploraremos el poder de PowerShell, un lenguaje de scripting versátil en el entorno de Windows, y descubriremos cómo puede ser utilizado para encontrar y monitorear el uso de CPU y RAM de manera sencilla.

Al utilizar las capacidades de PowerShell, los usuarios pueden obtener información en tiempo real sobre el uso de memoria de su sistema, lo que les permite tomar decisiones informadas y asegurar una experiencia de computación fluida.

Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-Counter

PowerShell, con sus potentes cmdlets, ofrece una solución robusta para recuperar datos de rendimiento en tiempo real. Uno de estos cmdlets, Get-Counter, proporciona una manera versátil y eficiente de acceder a esta información.

El cmdlet Get-Counter nos permite recuperar datos de contadores de rendimiento de máquinas locales o remotas. Para monitorear el uso de CPU y RAM, podemos usar rutas de contadores de rendimiento específicas.

Aquí está la sintaxis básica:

Get-Counter -Counter "\CounterPath"

Para el uso de CPU, la ruta del contador es '\Processor(_Total)\% Processor Time', y para el uso de RAM, es '\Memory\Available MBytes'.

Ejemplo de código de PowerShell para encontrar el uso de CPU y memoria utilizando Get-Counter

Profundicemos en un ejemplo de código completamente funcional que demuestra cómo usar Get-Counter para monitorear tanto el uso de CPU como de RAM:

# PowerShell get memory usage
Get-Counter '\Processor(_Total)\% Processor Time' -Continuous | ForEach-Object {
    $cpuUsage = $_.CounterSamples.CookedValue
    Write-Host "Current CPU Usage: $cpuUsage%"
}

Get-Counter '\Memory\Available MBytes' -Continuous | ForEach-Object {
    $ramUsage = $_.CounterSamples.CookedValue
    Write-Host "Available RAM: ${ramUsage}MB"
}

Desglosemos cada sección del código para entender su funcionalidad.

Monitoreo del uso de CPU:

Get-Counter '\Processor(_Total)\% Processor Time' -Continuous | ForEach-Object {
    $cpuUsage = $_.CounterSamples.CookedValue
    Write-Host "Current CPU Usage: $cpuUsage%"
}

En la primera parte, usamos Get-Counter para recuperar datos en tiempo real sobre el porcentaje de tiempo total del procesador utilizado. La ruta del contador especificada, '\Processor(_Total)\% Processor Time', se dirige al uso general de CPU en todos los núcleos.

El parámetro -Continuous asegura que el comando se ejecute continuamente, proporcionando actualizaciones en vivo, y solo se detiene hasta que se presiona CTRL+C.

La salida de Get-Counter se pasa a través de un bucle ForEach-Object. Para cada muestra de contador recibida, el script extrae el valor procesado (CookedValue), que representa el porcentaje de uso actual de la CPU.

Este valor se almacena en la variable $cpuUsage, y se imprime un mensaje que muestra el uso actual de la CPU en la consola usando la función de PowerShell Write-Host.

Salida del código:

porcentaje de memoria de PowerShell

Monitoreo del uso de memoria (RAM):

Get-Counter '\Memory\Available MBytes' -Continuous | ForEach-Object {
    $ramUsage = $_.CounterSamples.CookedValue
    Write-Host "Available RAM: ${ramUsage}MB"
}

La segunda parte del script se centra en monitorear el porcentaje de memoria. Similar a la sección de CPU, utilizamos Get-Counter con la ruta del contador '\Memory\Available MBytes' para recuperar continuamente datos sobre la memoria disponible en megabytes.

El parámetro -Continuous asegura un monitoreo constante.

Nuevamente, la salida se procesa en un bucle ForEach-Object. Para cada muestra de contador recibida, el script extrae el valor procesado que representa los bytes disponibles en RAM, el cual se almacena en la variable $ramUsage.

El paso final implica mostrar la información de RAM disponible en la consola usando Write-Host.

Salida del código:

powershell obtener uso de memoria

Esta visualización de información en tiempo real es invaluable tanto para administradores de sistemas como para usuarios, permitiéndoles identificar y abordar rápidamente problemas de rendimiento. Get-Counter simplifica el proceso de monitoreo del uso de CPU y RAM, convirtiéndose en una herramienta esencial en el arsenal de PowerShell.

Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-WmiObject

Además del cmdlet Get-Counter, PowerShell ofrece otra herramienta poderosa, Get-WmiObject, para recopilar información del sistema, incluidos el uso de CPU y RAM.

El cmdlet Get-WmiObject nos permite acceder a las clases de Instrumentación de Administración de Windows (WMI), proporcionando una gran cantidad de información sobre el sistema. Para monitorear el uso de CPU y memoria física, se consultan clases y propiedades específicas de WMI.

La sintaxis básica es la siguiente:

Get-WmiObject -Class WMI_Class | Select-Object Property1, Property2, ...

Para el uso de CPU, usamos la clase Win32_Processor, y para el uso de RAM o memoria física, la clase Win32_OperatingSystem.

Ejemplo de código de PowerShell para encontrar el uso de CPU y RAM utilizando Get-WmiObject

Exploremos un ejemplo de código totalmente funcional que demuestra cómo usar Get-WmiObject para monitorear tanto el uso de CPU como de RAM:

# PowerShell get memory usage of all the processes
$cpuObject = Get-WmiObject -Class Win32_Processor
$cpuLoadPercentage = $cpuObject.LoadPercentage
Write-Host "CPU Load Percentage: $cpuLoadPercentage"

$ramObject = Get-WmiObject -Class Win32_OperatingSystem
$ramUsageGB = [math]::Round(($ramObject.TotalVisibleMemorySize - $ramObject.FreePhysicalMemory) / 1GB, 2)
Write-Host "Available RAM: ${ramUsageGB}GB"

Desglosemos cada sección del script de PowerShell anterior para entender su funcionalidad.

Monitoreo del uso de CPU:

$cpuObject = Get-WmiObject -Class Win32_Processor
$cpuLoadPercentage = $cpuObject.LoadPercentage
Write-Host "CPU Load Percentage: $cpuLoadPercentage"

Aquí, el script primero utiliza Get-WmiObject para consultar información de la clase Win32_Processor, que contiene detalles sobre el procesador del sistema. La información obtenida se almacena en la variable $cpuObject.

Posteriormente, el script extrae la propiedad LoadPercentage de $cpuObject, que representa el porcentaje de carga actual de la CPU. Este valor se almacena en la variable $cpuLoadPercentage.

Finalmente, se imprime un mensaje que muestra el porcentaje de carga de CPU en la consola utilizando Write-Host.

Salida del código:

uso total de memoria en powershell

Monitoreo del uso de memoria (RAM):

$ramObject = Get-WmiObject -Class Win32_OperatingSystem
$ramUsageGB = [math]::Round(($ramObject.TotalVisibleMemorySize - $ramObject.FreePhysicalMemory) / 1GB, 2)
Write-Host "Available RAM: ${ramUsageGB}GB"

En la sección de monitoreo de RAM, el script utiliza Get-WmiObject para recuperar información de la clase Win32_OperatingSystem, que contiene varias propiedades relacionadas con el sistema operativo, incluidos detalles sobre la memoria. La información adquirida se almacena en la variable $ramObject.

A continuación, el script calcula la RAM disponible en gigabytes al restar la memoria física libre (FreePhysicalMemory) del total de memoria física o el tamaño total de la memoria visible (TotalVisibleMemorySize). El resultado se redondea a dos decimales utilizando [math]::Round para asegurar una salida más limpia.

El valor de RAM disponible en gigabytes se almacena en la variable $ramUsageGB. Finalmente, se imprime un mensaje que muestra la RAM disponible en la consola utilizando Write-Host.

Salida del código:

memoria libre de powershell

Esta información, recuperada mediante el cmdlet Get-WmiObject, proporciona valiosas perspectivas sobre el rendimiento del sistema, permitiendo a los usuarios monitorear efectivamente la utilización de recursos y tomar decisiones informadas para la optimización del sistema. La simplicidad y claridad del script lo convierten en una herramienta versátil para administradores y usuarios por igual.

Cómo encontrar el uso de CPU y RAM utilizando PowerShell usando Get-Process

Como parte de nuestra exploración sobre el monitoreo del rendimiento del sistema con PowerShell, ahora nos enfocaremos en el cmdlet Get-Process. A diferencia de Get-Counter y Get-WmiObject, Get-Process proporciona información sobre los procesos en ejecución en la máquina local, lo que nos permite extraer detalles sobre el porcentaje de CPU y memoria.

El cmdlet Get-Process recupera información sobre los procesos actualmente en ejecución en una computadora local o remota. Para monitorear el uso de CPU y RAM, filtraremos y extraeremos información relevante de la salida.

La sintaxis básica es la siguiente:

Get-Process -Name "ProcessName" | Select-Object Property1, Property2, ...

Para el uso de CPU, nos enfocaremos en la propiedad CPU, y para el uso de RAM, en la propiedad WorkingSet.

Ejemplo de código de PowerShell para encontrar el uso de CPU y RAM utilizando Get-Process

Exploremos un ejemplo de código completamente funcional que demuestra cómo usar Get-Process para monitorear tanto el uso de CPU como de RAM:

# PowerShell get memory usage
$cpuProcesses = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
ForEach ($process in $cpuProcesses) {
    $processName = $process.ProcessName
    $cpuUsage = $process.CPU
    Write-Host "Process: $processName, CPU Usage: $cpuUsage%"
}

$ramProcesses = Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5
ForEach ($process in $ramProcesses) {
    $processName = $process.ProcessName
    $ramUsageMB = [math]::Round($process.WorkingSet / 1MB, 2)
    Write-Host "Process: $processName, RAM Usage: ${ramUsageMB}MB"
}

Al igual que en los ejemplos anteriores, este script de PowerShell también se organiza en dos secciones: una enfocada en el uso de CPU y la otra en el uso de RAM. Desglosemos cada sección del código.

Monitoreo del uso de CPU:

$cpuProcesses = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
ForEach ($process in $cpuProcesses) {
    $processName = $process.ProcessName
    $cpuUsage = $process.CPU
    Write-Host "Process: $processName, CPU Usage: $cpuUsage%"
}

En la primera sección de código, el script comienza utilizando Get-Process para recuperar información sobre todos los procesos en ejecución en el sistema. La salida se ordena en orden descendente según el uso de CPU utilizando Sort-Object.

El Select-Object -First 5 asegura que solo se consideren los 5 procesos con el mayor uso de CPU. Los procesos resultantes se almacenan en la variable $cpuProcesses.

Se emplea un bucle ForEach para iterar a través de cada objeto de proceso en $cpuProcesses. Para cada proceso, el script extrae el nombre del proceso (ProcessName) y el uso de CPU (CPU).

Esta información se muestra en la consola utilizando Write-Host, presentando el nombre del proceso junto con su porcentaje de uso de CPU correspondiente.

Salida del código:

porcentaje de memoria de powershell

Monitoreo del uso de memoria (RAM):

$ramProcesses = Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5
ForEach ($process in $ramProcesses) {
    $processName = $process.ProcessName
    $ramUsageMB = [math]::Round($process.WorkingSet / 1MB, 2)
    Write-Host "Process: $processName, RAM Usage: ${ramUsageMB}MB"
}

En la segunda sección de código, se toma un enfoque similar. Nuevamente, se utiliza Get-Process para recopilar información sobre todos los procesos en ejecución.

La salida se ordena en función del uso de RAM (WorkingSet) en orden descendente, y solo se seleccionan los 5 procesos en ejecución más importantes. Los procesos resultantes se almacenan en la variable $ramProcesses.

Un bucle ForEach itera a través de cada proceso en $ramProcesses. Para cada proceso, el script extrae el nombre del proceso y calcula el uso de RAM en megabytes.

El cálculo implica dividir el tamaño del conjunto de trabajo por 1 megabyte y redondear el resultado a dos decimales utilizando [math]::Round. La información se muestra en la consola utilizando Write-Host, presentando el nombre del proceso junto con su uso de RAM correspondiente en megabytes.

Salida del código:

uso de memoria de powershell

Este script proporciona un enfoque dinámico para el monitoreo del uso de CPU y memoria, concentrándose en los procesos que más consumen. Al aprovechar las capacidades de Get-Process, los administradores y los usuarios pueden obtener información sobre actividades que consumen muchos recursos en sus sistemas.

Conclusión

Monitorear el uso de CPU y RAM es esencial para mantener un entorno de computación saludable y receptivo. PowerShell, con su amplia gama de cmdlets, proporciona herramientas poderosas como Get-Counter, Get-WmiObject y Get-Process para simplificar este proceso.

Ya sea que prefiera actualizaciones en tiempo real, información detallada de clases WMI o información sobre procesos individuales, PowerShell ofrece soluciones flexibles para satisfacer diversas necesidades de monitoreo. Al incorporar estas técnicas en su conjunto de herramientas de gestión de sistemas, puede permanecer informado sobre el uso de CPU y RAM sin esfuerzo, lo que permite intervenciones oportunas y una optimización proactiva del sistema.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website