2014-09-12 3 views
0

Я видел - http://technet.microsoft.com/en-us/library/hh849832.aspxPowershell памяти и CPU Usage

И я видел: How to get CPU usage & Memory consumed by particular process in powershell script

Я понимаю, что я могу отправить: Get-процесса * кот | Select-Object CPU внутри Powershell

И самая большая проблема, которую я вижу в том, что процессор не возвращается локально или удаленно ..

Я поставил вместе следующий сценарий .. Часть процессора теперь работает. .

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

ответ

2

Причина, по которой ваша часть процессора не работает, заключается в том, что вы передаете ее в формат-таблицу (вы используете псевдоним FT). Перейдите в конец своей линии $cpuse = и удалите | ft -AutoSize. Как только вы это сделаете, он должен работать так, как вы ожидаете. Я бы также предложил переместить процесс фильтрации на счетчик, как это сделал Грег.

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

Я предполагаю, что вы имеете права читать информацию счетчика, если й e остальная часть скрипта работает ...

Почему бы не указать имя процесса в счетчике, чтобы вам не пришлось возиться со всей фильтрацией позже. Например:

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

Если есть больше чем один процесс кот вам придется разбирать коллекцию CounterSamples, но он должен работать нормально.

+0

Не работает .. 'Get-Counter: Неверный путь счетчика производительности процессора \ tomnet \\ Process (tomcat *) \%. В D: \ WORK \ ps \ tomcat_memory.ps1: 130 char: 27 + $ counter = Get-Counter <<<< -ComputerName $ machine '\ Process (tomcat *) \% Время процессора + Категория: InvalidResult : (:) [Get-Counter], Exception + FullyQualifiedErrorId: CounterPathIsInvalid, Microsoft.PowerShell.Commands.GetCounterCommand' – Leptonator

+0

Вы случайно используете PowerShell 2.0? PowerShell 3+ позволяет использовать подстановочные знаки в счетчике. В противном случае вам нужно использовать что-то вроде «tomcat», «tomcat # 1», «Tomcat # 2» и т. Д. Без кавычек, чтобы получить статистику для каждого процесса. –

+0

внес изменения в скрипт, который отлично подходит для наших нужд: '' \ Process (tomcat6) \% Processor Time'' – Leptonator