Windows Powershell 的 Linux“Top”命令?

Windows Powershell 的 Linux“Top”命令?

我正在寻找一个可以提供与 Linux Top 应用程序类似功能的 PowerShell cmdlet。它可以按给定的时间间隔刷新并显示带有 CPU % util 的进程列表。

我见过循环列出 CPU 百分比利用率的脚本,但是像 top 这样的脚本会更方便,因为我们已经设置了 SSH/Powershell 访问权限进行管理(我仍然更喜欢 putty shell!)

答案1

这是一个简单的单行代码,它也会将标签保持在顶部:

While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}

这是有效的,因为不使用任何参数来格式化表格只会绘制默认表格。autosize用于自动调整列宽,以便所有数据都能适合屏幕。


缩短命令的细目:

  • select -f: 快捷方式-first
  • ft: 快捷方式Format-Table
  • -a: 快捷方式-autosize
  • sleep:默认使用秒

答案2

与其他解决方案类似,但使用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(program2)\% processor time               program              749.692930701698
\\server_name\process(program5)\% processor time               program              563.424255927765
\\server_name\process(program1)\% processor time               program              535.714866291973
\\server_name\process(program6)\% processor time               program              455.665518455242
\\server_name\process(program3)\% processor time               program              426.416718284128
\\server_name\process(program)\% processor time                program              395.628507577693
\\server_name\process(program4)\% processor time               program              335.591496700144
\\server_name\process(microsoftedgecp2)\% processor time       microsoftedgecp      129.310484967028
\\server_name\process(system)\% processor time                 system               80.0493478367316
\\server_name\process(chrome8)\% processor time                chrome               1.53941053532176

我发现这里的大多数其他解决方案都使用Get-Process报告自进程开始以来的总 CPU 时间,但这对我的服务器没有用,因为服务器全天候运行,而顶级结果总是需要svchostsystem百万秒的时间。

  • 真实top或任务管理器等效项将提供最近在某个固定时间内记录的 CPU 使用率快照,并Get-Counter提供该快照。我认为这个替代方案值得贡献,因为这个问题仍然是 Google 上关于powershell top

基于示例 13Get-Counter 文档,命令的细分:

  • While(1) {:创建循环
  • get-counter '\Process(*)\% Processor Time':选择 CPU % 数据,这需要很长时间才能返回,因此无需sleep

  • cls:清除新表

  • sort -des CookedValueCookedValue:按[我们感兴趣的领域]最大排序
  • select -f 15:显示前 15 个
  • ft -a:以格式化表格形式显示

答案3

我对单个 cmdlet 形式一无所知,但就像您说的那样,脚本很容易编写以模拟顶部。

while (1) { ps | sort -desc cpu | select -first 30; sleep -seconds 2; cls }

答案4

每次更新时都在顶部提供漂亮的标题,而无需清除整个控制台:

$saveY = [console]::CursorTop
$saveX = [console]::CursorLeft

while ($true) {
  Get-Process | Sort -Descending CPU | Select -First 30;
  Sleep -Seconds 2;
  [console]::setcursorposition($saveX,$saveY+3)
}

相关内容