Подтвердить что ты не робот

Как найти использование процессора и ОЗУ с помощью PowerShell?

Я пытаюсь заставить PowerShell дать мне оперативную память и использование ЦП, но я не могу понять, какой класс WMI использовать. Мой компьютер имеет два процессора, поэтому было бы полезно иметь информацию для них обоих.

4b9b3361

Ответ 1

Get-WmiObject win32_processor | select LoadPercentage  |fl

Это дает вам нагрузку на процессор.

(Как предлагает EBGreen) EDIT:

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

Ответ 2

Вы также можете использовать командлет Get-Counter (PowerShell 2.0):

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

Чтобы получить список счетчиков памяти:

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

Ответ 3

Я использую следующий фрагмент PowerShell для загрузки процессора для локальных или удаленных систем:

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

Тот же script, но отформатированный с продолжением строки:

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

В четырехъядерной системе будут возвращены результаты, которые выглядят следующим образом:

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 %

Аргумент ComputerName будет принимать список серверов, поэтому с небольшим количеством дополнительного форматирования вы можете создать список лучших процессов на каждом сервере. Что-то вроде:

$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

Это приведет к переменной $psstats с необработанными данными и следующим отображением:

   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%

Ответ 4

Чтобы экспортировать вывод в файл на постоянной основе (здесь каждые пять секунд) и сохранить в CSV файл с датой Unix в качестве имени файла:

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
}