Linux "Top" pour Windows Powershell?

Je recherche une cmdlet PowerShell qui peut fournir des fonctionnalités similaires à l'application Linux Top. Quelque chose qui se rafraîchit à un certain intervalle et affiche la liste des processus avec CPU% util.

J'ai vu des scripts qui répertorient l'utilisation de CPU% en boucle, mais quelque chose comme le top serait beaucoup plus pratique car nous avons configuré l'accès SSH / Powershell pour la gestion (je préfère encore un shell de mastic!)

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

Il s'agit d'une doublure simple qui gardera également les étiquettes au sommet.

Cela fonctionne car le formatage de la table sans aucun paramètre ne fait que tracer la table par défaut. L'autosize est utilisé pour ajuster automatiquement la largeur de la colonne afin que toutes les données puissent être installées sur l'écran.

Voici une ventilation des commandes raccourcies utilisées

  • Select -f est un raccourci pour -prior
  • Ft est un raccourci pour Format-Table
  • -a est un raccourci pour -autosize
  • Dormir par défaut en secondes

Il n'y a rien que je connaisse en une seule forme de cmdlet, mais comme vous l'avez dit, les scripts sont faciles à écrire pour imiter le haut.

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

Fournit les belles rubriques au sommet avec chaque mise à jour sans avoir besoin d'effacer toute la console.

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

Je ne suis pas au courant d'une cmdlet PowerShell qui fournit la fonctionnalité. Il existe une commande externe freeware qui fait sur ce que vous voulez. Regardez la liste de diffusion de Mark Russinovich de la suite Sysinternals. Pslist fournit une liste des processus d'exécution dans une vue configurable. "Pslist -s" fournit le type de mise à jour continue que vous voulez, avec un taux de rafraîchissement par défaut d'une fois par seconde.

Je préfère utiliser l'Explorateur de processus GUI de Mark, mais pslist est pratique pour les sessions de console.

La page d'accueil de Sysinternals est ici: http://technet.microsoft.com/en-us/sysinternals

Dennis

 while (1) {ps | sort -desc cpu | select -first 30; sleep -seconds 2; cls; write-host "Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName"; write-host "------- ------ ----- ----- ----- ------ -- -----------"} 

C'est juste un moyen légèrement plus agréable, car vous pouvez voir les en-têtes en haut chaque fois

Une solution similaire à celle des autres, mais en utilisant Get-Counter au lieu de Get-Process.

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

Exemple de sortie:

 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 

J'ai trouvé la plupart des autres solutions ici en utilisant le rapport get-process du temps CPU total depuis le début du processus. Ce n'était pas utile sur mon serveur qui reste 24 heures sur 24, 7 jours sur 7, où le résultat le plus svchost était toujours le svchost et le system à des millions de secondes. Un vrai top ou un équivalent du Gestionnaire des tâches donnerait un instantané de l'utilisation de la CPU récemment enregistrée pendant un certain temps et Get-Counter fournit cela. Étant donné que cette publication de Superutilisateur est toujours le résultat Google le plus élevé pour "powershell top", j'ai pensé que cette alternative vaut la peine de contribuer.

Ma commande est basée sur l'exemple 13 des documents Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Voici une panne du one-liner afin que vous puissiez le modifier plus facilement à vos besoins:

  • While(1) { juste la boucle
  • get-counter '\Process(*)\% Processor Time' sélectionne la CPU% de données. Cette commande semble prendre beaucoup de temps à revenir, donc pas besoin de sleep
  • cls clair pour la nouvelle table
  • sort -des CookedValue CookedValue est le champ dans lequel nous sommes intégrés, sorte de mettre le plus grand sur le dessus
  • select -f 15 affiche d'abord 15
  • ft -a affichage dans une table formatée

De plus, je tiens à souligner que si vous souhaitez un environnement linux pour Windows, vous pouvez utiliser Cygwin. Il apporte Linux Enviroment à Windows. Vous pouvez utiliser presque toutes les commandes. Je ne sais pas trop utile pour vous.

http://www.cygwin.com/

Pour exécuter haut directement à partir de cmd, vous devez créer le fichier% WINDIR% \ top.bat avec ce code:

 @echo off && cls && @echo TOP Program initialisation. Please Wait... powershell -ExecutionPolicy unrestricted -command "& {cls; While(1) {ps | sort -des cpu | select -f 35 | ft -a; sleep 2; cls}}" 

Si vous souhaitez filtrer par processus, utilisez findstr

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