Je recherche une applet de commande PowerShell pouvant fournir des fonctionnalités similaires à l'application Linux Top. Quelque chose qui actualise à un intervalle donné et affiche la liste des processus avec% d'utilisation du processeur.
J'ai vu des scripts répertoriant le pourcentage d'utilisation du processeur dans une boucle, mais quelque chose comme top serait beaucoup plus pratique car nous avons configuré l'accès SSH / Powershell pour la gestion (je préfère toujours un shell putty!)
Réponses:
Il s’agit d’un simple support qui maintiendra également les étiquettes en haut.
Cela fonctionne parce que le formatage de la table sans aucun paramètre ne dessine que la table par défaut. autosize est utilisé pour ajuster automatiquement la largeur de la colonne afin que toutes les données puissent tenir à l'écran.
Voici un aperçu des commandes abrégées utilisées
la source
CPU
inps
est le nombre de secondes d'utilisation totale, pas le% CPU. Donc, ce n'est pas si utile.Je ne connais rien de cela sous forme d'applet de commande unique, mais comme vous le dites, il est facile d'écrire des scripts pour imiter top.
la source
Une solution similaire aux autres solutions, 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:
J'ai trouvé que la plupart des autres solutions présentées ici, à l'aide de get-process, signalent le temps CPU total écoulé depuis le début du processus. Cela n'a pas été utile sur mon serveur qui reste actif 24 heures sur 24, 7 jours sur 7, où le résultat final a toujours été juste
svchost
etsystem
à des millions de secondes. Untop
équivalent ou un gestionnaire de tâches équivalent donnerait un instantané de l'utilisation du processeur enregistrée récemment sur une durée déterminée, et Get-Counter le fournit. Étant donné que ce message de superutilisateur est toujours le meilleur résultat de Google pour "powershell top", j’ai pensé que cette alternative méritait d’être enrichie.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 ventilation du one-liner afin que vous puissiez plus facilement l'adapter à vos besoins:
While(1) {
juste le boucleget-counter '\Process(*)\% Processor Time'
sélectionne les données% CPU. Cette commande semble prendre beaucoup de temps pour revenir, donc pas besoin desleep
cls
clair pour la nouvelle tablesort -des CookedValue
CookedValue est le domaine dans lequel nous nous intéressons, triez pour placer le plus grand sur le dessusselect -f 15
afficher les 15 premiersft -a
afficher dans un tableau formatéla source
Get-Counter
vous donne le processeur "instantané", plutôt que le temps de traitement cumulé deps
. Meilleure mise en forme :Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty countersamples| Select-Object -Property instancename, cookedvalue| ? {$_.instanceName -notmatch "^(idle|_total|system)$"} | Sort-Object -Property cookedvalue -Descending| Select-Object -First 25| ft InstanceName,@{L='CPU';E={($_.Cookedvalue/100/$env:NUMBER_OF_PROCESSORS).toString('P')}} -AutoSize
Fournit les belles en-têtes en haut de chaque mise à jour sans avoir à effacer toute la console.
la source
Je ne connais pas d'applet de commande PowerShell fournissant ces fonctionnalités. Il existe une commande externe gratuite qui fait ce que vous voulez. Regardez la pslist de Mark Russinovich de la suite Sysinternals. Pslist fournit une liste des processus en cours d'exécution dans une vue configurable. "pslist -s" fournit le type de mise à jour continue que vous souhaitez, avec une fréquence d'actualisation par défaut d'une fois par seconde.
Je préfère utiliser Mark's Process Explorer, l'interface graphique 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
la source
C’est juste une façon un peu plus agréable de voir les titres en haut à chaque fois
la source
Je tiens également à souligner que si vous souhaitez un environnement Windows semblable à Linux, vous pouvez utiliser Cygwin. Il apporte l'environnement Linux à Windows. Vous pouvez utiliser presque toutes les commandes. Je ne sais pas si cela vous est utile.
http://www.cygwin.com/
la source
Cela peut aussi faire l'affaire:
La fonction s'appuie sur les
Get-Counter
échantillons et générera leProcessId,ProcessName,ProcessorUsage
etWorkingSet
. Cet échantillon de compteur pourrait encore être amélioré pour inclureUser
,CommandLine
dans la sortie, mais je n'ai pas encore trouvé de moyen performant de le faire.la source
Ce commentaire de Mark devrait faire l’objet de plus de recommandations, car il répond presque exactement à la question et fonctionne:
(lien vers le commentaire: https://superuser.com/a/770455/989044 )
Vous devriez en faire un module simple et l'héberger sur github ou lui fournir choco. Je pense que cela devrait être un module standard en premier lieu, car il est très recherché sur Google et il y a toutes sortes de solutions de contournement, mais aucune d'entre elles n'est aussi élégante et proche de la commande top linux.
Désolé de l'avoir posté comme ça, mais à cause des règles de strikt ici, il est impossible de commenter ou de faire une note sans 50 karma ou plus.
la source
Pour exécuter top directement à partir de cmd, vous devez créer le fichier% WINDIR% \ top.bat avec ce code:
la source
Si vous souhaitez filtrer par processus, utilisez findstr
la source
Vous voudrez peut-être lancer le moniteur de ressources à partir de powershell avec:
Vous pouvez toujours fermer l'application avec Alt + F4, ce qui devrait permettre de revenir au focus sur la fenêtre Powershell.
la source
Vous pouvez essayer htop-alternative pour Windows - NTop
Options de ligne de commande :
Commandes interactives:
Commandes Vi :
Les binaires précompilés peuvent être téléchargés ici
la source
Enregistrez les éléments suivants dans un fichier appelé
mytop.ps1
dans un dossier de votrePATH
variable d’environnement. Utilisez ensuite l’un des éléments suivants à partir de n’importe quelle console PowerShell:mytop
- utiliser le tri par défaut de la colonne 'Mémoire' et afficher les 30 premières lignes.mytop CPU 50
- trier par la colonne 'CPU' et afficher les 50 premières lignes.While(1) {$p = myTop Memory 50; cls; $p}
- de le rafraîchir toutes les secondes environ.mytop.ps1
Contenu:Exemple de sortie:
Crédit supplémentaire à:
la source
Autre chose à regarder est:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Il existe un outil de ligne de commande pour vider tous les processus (et bien sûr, Process Monitor ou Process Explorer).
la source
Utilisez la commande ci-dessous, elle vous donnera le top 10 d'utilisation du processeur et la sortie sera actualisée toutes les 5 secondes.
tandis que (1) {ps | Sort-Object -Property cpu -Descending | la sortie select-First 10; Write-Host "sera régénérée dans les secondes de 5 secondes.
n
Handle NPM (K) PM (K) WS (K) CPU (s) Id SI ProcessName"; sommeil-secondes 5}la source