PowerShell में स्थानीय या रिमोट कंप्यूटर पर प्रोसेस मैनेज करने के लिए बहुत सारी विशेषताएं हैं। PowerShell का उपयोग करके, आप चल रहे प्रोसेस की सूची प्राप्त कर सकते हैं, हैंग हुए प्रोसेस को सस्पेंड कर सकते हैं, विंडो टाइटल द्वारा प्रोसेस ढूंढ सकते हैं, नए प्रोसेस को हिडन या इंटरैक्टिव मोड में चला सकते हैं, आदि।
आप Windows 10 में उपलब्ध प्रोसेस मैनेजमेंट कमांडलेट की सूची इस प्रकार प्रदर्शित कर सकते हैं:
Get-Command –Noun Process
- Get-Process — चल रहे Windows प्रोसेस की सूची प्राप्त करें;
- Start-Process — प्रोसेस/प्रोग्राम शुरू करें;
- Stop-Process — प्रोसेस को जबरन रोकें (kill);
- Debug-Process — प्रोसेस डीबग करें;
- Wait-Process — प्रोसेस समाप्त होने तक प्रतीक्षा करें।
Get-Process: चल रहे प्रोसेस की सूची प्राप्त करना
Get-Process कमांडलेट स्थानीय कंप्यूटर पर चल रहे प्रोसेस की सूची प्रदर्शित करता है।
डिफ़ॉल्ट रूप से, चल रहे प्रोसेस की ये प्रॉपर्टी प्रदर्शित होती हैं:
- Handles — इस प्रोसेस द्वारा खोले गए इनपुट-आउटपुट फाइल डिस्क्रिप्टर्स (हैंडल) की संख्या;
- NPM(K) — नॉन-पेज्ड मेमोरी (नॉन-पेज्ड पूल)। यह प्रोसेस डेटा का साइज है (KB में) जिसे कभी डिस्क पर पेज नहीं किया जाता;
- PM(K) — प्रोसेस मेमोरी का साइज जिसे पेज किया जा सकता है;
- WS(K) — प्रोसेस द्वारा उपयोग की जाने वाली फिजिकल मेमोरी का साइज (KB में) (Working Set);
- CPU(s) — प्रोसेस द्वारा उपयोग किया गया CPU समय (सभी CPU पर समय गिना जाता है);
- ID — यूनिक प्रोसेस पहचानकर्ता;
- SI (Session ID) — प्रोसेस सेशन ID है (0 का मतलब सभी सेशन के लिए चल रहा, 1 — पहले लॉग ऑन यूजर के लिए चल रहा, 2 — दूसरे लॉग ऑन यूजर के लिए चल रहा, आदि);
- ProcessName
एकाधिक प्रोसेस की सभी प्रॉपर्टी सूचीबद्ध करने के लिए:
Get-Process cmd,excel,notep* | Format-List *
आप केवल विशिष्ट प्रोसेस प्रॉपर्टी प्रदर्शित कर सकते हैं, उदाहरण के लिए, नाम (ProcessName), प्रारंभ समय (StartTime), प्रोसेस विंडो टाइटल (MainWindowTitle), एक्जीक्यूटेबल फाइल नाम (Path) और डेवलपर नाम (Company):
Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company | ft
GUI के साथ चल रहे यूजर प्रोसेस की सूची प्रदर्शित करने के लिए (बैकग्राउंड और सिस्टम प्रोसेस प्रदर्शित नहीं होंगे):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle
IncludeUserName ऑप्शन का उपयोग करके, आप यूजर नाम (ओनर) प्रदर्शित कर सकते हैं जिसने प्रोसेस शुरू किया है:
Get-Process -Name winword -IncludeUserName
Where-Object का उपयोग करके, आप कुछ मानदंडों के अनुसार प्रोसेस चुन सकते हैं। उदाहरण के लिए, 300 MB से अधिक RAM उपयोग करने वाले सभी प्रोसेस प्रदर्शित करें, उन्हें मेमोरी उपयोग के अनुसार अवरोही क्रम में सॉर्ट करें और KB के बजाय MB में मेमोरी साइज दिखाएं:
Get-Process | where-object {$_.WorkingSet -GT 300000*1024} | select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} | sort "Used RAM(MB)" –Descending
जैसा कि हमने पहले बताया, Get-Process कमांडलेट में CPU पैरामीटर में विशिष्ट प्रोसेस द्वारा उपयोग किया गया प्रोसेसर समय सेकंड में होता है। प्रोसेस द्वारा उपयोग किए गए CPU के प्रतिशत को प्रदर्शित करने के लिए (Task Manager के समान), इस फंक्शन का उपयोग करें:
function Get-CPUUsagePercent
{
$CPUPercent = @{
Name = 'CPUPercent'
Expression = {
$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
}
}
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
}
Get-CPUUsagePercent
हैंग प्रोसेस (जो रिस्पॉन्ड नहीं कर रहे) खोजने के लिए, निम्न कमांड चलाएं:
Get-Process | where-object {$_.Responding -eq $false}
Start-Process, Stop-Process: PowerShell से प्रोसेस कैसे शुरू या रोकें
PowerShell का उपयोग करके नया प्रोसेस शुरू करने के लिए यह कमांड उपयोग की जाती है:
Start-Process -FilePath notepad
यदि $env:path एनवायरनमेंट वेरिएबल में कोई एक्जीक्यूटेबल फाइल नहीं है, तो फाइल का पूरा पथ स्पेसिफाई करें:
Start-Process -FilePath 'C:\distr\app.exe'
आप प्रोग्राम चला सकते हैं और उसमें आर्गुमेंट पास कर सकते हैं:
Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"
WindowStyle ऑप्शन का उपयोग करके, आप प्रोसेस विंडो स्टार्ट मोड सेट कर सकते हैं (नॉर्मल, मिनिमाइज्ड, मैक्सिमाइज्ड, हिडन)। उदाहरण के लिए, प्रोग्राम को मैक्सिमाइज्ड विंडो में चलाने और प्रोसेस खत्म होने तक प्रतीक्षा करने के लिए, यह कमांड चलाएं:
Start-Process -FilePath tracert -ArgumentList "10.1.56.21" –wait -windowstyle Maximized
Stop-Process कमांडलेट का उपयोग करके, आप किसी भी प्रोसेस को रोक सकते हैं। उदाहरण के लिए, चल रहे सभी notepad प्रोसेस को बंद करने के लिए:
Stop-Process -Name notepad
डिफ़ॉल्ट रूप से, आपको प्रोसेस किल करने की पुष्टि करने के लिए नहीं कहा जाता। निर्दिष्ट मानदंडों को पूरा करने वाले सभी प्रोसेस रोक दिए जाएंगे। प्रोसेस रोकने की पुष्टि करने में सक्षम होने के लिए, –Confirm ऑप्शन जोड़ें:
Stop-Process -Name notepad.exe -Confirm
आप प्रोसेस को इस तरह भी किल कर सकते हैं:
(Get-Process -Name cmd).Kill()
PowerShell से, आप उन सभी ऐप्स को जबरन रोक सकते हैं जो Windows Process Manager को रिस्पॉन्ड नहीं कर रहे:
Get-Process | where-object {$_.Responding -eq $false} | Stop-Process
PowerShell का उपयोग करके, आप हैंग या बंद प्रोसेस को ऑटोमैटिकली रीस्टार्ट कर सकते हैं।
PowerShell का उपयोग करके रिमोट कंप्यूटर पर प्रोसेस मैनेज करें
Get-Process कमांडलेट के ComputerName ऑप्शन का उपयोग करके आप रिमोट कंप्यूटर पर प्रोसेस मैनेज कर सकते हैं (WinRM इनेबल और कॉन्फिगर्ड होना चाहिए)।
Get-Process -ComputerName srv01, srv02, srv03 | Format-Table -Property ProcessName, ID, MachineName
हम रिमोट कंप्यूटर पर प्रोसेस मैनेज करने के लिए Get-Process की बिल्ट-इन सुविधाओं से निपटते हैं। Invoke-Command और Enter-PSSession कमांडलेट में उपलब्ध PowerShell Remoting फीचर यहां कवर नहीं किए गए हैं।
यदि आप रिमोट कंप्यूटर पर प्रोसेस किल करना चाहते हैं, तो ध्यान दें कि Stop-Process कमांडलेट में –ComputerName पैरामीटर नहीं है। रिमोट कंप्यूटर पर प्रोसेस रोकने के लिए, आप निम्न PowerShell कोड का उपयोग कर सकते हैं:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess