2011-06-09 29 views

Respuesta

33
Get-WmiObject win32_processor | select LoadPercentage |fl 

Esto le proporciona la carga de la CPU.

(Como EBGreen sugiere) EDIT:

Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Select Average 
+0

Gracias! Sin embargo, ¿sería posible obtener un promedio de estos números? Preferiría tener solo un valor en lugar de dos. – Aaron

+5

Pruebe esto: Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Seleccione Promedio – EBGreen

+0

Voy a dejar la respuesta de Anirudh en pie y si eso funciona para el OP y él no lo edita, lo haré más tarde. – EBGreen

37

También puede utilizar el contador cmdlet Get-(PowerShell 2.0):

Get-Counter '\Memory\Available MBytes' 
Get-Counter '\Processor(_Total)\% Processor Time' 

Para obtener una lista de los contadores de memoria:

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

Para exportar la salida al archivo de forma continua (aquí cada cinco segundos) y guardar en un archivo CSV con Unix fecha como nombre de archivo:

while ($true) { 
    [int]$date = get-date -Uformat %s 
    $exportlocation = New-Item -type file -path "c:\$date.csv" 
    Get-Counter -Counter "\Processor(_Total)\% Processor Time" | % {$_} | Out-File $exportlocation 
    start-sleep -s 5 
} 
15

que utilice las siguientes PowerShell fragmento de código para obtener el uso de CPU para los 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 guión pero formateado con línea de continuación:

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 formateo adicional puede generar una lista de los procesos principales en cada servidor. Algo así 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 

que daría lugar a una variable de $ psstats con los datos en bruto 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% 
+0

Cómo modificar $ psstats para dividir por '@ (gwmi -ComputerName $ server -Class Win32_ComputerSystemProcessor) .Count' y agregar' (gwmi Win32_Process -ComputerName $ ComputerName -Credential $ cred | Where {$ _. ProcessId -eq $ Process .IDProcess}). GetOwner(). User'? –

+0

No necesita las comillas para continuar las líneas. Puede continuar en los símbolos de tubería. – js2010

Cuestiones relacionadas