Windows powershell отображает процент использования ЦП и памяти

Я могу использовать ответ процент загрузки ЦП.

While(1) { $p = get-counter 'Process(*)% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}

теперь у меня возникли проблемы с возможностью иметь использование памяти и процессора процент отображается в то же время для задачи на компьютере.
Я знаю Get-Counter "Process(*)Working Set - Private" получит память, но id хотел бы иметь задачу, CPU % и использование памяти отображается в то же время.

обновление 1: в идеале я хотел бы иметь возможность запускать это в powershell как набор команды. Я хотел бы, чтобы вывод отображался как:

Process Name CPU (%) Memory (MB)
------------ ------- -----------

Я возьму то, что я могу получить, когда дело доходит до отображения, которое может быть обработано после возможности просто отображения трех элементов в powershell.

обновление 2: этот раздел кода предоставляет то, что я хотел бы

while (1) {cls; Get-WmiObject Win32_PerfFormattedData_PerfProc_Process |
select-object -property Name, PercentProcessorTime, IDProcess, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} |
? {$_.Name -notmatch "^(idle|_total|system)$"} |
Sort-Object -Property PercentProcessorTime -Descending|
ft -AutoSize |
Select-Object -First 15; start-sleep 5}

это приводит к следующему дисплея:

Name PercentProcessorTime IDProcess WSP(MB)
---- -------------------- --------- -------
MicrosoftEdgeCP#3 6 18972 6 WmiPrvSE#3 6 27300 7
svchost#22 0 7316 1

Только недостатком этого является то, что он терпит неудачу после одного отображения информации, и я не знаю, почему. Есть какая-нибудь помощь?

обновление:3

$cores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors
while ($true) {
$tmp = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process |
select-object -property Name, @{Name = "CPU"; Expression = {($_.PercentProcessorTime/$cores)}}, @{Name = "PID"; Expression = {$_.IDProcess}}, @{"Name" = "Memory(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} |
Where-Object {$_.Name -notmatch "^(idle|_total|system)$"} |
Sort-Object -Property CPU -Descending|
Select-Object -First 15;
cls;
$tmp | Format-Table -Autosize -Property Name, CPU, PID, "Memory(MB)";
Start-Sleep 5
}

выполняет все, в чем я нуждаюсь, и дает мне начальное место в будущем, чтобы строить из. Проблема, которую я имел с таблицы форматирования является то, что format-table должна быть последней.

6
задан Keith Bux
02.12.2022 10:50 Количество просмотров материала 2495
Распечатать страницу

2 ответа

есть еще один способ запроса счетчиков производительности через WMI, который, я думаю, доставит то, что вам нужно. Выходные данные также включают идентификатор процесса, который полезен при отслеживании процесса, который имеет несколько экземпляров. Он также использует так называемое "вычисляемое свойство" в пределах select-object для преобразования рабочего заданного значения из байтов в мегабайты. Также отметим, что максимум процессор на 4 ядра система 400, а не 100. Таким образом, чтобы получить общее использование (это максимум 100), вам нужно разделить каждый значение CPU процессов по количеству ядер.

$cores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors
while ($true) {
    Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | 
    Where-Object {$_.Name -notmatch "^(idle|_total|system)$" -and $_.PercentProcessorTime -gt 0} |
    Format-Table -Autosize -Property @{Name = "CPU"; Expression = {[int]($_.PercentProcessorTime/$cores)}}, Name, @{Name = "PID"; Expression = {$_.IDProcess}}, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}}
    Start-Sleep 5
}

CPU Name            PID WSP(MB)
--- ----      --------- -------
  1 chrome        12476      64
  2 wuauclt        7504       0
  3 SearchIndexer 10128      22
  4 TIworker      11380     102
0
отвечен Clayton 2022-12-03 18:38

while (1) {cls; Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | select-object -property Name, PercentProcessorTime, IDProcess, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} | ? {$_.Name -notmatch "^(idle|_total|system)$"} | Sort-Object -Property PercentProcessorTime -Descending| Select-Object -First 15 | ft Name, PercentProcessorTime, IDProcess, "WSP(MB)" -AutoSize; start-sleep 5}

Это то, что я искал. Спасибо @Clayton за отличную отправную точку. Вот объяснение того, что делает каждая часть.

while(1) => всегда работает

cls => очистить текущий экран

Get-WmiObject = > > используется для получения всей текущей информации о процессе

select-object = > > выберите только столбцы данных, которые требуются

? {$_.Name -notmatch "^(idle|_total|system)$"} => удалить имена процессов, которые простаивают, _total, или система в первой части имени процесса

Sort-Object => сортировка процессов по использованию процессора в порядке убывания

Select-Object = > > выберите только первые 15 элементов (топ 15 процессов процессора)

ft => обеспечить форматирование таблицы с заголовками столбцов и с помощью всего экрана

start-sleep => спящий цикл для запуска примерно каждые 5 сек

0
отвечен Keith Bux 2022-12-03 20:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх