आइए सीखें कि PowerShell का उपयोग करके कैसे चेक करें कि कोई विशिष्ट एप्लिकेशन या प्रोसेस चल रहा है या नहीं; क्रैश होने पर, यदि यूजर ने गलती से इसे बंद कर दिया, या यह बड़ी मात्रा में मेमोरी उपयोग करने लगा (मेमोरी लीक) तो इसे ऑटोमैटिकली कैसे रीस्टार्ट करें।
इससे पहले हमने दिखाया था कि PowerShell का उपयोग करके Windows प्रोसेस कैसे मैनेज करें। यह सुनिश्चित करने के लिए कि notepad.exe प्रोसेस चल रहा है और इसे रीस्टार्ट करने के लिए, आप नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं:
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}
आप प्रोसेस को ऑटोमैटिकली रीस्टार्ट कर सकते हैं यदि यह रिस्पॉन्ड नहीं कर रहा (हैंग हो रहा) या यदि इसने बहुत अधिक मेमोरी उपयोग करना शुरू कर दिया (इस उदाहरण में 1000 MB से अधिक):
$proc = Get-Process -Name notepad | Sort-Object -Property ProcessName -Unique
If (($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 1000000*1024)) {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe
}
PowerShell for लूप का उपयोग करके, आप एक अंतहीन लूप बना सकते हैं जो एक प्रोसेस शुरू करता है, हर 60 सेकंड में चेक करता है कि यह चल रहा है या नहीं, और यदि आवश्यक हो तो इसे रीस्टार्ट करता है:
for(;;){
try{
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe}
$proc = Get-Process -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
If (!$proc -or ($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 200000*1024)) {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:\Windows\notepad.exe}
}
catch { }
Start-sleep -s 60
}
यदि आप रिमोट कंप्यूटर पर प्रोसेस की स्थिति चेक करना चाहते हैं, तो आप इस कमांड का उपयोग कर सकते हैं:
$proc = Get-Process -ComputerName WKS-NYC211 -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
रिमोटली प्रोसेस शुरू करने के लिए, आप Invoke-Command कमांडलेट का उपयोग कर सकते हैं:
Invoke-Command -ComputerName WKS-NYC211 -Credential $Cred -ScriptBlock {Start-Process C:\Windows\notepad.exe -wait -verb runas;}
आप इस PowerShell स्क्रिप्ट को यूजर लॉगऑन पर GPO लॉगऑन स्क्रिप्ट के रूप में चला सकते हैं।
फिर PowerShell कोड को *.PS1 एक्सटेंशन वाली फाइल में सेव करें। आप स्क्रिप्ट को डिजिटल सिग्नेचर से साइन कर सकते हैं, PowerShell Execution पॉलिसी सेटिंग्स बदल सकते हैं, या स्क्रिप्ट को –ExecutionPolicy Bypass ऑप्शन के साथ चला सकते हैं।
- फाइल नाम:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe - चलाने के विकल्प:
-windowstyle hidden -ExecutionPolicy Bypass –Noprofile -file %~dp0CheckProcess.ps1
आप PS1 स्क्रिप्ट को Task Scheduler का उपयोग करके शेड्यूल पर भी चला सकते हैं। वही रन विकल्प उपयोग करें। आप उस यूजर अकाउंट को भी स्पेसिफाई कर सकते हैं जिसके तहत आप प्रोसेस चलाना चाहते हैं।
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-windowstyle hidden -ExecutionPolicy Bypass -file %windir%\CheckProcess.ps1"
$Trigger = New-ScheduledTaskTrigger -AtLogon
$Principal = New-ScheduledTaskPrincipal -UserId "jsmith" -LogonType Interactive
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Principal $Principal
Register-ScheduledTask -TaskName "Check Notepad Process" -InputObject $Task
या आप इस PowerShell स्क्रिप्ट को Windows सर्विस के रूप में चला सकते हैं।
यदि चल रहा ऐप यूजर के साथ इंटरैक्ट करने की आवश्यकता नहीं रखता, तो इसे सर्विस के रूप में चलाना बेहतर है। बाद में, आप इसे मानक services.msc कंसोल या PowerShell के माध्यम से मैनेज कर पाएंगे। Windows में सर्विस रीस्टार्ट करने की बिल्ट-इन सुविधा है, या आप हैंग सर्विस को इस तरह रीस्टार्ट कर सकते हैं।