विंडोज पॉवर्सशेल के लिए लिनक्स "टॉप" कमांड?


53

मैं एक PowerShell cmdlet की तलाश कर रहा हूं जो लिनक्स टॉप ऐप को समान कार्यक्षमता प्रदान कर सके। कुछ दिए गए अंतराल पर कुछ ताज़ा होता है और सीपीयू% उपयोग के साथ प्रक्रिया सूची प्रदर्शित करता है।

मैंने उन लिपियों की सूची देखी है जो CPU% उपयोग को लूप में सूचीबद्ध करती हैं, लेकिन शीर्ष जैसा कुछ अधिक उपयोगी होगा क्योंकि हमारे पास प्रबंधन के लिए सेटअप SSH / Powershell एक्सेस है (मैं अभी भी एक पोटीन शेल पसंद करता हूं!)


यह चौकोर रूप से गिरता है superuser.com सवालों की श्रेणी।

कूल-डिडंट का एहसास है कि साइट भी मौजूद थी! (मैं मुख्य रूप से एक C # डेवलपर हूं)

2
प्रोसेस ऑब्जेक्ट पर CPU गुण CPU प्रतिशत नहीं है यह प्रक्रिया प्रारंभ होने के बाद से CPU समय है।

जवाबों:


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

यह एक सरल एक लाइनर है जो लेबल को शीर्ष पर भी रखेगा।

यह काम करता है क्योंकि बिना किसी पैरामीटर के तालिका को स्वरूपित करना केवल डिफ़ॉल्ट तालिका को आकर्षित करता है। स्वतः चौड़ाई का उपयोग कॉलम की चौड़ाई को स्वचालित रूप से समायोजित करने के लिए किया जाता है ताकि सभी डेटा स्क्रीन पर फिट हो सकें।

यहाँ उपयोग किए गए छोटे आदेशों का टूटना है

  • select -f एक शॉर्टकट है -first के लिए
  • ft, Format-Table का शॉर्टकट है
  • -a एक शॉर्टकट है -ऑटोसाइज़
  • सेकंड का उपयोग करने के लिए नींद की कमी

1
CPU में ps % CPU नहीं, कुल उपयोग के सेकंड की संख्या है। तो यह इतना उपयोगी नहीं है।
Artyom

23

ऐसा कुछ भी नहीं है जो मुझे एकल cmdlet रूप में पता है, लेकिन जैसा कि आप कहते हैं, लिपियों को शीर्ष पर अनुकरण करने के लिए लिखना आसान है।

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

पास पर्याप्त - मैं इसे यहाँ से ... अच्छी तरह से किया जा सकता है! (मैं एक सी # डेवलपर हूं, लेकिन हमारे सर्वर भी प्रबंधित करें - इसलिए पावरशेल कर्व ...)

यदि आप और अधिक सीखना चाहते हैं - उदाहरण के लिए - www.poshcode.org देखें
x0n

@TimAtVenturality - आप स्क्रिप्ट को एक फ़ंक्शन के रूप में मापदंडों के साथ लपेट सकते हैं जो शीर्ष को अधिक बारीकी से दोहराता है।
Joe Internet

12

दूसरों के समान एक समान समाधान, लेकिन गेट-प्रक्रिया के बजाय गेट-काउंटर का उपयोग करना।

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

नमूना उत्पादन:

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

मैंने प्रक्रिया शुरू होने के बाद से कुल सीपीयू समय का उपयोग करते हुए अधिकांश अन्य समाधान यहां प्राप्त किए। यह मेरे सर्वर पर उपयोगी नहीं था जो 24/7 रहता है जहां शीर्ष परिणाम हमेशा बस था svchost तथा system लाखों सेकंड में। सत्य़ top या टास्क मैनेजर समतुल्य कुछ निश्चित समय में हाल ही में दर्ज सीपीयू उपयोग का एक स्नैपशॉट देगा और गेट-काउंटर प्रदान करता है। चूंकि यह सुपरसुअर पोस्ट अभी भी "पावरशेल टॉप" के लिए शीर्ष Google परिणाम है, मुझे लगा कि यह विकल्प योगदान देने योग्य है।

मेरा आदेश गेट-काउंटर डॉक्स से उदाहरण 13 पर आधारित है: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Diagnostics/Get-Counter
यहां एक-लाइनर का टूटना है ताकि आप इसे आसानी से अपनी आवश्यकताओं में बदल सकें:

  • While(1) { बस यह छोरों
  • get-counter '\Process(*)\% Processor Time' CPU% डेटा का चयन करता है। इस कमांड को वापस लौटने में काफी समय लगता है, इसलिए इसकी कोई आवश्यकता नहीं है sleep
  • cls नई तालिका के लिए स्पष्ट है
  • sort -des CookedValue CookedValue वह क्षेत्र है जिसमें आप रुचि रखते हैं, शीर्ष पर सबसे बड़ा डालने के लिए
  • select -f 15 पहले 15 प्रदर्शित करें
  • ft -a स्वरूपित तालिका में प्रदर्शित करें

2
यह सबसे अच्छा जवाब है: Get-Counter आपको "तात्कालिक" CPU देता है, बजाय संचयी CPU समय से ps बेहतर स्वरूपण : 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
pjhsea

6

पूरे कंसोल को खाली करने की आवश्यकता के बिना हर अपडेट के साथ शीर्ष पर अच्छी हेडिंग प्रदान करता है।

$saveY = [console]::CursorTop
$saveX = [console]::CursorLeft      

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

5

मैं PowerShell cmdlet के बारे में नहीं जानता जो कार्यक्षमता प्रदान करती है। एक फ्रीवेयर एक्सटर्नल कमांड होता है जो आपको चाहिए होता है। मार्क रोसिनोविच को देखें pslist Sysinternals सुइट से। Pslist एक विन्यास दृश्य में निष्पादन प्रक्रियाओं की एक सूची प्रदान करता है। "pslist -s" एक बार प्रति सेकंड की डिफ़ॉल्ट रिफ्रेश दर के साथ आपको निरंतर अपडेट का प्रकार प्रदान करता है।

मैं मार्क जीयूआई प्रोसेस एक्सप्लोरर का उपयोग करना पसंद करता हूं, लेकिन कंसोल सत्र के लिए साइटलस आसान है।

Sysinternals मुख पृष्ठ यहाँ है: http://technet.microsoft.com/en-us/sysinternals

डेनिस


2
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 "-------  ------    -----      ----- -----   ------     -- -----------"}

यह सिर्फ एक अच्छा तरीका है, जैसा कि आप शीर्षकों को हर बार शीर्ष पर देखते हैं


1

इसके अलावा, मैं यह बताना चाहता हूं कि अगर आप विंडोज के लिए लिनक्स जैसा एनवायरमेंट चाहते हैं तो आप साइगविन का उपयोग कर सकते हैं। यह विंडोज में लिनक्स एनवायरमेंट लाता है। आप लगभग हर कमांड का उपयोग कर सकते हैं। हालांकि यह आपके लिए कितना उपयोगी है, यह सुनिश्चित नहीं है।

http://www.cygwin.com/


1

यह भी कर सकता है चाल:

function htopish {
  Param (
    [Parameter(Position=1)] [Alias("l")]
    [int]$TotalList=24,
    [Parameter(Position=2)] [Alias("r")]
    [int]$Invertal=1
  )
  Begin {}
  Process {
    While ($true) {
      $CounterSamples = Get-Counter '\Process(*)\ID Process','\Process(*)\% Processor Time','\Process(*)\Working Set' | Select-Object -Expand CounterSamples
      Clear-Host
      $CounterSamples | Group-Object { Split-Path $_.Path } | Where-Object {$_.Group[1].InstanceName -notmatch "^Idle|_Total|System$"} | Sort-Object -Property {$_.Group[1].CookedValue} -Descending | Select-Object -First $TotalList | Format-Table @{Name="ProcessId";Expression={$_.Group[0].CookedValue}},@{Name="ProcessorUsage";Expression={[System.Math]::Round($_.Group[1].CookedValue/100/$env:NUMBER_OF_PROCESSORS,4)}},@{Name="ProcessName";Expression={$_.Group[1].InstanceName}},@{Name="WorkingSet";Expression={[System.Math]::Round($_.Group[2].CookedValue/1MB,4)}}
      Sleep -Seconds $Invertal
    }
  }
  End {}
}

फ़ंक्शन पर निर्भर करता है Get-Counter नमूने और उत्पादन होगा ProcessId,ProcessName,ProcessorUsage तथा WorkingSet। इस काउंटर नमूने को शामिल करने के लिए और बढ़ाया जा सकता है User, CommandLine आउटपुट में, लेकिन मैंने ऐसा करने के लिए अभी तक कोई अच्छा तरीका नहीं निकाला है।


0

Cmd से सीधे रन करने के लिए आपको इस कोड के साथ फ़ाइल% WINDIR% \ top.bat बनाना होगा:

@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}}"

0

यदि आप प्रक्रिया द्वारा फ़िल्टर करना चाहते हैं, तो खोज का उपयोग करें

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

0

आप पॉवरशेल से संसाधन मॉनिटर लॉन्च करना चाहते हैं:

PS C:\>resmon

आप हमेशा Alt + F4 के साथ एप्लिकेशन को बंद कर सकते हैं और इसे फ़ोकसशेल विंडो पर वापस स्विच करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.