Saltar al contenido

¿Cómo encuentro el uso de CPU y RAM usando PowerShell?

Presta atención ya que en esta reseña vas a hallar la respuesta que buscas.

También puede usar el cmdlet Get-Counter (PowerShell 2.0):

Get-Counter 'MemoryAvailable MBytes'
Get-Counter 'Processor(_Total)% Processor Time'

Para obtener una lista de contadores de memoria:

Get-Counter -ListSet *memory* | Select-Object -ExpandProperty  Counter

Get-WmiObject Win32_Processor | Select LoadPercentage | Format-List

Esto le da carga de CPU.

Get-WmiObject Win32_Processor | Measure-Object -Property LoadPercentage -Average | Select Average

Uso el siguiente fragmento de código de PowerShell para obtener el uso de la CPU para sistemas locales o remotos:

Get-Counter -ComputerName localhost 'Process(*)% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@L='CPU';E=($_.Cookedvalue/100).toString('P') -AutoSize

Mismo script pero formateado con continuación de línea:

Get-Counter -ComputerName localhost 'Process(*)% Processor Time' `
    | Select-Object -ExpandProperty countersamples `
    | Select-Object -Property instancename, cookedvalue `
    | Sort-Object -Property cookedvalue -Descending | Select-Object -First 20 `
    | ft InstanceName,@L='CPU';E=($_.Cookedvalue/100).toString('P') -AutoSize

En un sistema de 4 núcleos, devolverá resultados que se ven así:

InstanceName          CPU
------------          ---
_total                399.61 %
idle                  314.75 %
system                26.23 %
services              24.69 %
setpoint              15.43 %
dwm                   3.09 %
policy.client.invoker 3.09 %
imobilityservice      1.54 %
mcshield              1.54 %
hipsvc                1.54 %
svchost               1.54 %
stacsv64              1.54 %
wmiprvse              1.54 %
chrome                1.54 %
dbgsvc                1.54 %
sqlservr              0.00 %
wlidsvc               0.00 %
iastordatamgrsvc      0.00 %
intelmefwservice      0.00 %
lms                   0.00 %

El argumento ComputerName aceptará una lista de servidores, por lo que con un poco de formato adicional puede generar una lista de los principales procesos en cada servidor. Algo como:

$psstats = Get-Counter -ComputerName utdev1,utdev2,utdev3 'Process(*)% Processor Time' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty countersamples | %New-Object PSObject -Property @ComputerName=$_.Path.Split('')[2];Process=$_.instancename;CPUPct=("0,4:N0%" -f $_.Cookedvalue);CookedValue=$_.CookedValue | ?$_.CookedValue -gt 0| Sort-Object @E='ComputerName'; A=$true ,@E='CookedValue'; D=$true ,@E='Process'; A=$true 
$psstats | ft @E="0,25" -f $_.Process;L="ProcessName",CPUPct -AutoSize -GroupBy ComputerName -HideTableHeaders

Lo que daría como resultado una variable $psstats con los datos sin procesar y la siguiente pantalla:

   ComputerName: utdev1

           _total  397%
             idle  358%
             3mws   28%
           webcrs   10%


   ComputerName: utdev2

           _total  400%
             idle  248%
             cpfs   42%
             cpfs   36%
             cpfs   34%
          svchost   21%
         services   19%


   ComputerName: utdev3

           _total  200%
             idle  200%

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *