79 linux ssh display powershell top
我正在寻找一个 PowerShell cmdlet,它可以提供与 Linux Top 应用程序类似的功能。在某个给定的时间间隔刷新并使用 CPU % util 显示进程列表的东西。
我见过在循环中列出 CPU % 利用率的脚本,但是像 top 这样的东西会更方便,因为我们已经设置了 SSH/Powershell 访问权限以进行管理(我仍然更喜欢腻子外壳!)
小智 44
这是一个简单的单衬,也将标签保持在顶部:
While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为在没有任何参数的情况下格式化表格只会绘制默认表格。autosize用于自动调整列宽,以便所有数据都可以显示在屏幕上。
缩短命令的细分:
select -f: 快捷方式 -firstft: 快捷方式 Format-Table-a: 快捷方式 -autosizesleep: 默认使用秒小智 29
我对单个 cmdlet 形式一无所知,但就像你说的,脚本很容易编写来模拟 top。
while (1) { ps | sort -desc cpu | select -first 30; sleep -seconds 2; cls }
Run Code Online (Sandbox Code Playgroud)
小智 28
与其他解决方案类似的解决方案,但使用Get-Counter代替Get-Process:
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Run Code Online (Sandbox Code Playgroud)
示例输出:
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
Run Code Online (Sandbox Code Playgroud)
我发现这里大部分使用其他解决方案的Get-Process报告,总的CPU时间,因为过程的开始,这是不是我的服务器上有用的停留7×24小时其中顶部的结果总是svchost与system在百万秒。
top或任务管理器等效将给出最近在某个固定时间内记录的 CPU 使用情况的快照,并提供该快照Get-Counter。我认为这个替代方案值得做出贡献,因为这个问题仍然是powershell top.基于Get-Counter 文档中的示例 13 ,该命令的细分:
While(1) {: 创建一个循环get-counter '\Process(*)\% Processor Time': 选择 CPU % 数据,这需要大量时间才能返回,因此无需 sleep
cls: 清除新表
sort -des CookedValue:对CookedValue[我们感兴趣的领域]排序最大select -f 15: 显示前 15ft -a: 在格式化表格中显示小智 10
每次更新都在顶部提供漂亮的标题,而无需清除整个控制台:
$saveY = [console]::CursorTop
$saveX = [console]::CursorLeft
while ($true) {
Get-Process | Sort -Descending CPU | Select -First 30;
Sleep -Seconds 2;
[console]::setcursorposition($saveX,$saveY+3)
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试NTop(二进制文件),这htop是 Windows的替代方案,使用Vi-emulation for Windows:
C:使用单色配色方案h:显示帮助p <PID>:只显示给定的 PIDs <COLUMN>:按此列排序u <USERNAME>:只显示属于这个用户的进程v:印刷版Vi命令:
:exec <command>:执行给定的 Windows 命令:kill <PIDs>:杀死所有给定的进程:q或:quit:退出NTop/<PATTERN>或:search <PATTERN>:进行搜索:sort <COLUMN>:在给定列之后对进程列表进行排序:tree:查看进程树小智 5
我不知道提供该功能的 PowerShell cmdlet,但这里有一个免费软件外部命令,可以满足您的需求,pslist来自Sysinternals套件的Mark Russinovich :
pslist 在可配置视图中提供正在执行的进程列表 pslist -s 提供您想要的那种连续更新,默认刷新率为每秒一次我更喜欢使用 Mark 的 GUI Process Explorer,但pslist它对控制台会话很方便。
| 归档时间: |
|
| 查看次数: |
138675 次 |
| 最近记录: |