PowerShell的内存和CPU使用率

问题描述:

我所看到的 - http://technet.microsoft.com/en-us/library/hh849832.aspxPowerShell的内存和CPU使用率

而且,我已经看到了:How to get CPU usage & Memory consumed by particular process in powershell script

我明白,我可以给一个:获取进程的Tomcat * |选择-对象CPU内部PowerShell的

而我看到的是,CPU是不是本地或远程返回的最大的问题..

我已经把下面的脚本。该CPU部分现在的工作。 。

writeHtmlHeader $TomcatMemFileName 
writeTableHeader $TomcatMemFileName 

[int]$i = 1 
foreach ($server in Get-Content $serverlist) 
{ 
$Computer=$server.split(",")[0] 
$ip=$server.split(",")[1] 
IF ($Computer -notmatch 'DB') { 
    $procs = Gps tomcat* -ComputerName $Computer 
    foreach ($proc in $procs){ 
    $id = $proc.ID 
    $machine = $proc.MachineName 
    $process = $proc.ProcessName 
    $WorkingSet = [int64]($proc.WorkingSet64/1024) 
    $VirtualMem = [int]($proc.VM/1MB) 
    $cpuse= Get-Counter -computername $machine '\Process(tomcat6)\% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property cookedvalue 
    foreach ($cpus in $cpuse){ 
     $cpu=$cpus.cookedvalue 
     write-host $TomcatMemFileName $i $machine.ToUpper() $id $process $WorkingSet $VirtualMem $cpu 
     writeTomcatInfo $TomcatMemFileName $i $machine.ToUpper() $id $process $WorkingSet $VirtualMem $cpu 
    } 
} 
} 
$i++ 
} 

writeTablefooter $TomcatMemFileName 
writeHtmlFooter $TomcatMemFileName 

感谢,

肯特

+0

刚刚更新了要工作的代码!谢谢@TheMadTechnician – Leptonator 2014-09-12 19:32:52

你的CPU部分不工作的原因是你将它管道到Format-Table(你使用FT别名)。转到您的$cpuse =行的末尾,并删除| ft -AutoSize。一旦你这样做,它应该如你所期望的那样工作。我还建议像Greg那样将流程过滤移到柜台。

$cpuse= Get-Counter -computername $machine '\Process(tomcat*)\% Processor Time' | Select-Object -ExpandProperty countersamples | Select-Object -Property cookedvalue 

我会假设你有权利看,如果个计数器信息其余的脚本工作...

为什么不指定在计数器中的过程名称,这样你就不必在后面过滤所有的过滤。例如:

$counter = Get-Counter '\Process(tomcat*)\% Processor Time' -ComputerName $myServer 
$counter.CounterSamples.CookedValue 

如果有多个Tomcat进程,你必须拆开CounterSamples集合,但它应该工作得很好。

+0

不工作..'Get-Counter:\\ SERVER \\ Process(tomcat *)\%处理器时间性能计数器路径无效。 在D:\ WORK \ PS \ tomcat_memory.ps1:130 char:27 + $ counter = Get-Counter Leptonator 2014-09-12 18:53:29

+0

您是否偶然使用PowerShell 2.0? PowerShell 3+允许您在计数器中使用通配符。否则,你必须使用像'tomcat','tomcat#1','Tomcat#2'等没有引号来获得每个进程的统计信息。 – 2014-09-12 19:28:27

+0

对脚本进行了更改,该脚本可以很好地满足我们的需求:''\ Process(tomcat6)\%Processor Time'' – Leptonator 2014-09-12 19:42:54