2011-06-09 364 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

相关问题