Saya mencari cmdlet PowerShell yang dapat memberikan fungsionalitas yang mirip dengan aplikasi Linux Top. Sesuatu yang menyegarkan pada suatu interval tertentu dan menampilkan daftar proses dengan util CPU%.
Saya telah melihat skrip yang mencantumkan utilisasi CPU% dalam satu lingkaran tetapi sesuatu seperti top akan jauh lebih berguna karena kami telah menyiapkan akses SSH / Powershell untuk manajemen (saya masih lebih suka dempul shell!)
Jawaban:
Ini adalah liner sederhana yang juga akan menjaga label di atas.
Ini berfungsi karena memformat tabel tanpa parameter apa pun hanya menggambar tabel default. autosize digunakan untuk secara otomatis menyesuaikan lebar kolom sehingga semua data dapat masuk ke layar.
Berikut ini adalah rincian dari perintah singkat yang digunakan
sumber
CPU
inps
adalah jumlah detik total penggunaan, bukan% CPU. Jadi ini tidak begitu berguna.Tidak ada yang saya ketahui tentang itu dalam bentuk cmdlet tunggal, tetapi seperti yang Anda katakan, skrip mudah ditulis untuk ditiru.
sumber
Solusi serupa dengan yang lain, tetapi menggunakan Get-Counter dan bukan Get-Process.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}
Output sampel:
Saya menemukan sebagian besar solusi lain di sini menggunakan get-proses melaporkan total waktu CPU sejak awal proses. Itu tidak berguna di server saya yang bertahan 24/7 di mana hasil teratas selalu adil
svchost
dansystem
dalam jutaan detik.top
Setara dengan benar atau Task Manager akan memberikan snapshot dari penggunaan CPU yang direkam baru-baru ini selama beberapa waktu tetap dan Get-Counter menyediakannya. Karena posting Superuser ini masih merupakan hasil Google teratas untuk "powershell top", saya pikir alternatif ini layak untuk dikontribusikan.Perintah saya didasarkan pada contoh 13 dari dokumen Get-Counter: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter .
Berikut ini rincian dari satu-baris sehingga Anda dapat lebih mudah memodifikasinya sesuai kebutuhan Anda:
While(1) {
hanya loop ituget-counter '\Process(*)\% Processor Time'
memilih data CPU%. Perintah ini tampaknya membutuhkan banyak waktu untuk kembali, jadi tidak perlusleep
cls
jelas untuk tabel barusort -des CookedValue
CookedValue adalah bidang yang kami minati, semacam untuk menempatkan yang terbesar di atasselect -f 15
tampilkan dulu 15ft -a
tampilan dalam tabel yang diformatsumber
Get-Counter
memberi Anda CPU "instan", daripada waktu kumulatif CPU darips
. Format yang lebih baik :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
Memberikan judul yang bagus di bagian atas dengan setiap pembaruan tanpa harus menghapus seluruh konsol.
sumber
Saya tidak mengetahui cmdlet PowerShell yang menyediakan fungsionalitas. Ada perintah eksternal freeware yang berfungsi sesuai keinginan Anda. Lihatlah Mark Russinovich ini pslist dari Sysinternals suite. Pslist menyediakan daftar proses eksekusi dalam tampilan yang dapat dikonfigurasi. "pslist -s" menyediakan jenis pembaruan berkelanjutan yang Anda inginkan, dengan kecepatan pembaruan default satu kali per detik.
Saya lebih suka menggunakan Mark's GUI Process Explorer, tetapi pslist berguna untuk sesi konsol.
Halaman utama Sysinternals ada di sini: http://technet.microsoft.com/en-us/sysinternals
Dennis
sumber
Ini hanya cara yang sedikit lebih baik, karena Anda bisa melihat judul di bagian atas setiap kali
sumber
Juga, saya ingin menunjukkan bahwa jika Anda ingin lingkungan seperti linux untuk Windows Anda dapat menggunakan Cygwin. Ini membawa Lingkungan Linux ke Windows. Anda dapat menggunakan hampir setiap perintah. Tidak yakin seberapa bermanfaat ini bagi Anda.
http://www.cygwin.com/
sumber
Ini juga dapat melakukan trik:
Fungsi ini bergantung pada
Get-Counter
sampel dan akan menampilkanProcessId,ProcessName,ProcessorUsage
danWorkingSet
. Sampel pencacah ini selanjutnya dapat ditingkatkan untuk menyertakanUser
,CommandLine
dalam output tetapi saya belum menemukan cara yang tepat untuk melakukannya.sumber
Komentar dari Markus ini harus mendapatkan lebih banyak rekomendasi, karena hampir persis seperti apa pertanyaannya dan berhasil:
(tautan ke komentar: https://superuser.com/a/770455/989044 )
Anda harus membuat modul sederhana untuk itu dan meng-host di github atau menyediakannya dengan choco. Saya pikir itu harus menjadi modul standar di tempat pertama, karena itu banyak dicari di google dan ada semua jenis solusi tetapi tidak satupun dari mereka yang begitu elegan dan dekat dengan perintah top linux.
Maaf karena memposting seperti ini, tetapi karena aturan ketat di sini, mustahil untuk berkomentar atau membuat catatan tanpa 50 karma atau lebih.
sumber
Untuk menjalankan teratas langsung dari cmd, Anda harus membuat file% WINDIR% \ top.bat dengan kode ini:
sumber
Jika Anda ingin memfilter berdasarkan proses, gunakan findstr
sumber
Anda mungkin ingin meluncurkan monitor sumber daya dari PowerShell dengan:
Anda selalu dapat menutup aplikasi dengan Alt + F4 dan yang seharusnya mengalihkan fokus kembali ke jendela PowerShell.
sumber
Anda dapat mencoba htop-alternative untuk windows - NTop
Opsi baris perintah :
Perintah interaktif:
Perintah vi :
Binari yang dikompilasi dapat diunduh di sini
sumber
Simpan yang berikut dalam file yang disebut
mytop.ps1
dalam folder yang ada diPATH
variabel lingkungan Anda . Kemudian gunakan salah satu dari yang berikut ini dari konsol PowerShell:mytop
- untuk menggunakan pengurutan standar berdasarkan kolom 'Memori' dan tampilkan 30 baris pertama.mytop CPU 50
- untuk mengurutkan berdasarkan kolom 'CPU' dan menunjukkan 50 baris pertama.While(1) {$p = myTop Memory 50; cls; $p}
- untuk menyegarkan setiap detik.mytop.ps1
isi:Contoh output:
Kredit tambahan untuk:
sumber
Sesuatu yang lain untuk dilihat adalah:
https://docs.microsoft.com/en-us/sysinternals/downloads/process-utilities
Ada alat baris perintah untuk membuang semua proses (dan tentu saja Proses Monitor atau Process Explorer).
sumber
Gunakan perintah di bawah ini yang akan memberi Anda 10 utilisasi CPU dan output akan disegarkan setiap 5 detik
while (1) {ps | Sortir-Objek -Properti cpu -Turunkan | pilih -Pertama 10; Tulis-Host "output akan di-refresh dalam 5 detik
n
n Menangani NPM (K) PM (K) WS (K) CPU (s) Id SI ProcessName"; tidur -Kedua 5}sumber