2011-06-09 361 views

回答

33
Get-WmiObject win32_processor | select LoadPercentage |fl 

這會給你CPU負載。

(如EBGreen建議)編輯:

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

謝謝!但是,是否有可能獲得平均數字?我寧願只有一個值而不是兩個。 – Aaron 2011-06-10 13:41:31

+5

試試這個:Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average |選擇平均值 – EBGreen 2011-06-10 14:29:43

+0

我會讓Anirudh的回答立場,如果這對OP有效,他不編輯它,那麼我會在稍後。 – EBGreen 2011-06-10 14:30:28

37

您也可以使用Get-計數器cmdlet的(PowerShell的2.0):

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

爲了讓內存計數器的列表:

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

要將輸出連續輸出到文件(此處每隔五秒)並使用Unix保存到CSV文件日期作爲文件名:

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

我用下面的PowerShell段來獲取本地或遠程系統的CPU使用率:

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 

同一個腳本,但與行延續格式:

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 

在4核心系統上,它將返回如下結果:

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% 
+0

如何修改$ psstats以除以'@(gwmi -ComputerName $ server -Class Win32_ComputerSystemProcessor).Count'並添加'(gwmi Win32_Process -ComputerName $ ComputerName -Credential $ cred | Where {$ _。ProcessId -eq $ Process .IDProcess})。GetOwner()。User'? – 2016-11-02 12:25:15

+0

您不需要反引號來繼續行。您可以繼續使用管道符號。 – js2010 2017-09-29 14:16:56

相關問題