2014-09-12 105 views
0

我所看到的 - 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

回答

2

你的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 
1

我會假設你有權利看,如果個計數器信息其餘的腳本工作...

爲什麼不指定在計數器中的過程名稱,這樣你就不必在後面過濾所有的過濾。例如:

$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 <<<< - 計算機名$機器'\ Process(tomcat *)\處理器時間' + CategoryInfo:InvalidResult :(:) [Get-Counter],異常 + FullyQualifiedErrorId:CounterPathIsInvalid,Microsoft.PowerShell.Commands.GetCounterCommand' – 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