Подобное решение, как и другие, но с использованием Get-Counter вместо Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Образец вывода:
Path InstanceName CookedValue
---- ------------ -----------
\\server_name\process(_total)\% processor time _total 4806.03969127454
\\server_name\process(idle)\% processor time idle 1103.7573538257
\\server_name\process(program#2)\% processor time program 749.692930701698
\\server_name\process(program#5)\% processor time program 563.424255927765
\\server_name\process(program#1)\% processor time program 535.714866291973
\\server_name\process(program#6)\% processor time program 455.665518455242
\\server_name\process(program#3)\% processor time program 426.416718284128
\\server_name\process(program)\% processor time program 395.628507577693
\\server_name\process(program#4)\% processor time program 335.591496700144
\\server_name\process(microsoftedgecp#2)\% processor time microsoftedgecp 129.310484967028
\\server_name\process(system)\% processor time system 80.0493478367316
\\server_name\process(chrome#8)\% processor time chrome 1.53941053532176
Я обнаружил, что большинство других решений, использующих get-process, отображают общее время ЦП с начала процесса. Это было бесполезно на моем сервере, который работает круглосуточно и без выходных, где лучшим результатом всегда были svchost
и system
за миллионы секунд. Истинный top
или эквивалент диспетчера задач позволил бы получить снимок использования ЦП, записанный за последнее время в течение некоторого фиксированного времени, и Get-Counter обеспечивает это. Поскольку этот пост суперпользователя по-прежнему является лучшим результатом Google для "powershell top", я решил, что эта альтернатива заслуживает внимания.
Моя команда основана на примере 13 из документов Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter.
Вот разбивка однострочника, так что вы можете легко изменить его под свои нужды:
While(1) {
просто зацикливает
get-counter '\Process(*)\% Processor Time'
выбирает данные% CPU. Эта команда, кажется, занимает значительное время, чтобы вернуться, поэтому не нужно sleep
cls
очистить для новой таблицы
sort -des CookedValue
CookedValue - это поле, в которое мы намерены войти, сортировка, чтобы поставить наибольшее сверху
select -f 15
показать первые 15
ft -a
отображение в отформатированной таблице