Szukam polecenia cmdlet programu PowerShell, które może zapewnić podobną funkcjonalność jak aplikacja Linux Top. Coś, co odświeża się w danym interwale i wyświetla listę procesów z procentowym wykorzystaniem procesora.
Widziałem skrypty, które wyświetlają procent wykorzystania procesora w pętli, ale coś takiego jak top byłoby o wiele bardziej przydatne, ponieważ mamy skonfigurowany dostęp do SSH / Powershell do zarządzania (nadal wolę putty shell!)
Odpowiedzi:
Jest to prosta wkładka, która zachowa również etykiety na górze.
Działa to, ponieważ formatowanie tabeli bez żadnych parametrów po prostu rysuje tabelę domyślną. autosize służy do automatycznego dostosowania szerokości kolumny, aby wszystkie dane mogły zmieścić się na ekranie.
Oto zestawienie zastosowanych skróconych poleceń
źródło
CPU
wps
to liczba sekund całkowitego zużycia, a nie% procesora. To nie jest tak przydatne.Nic nie wiem o tym w postaci pojedynczego polecenia cmdlet, ale jak mówisz, skrypty można łatwo napisać, aby emulować górę.
źródło
Podobne rozwiązanie jak inne, ale przy użyciu Get-Counter zamiast Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Przykładowe dane wyjściowe:
Znalazłem tutaj większość innych rozwiązań wykorzystujących raport get-process o całkowitym czasie pracy procesora od początku procesu. Nie przydało mi się to na moim serwerze, który działa 24 godziny na dobę, 7 dni w tygodniu, gdzie najwyższy wynik zawsze był sprawiedliwy
svchost
i wynosiłsystem
miliony sekund. Prawdatop
lub odpowiednik Menedżera zadań dałby migawkę ostatnio zarejestrowanego użycia procesora w określonym czasie, a Get-Counter to zapewnia. Ponieważ ten post Superuser jest nadal najlepszym wynikiem Google dla „powerhell top”, pomyślałem, że ta alternatywa jest warta wniesienia wkładu.Moje polecenie jest oparte na przykładzie 13 z dokumentów Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Oto podział jednej linijki, abyś mógł ją łatwiej dostosować do swoich potrzeb:
While(1) {
po prostu zapętla toget-counter '\Process(*)\% Processor Time'
wybiera dane% procesora. Wydaje się, że polecenie to wymaga dużo czasu, więc nie trzebasleep
cls
jasne dla nowego stołusort -des CookedValue
CookedValue to dziedzina, w której jesteśmy intestowani. Sortuj według najwyższychselect -f 15
pokaż pierwsze 15ft -a
wyświetlać w sformatowanej tabeliźródło
Get-Counter
daje „natychmiastowy” procesor zamiast skumulowanego czasu procesoraps
. Lepsze formatowanie :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
Zapewnia ładne nagłówki u góry każdej aktualizacji bez konieczności czyszczenia całej konsoli.
źródło
Nie znam polecenia cmdlet programu PowerShell, które zapewnia tę funkcjonalność. Istnieje bezpłatne zewnętrzne polecenie, które robi to, co chcesz. Spójrz na pslistę Marka Russinovicha z pakietu Sysinternals. Pslist zapewnia listę wykonujących się procesów w konfigurowalnym widoku. „pslist -s” zapewnia rodzaj ciągłej aktualizacji, której potrzebujesz, z domyślną częstotliwością odświeżania raz na sekundę.
Wolę używać Mark GUI Process Explorer, ale pslist jest przydatny do sesji konsolowych.
Strona główna Sysinternals znajduje się tutaj: http://technet.microsoft.com/en-us/sysinternals
Dennis
źródło
To tylko trochę przyjemniejszy sposób, ponieważ za każdym razem możesz zobaczyć nagłówki na górze
źródło
Chciałbym również zaznaczyć, że jeśli chcesz środowisko Linux-a dla systemu Windows, możesz użyć Cygwin. Wprowadza środowisko Linux do systemu Windows. Możesz użyć prawie każdego polecenia. Nie jestem jednak pewien, jak przydatne jest to dla Ciebie.
http://www.cygwin.com/
źródło
Może to również załatwić sprawę:
Funkcja opiera się na
Get-Counter
próbkach i wyświetliProcessId,ProcessName,ProcessorUsage
iWorkingSet
. Ta próbka licznik mógłby być dodatkowo wzmocniona, aby zawieraćUser
,CommandLine
na wyjściu, ale nie wypracowaliśmy jeszcze wydajnych sposób to zrobić.źródło
Ten komentarz od Marka powinien otrzymać więcej rekomendacji, ponieważ robi prawie dokładnie to, co było pytaniem i działa:
(link do komentarza: https://superuser.com/a/770455/989044 )
Powinieneś stworzyć dla niego prosty moduł i umieścić go na github lub dostarczyć mu choco. Myślę, że powinien to być przede wszystkim moduł standardowy, ponieważ jest intensywnie wyszukiwany w google i istnieją różnego rodzaju obejścia, ale żadne z nich nie jest tak eleganckie i bliskie poleceniu linux top.
Przepraszam, że opublikowałem to w ten sposób, ale z powodu obowiązujących tutaj zasad striktu nie można komentować ani robić notatek bez około 50 karmy.
źródło
Aby uruchomić top bezpośrednio z cmd, musisz utworzyć plik% WINDIR% \ top.bat z tym kodem:
źródło
Jeśli chcesz filtrować według procesu, użyj findstr
źródło
Możesz uruchomić monitor zasobów z PowerShell za pomocą:
Zawsze możesz zamknąć aplikację za pomocą Alt + F4, co powinno przywrócić fokus z powrotem do okna PowerShell.
źródło
Możesz spróbować htop-alternatywa dla systemu Windows - NTop
Opcje wiersza poleceń :
Interaktywne polecenia:
Polecenia Vi :
Wstępnie skompilowane pliki binarne można pobrać tutaj
źródło
Zapisz następujące elementy w pliku o nazwie
mytop.ps1
w folderze, który znajduje się wPATH
zmiennej środowiskowej. Następnie użyj jednej z następujących opcji z dowolnej konsoli PowerShell:mytop
- aby użyć domyślnego sortowania według kolumny „Pamięć” i wyświetlić pierwsze 30 wierszy.mytop CPU 50
- sortowanie według kolumny „CPU” i wyświetlanie pierwszych 50 wierszy.While(1) {$p = myTop Memory 50; cls; $p}
- aby odświeżał się co sekundę.mytop.ps1
zawartość:Przykładowe dane wyjściowe:
Dodatkowy kredyt dla:
źródło
Na coś jeszcze należy spojrzeć:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Istnieje narzędzie wiersza polecenia, aby zrzucić wszystkie procesy (i oczywiście Process Monitor lub Process Explorer).
źródło
Użyj poniższego polecenia, aby uzyskać najlepsze wykorzystanie procesora 10, a dane wyjściowe będą odświeżane co 5 sekund
while (1) {ps | Sort-Object -Property cpu -Descending | wybierz -Pierwszy 10; Wyjście Host-Zapis "zostanie odświeżone za 5 sekund
n
n Uchwyty NPM (K) PM (K) WS (K) CPU (s) Id SI ProcessName"; spać - Sekundy 5}źródło