Ich suche ein PowerShell-Cmdlet, das ähnliche Funktionen wie die Linux Top-App bietet. Etwas, das in bestimmten Intervallen aktualisiert wird und die Prozessliste mit CPU% util anzeigt.
Ich habe Skripte gesehen, die die CPU-Auslastung in einer Schleife auflisten, aber so etwas wie top wäre viel praktischer, da wir SSH / Powershell-Zugriff für die Verwaltung eingerichtet haben (ich bevorzuge immer noch eine Putty-Shell!)
Antworten:
Dies ist eine einfache Einlage, die auch die Etiketten oben hält.
Dies funktioniert, da beim Formatieren der Tabelle ohne Parameter nur die Standardtabelle gezeichnet wird. Die automatische Größe wird verwendet, um die Spaltenbreite automatisch anzupassen, damit alle Daten auf den Bildschirm passen.
Hier ist eine Aufschlüsselung der verwendeten verkürzten Befehle
quelle
CPU
inps
ist die Anzahl der Sekunden der Gesamtnutzung, nicht% CPU. Das ist also nicht so nützlich.Ich weiß nichts davon in Form eines einzelnen Cmdlets, aber wie Sie sagen, Skripte sind einfach zu schreiben, um top zu emulieren.
quelle
Eine ähnliche Lösung wie die anderen, jedoch mit Get-Counter anstelle von Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Beispielausgabe:
Ich habe festgestellt, dass die meisten anderen Lösungen hier mithilfe von get-process die gesamte CPU-Zeit seit dem Start des Prozesses melden. Das war auf meinem Server, der rund um die Uhr erreichbar ist und bei dem das beste Ergebnis immer nur
svchost
undsystem
in Millionen von Sekunden erzielt wurde, nicht sinnvoll . Ein True-top
oder Task-Manager-Äquivalent würde einen Schnappschuss der CPU-Auslastung geben, die kürzlich über einen festgelegten Zeitraum aufgezeichnet wurde, und Get-Counter stellt dies bereit. Da dieser Superuser-Beitrag immer noch das Top-Google-Ergebnis für "Powershell-Top" ist, habe ich mir diese Alternative zu Eigen gemacht.Mein Befehl basiert auf Beispiel 13 aus den Get-Counter-Dokumenten: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Hier ist eine Aufschlüsselung des Einzeilers, damit Sie ihn leichter an Ihre Bedürfnisse anpassen können:
While(1) {
schlingt es einfachget-counter '\Process(*)\% Processor Time'
Wählt die CPU% Daten aus. Dieser Befehl scheint eine beträchtliche Zeit in Anspruch zu nehmen, sodass dies nicht erforderlich istsleep
cls
klar für den neuen Tischsort -des CookedValue
CookedValue ist das Feld, auf dem wir uns auskennenselect -f 15
Anzeige zuerst 15ft -a
Anzeige in formatierter Tabellequelle
Get-Counter
Sie erhalten die "augenblickliche" CPU und nicht die kumulierte CPU-Zeit vonps
. Bessere Formatierung :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
Bietet die netten Überschriften oben bei jedem Update, ohne dass die gesamte Konsole gelöscht werden muss.
quelle
Mir ist kein PowerShell-Cmdlet bekannt, das die Funktionalität bereitstellt. Es gibt einen externen Freeware-Befehl, der das tut, was Sie wollen. Schauen Sie sich die PS - Liste von Mark Russinovich aus der Sysinternals-Suite an. PSLIST enthält eine Liste der ausgeführten Prozesse in einer konfigurierbaren Ansicht. "pslist -s" bietet die Art von kontinuierlicher Aktualisierung, die Sie möchten, mit einer Standardaktualisierungsrate von einmal pro Sekunde.
Ich bevorzuge Marks GUI Process Explorer, aber pslist ist praktisch für Konsolensitzungen.
Die Sysinternals-Homepage finden Sie hier: http://technet.microsoft.com/en-us/sysinternals
Dennis
quelle
Dies ist nur eine etwas schönere Möglichkeit, da die Überschriften jedes Mal oben zu sehen sind
quelle
Außerdem möchte ich darauf hinweisen, dass Sie Cygwin verwenden können, wenn Sie eine Linux-ähnliche Umgebung für Windows möchten. Es bringt die Linux-Umgebung zu Windows. Sie können fast jeden Befehl verwenden. Nicht sicher, wie nützlich dies für Sie ist.
http://www.cygwin.com/
quelle
Dies kann auch den Trick machen:
Die Funktion basiert auf den
Get-Counter
Samples und gibt dieProcessId,ProcessName,ProcessorUsage
und ausWorkingSet
. Dieser Zähler Probe kann weiter verbessert werden , umfassenUser
,CommandLine
in dem Ausgang , aber ich habe noch nicht eine performante Art und Weise , es zu tun ausgearbeitet.quelle
Dieser Kommentar von Mark sollte mehr Empfehlungen erhalten, da er fast genau die Frage beantwortet und funktioniert:
(Link zum Kommentar: https://superuser.com/a/770455/989044 )
Sie sollten ein einfaches Modul dafür erstellen und auf Github hosten oder es mit Choco versehen. Ich denke, es sollte in erster Linie ein Standardmodul sein, da es auf Google stark gesucht wird und es alle Arten von Problemumgehungen gibt, aber keine davon ist so elegant und nahe am obersten Linux-Kommando.
Es tut mir leid, dass du es so gepostet hast, aber wegen der strengen Regeln hier ist es unmöglich, Kommentare oder Notizen zu machen, ohne 50 Karma oder so.
quelle
Um top direkt von cmd aus zu starten, müssen Sie die Datei% WINDIR% \ top.bat mit folgendem Code erstellen:
quelle
Wenn Sie nach Prozessen filtern möchten, verwenden Sie findstr
quelle
Möglicherweise möchten Sie den Ressourcenmonitor von Powershell aus starten mit:
Sie können die Anwendung jederzeit mit Alt + F4 schließen, und das sollte den Fokus wieder auf das Powershell-Fenster richten.
quelle
Sie können versuchen, HTOP-Alternative für Windows - NTop
Befehlszeilenoptionen :
Interaktive Befehle:
Vi Befehle :
Vorkompilierte Binärdateien können hier heruntergeladen werden
quelle
Speichern Sie Folgendes in einer Datei mit dem Namen
mytop.ps1
in einem Ordner, der sich in IhrerPATH
Umgebungsvariablen befindet. Verwenden Sie dann eine der folgenden Optionen in einer beliebigen PowerShell-Konsole:mytop
- Standardmäßig nach der Spalte 'Speicher' sortieren und die ersten 30 Zeilen anzeigen.mytop CPU 50
- Nach der Spalte 'CPU' sortieren und die ersten 50 Zeilen anzeigen.While(1) {$p = myTop Memory 50; cls; $p}
- um es jede Sekunde oder so aktualisieren zu lassen.mytop.ps1
Inhalt:Beispielausgabe:
Zusätzliches Guthaben für:
quelle
Etwas anderes zu betrachten ist:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Es gibt ein Befehlszeilentool, mit dem Sie alle Prozesse sichern können (und natürlich Process Monitor oder Process Explorer).
quelle
Mit dem folgenden Befehl erhalten Sie die Top 10 der CPU-Auslastung und die Ausgabe wird alle 5 Sekunden aktualisiert
while (1) {ps | Sort-Object -Property cpu -Descending | select -First 10; Write-Host "Die Ausgabe wird in 5 Sekunden aktualisiert.
n
n Handles NPM (K) PM (K) WS (K) CPU (s) ID SI ProcessName"; Schlaf - 5 Sekundenquelle