আসুন শিখি কিভাবে PowerShell ব্যবহার করে একটি নির্দিষ্ট অ্যাপ্লিকেশন বা প্রসেস চলছে কিনা চেক করবেন; ক্র্যাশ হলে, ব্যবহারকারী ভুলে বন্ধ করলে, বা এটি বেশি মেমরি ব্যবহার করতে শুরু করলে (মেমরি লিক) কিভাবে অটোমেটিক্যালি রিস্টার্ট করবেন।
আগে আমরা দেখিয়েছিলাম PowerShell ব্যবহার করে উইন্ডোজ প্রসেস ম্যানেজ করা। নোটপ্যাড.এক্সই প্রসেস চলছে কিনা চেক করে রিস্টার্ট করতে নিচের স্ক্রিপ্ট ব্যবহার করতে পারেন:
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 লুপ ব্যবহার করে একটি অসীম লুপ তৈরি করতে পারেন যা একটি প্রসেস শুরু করে, প্রতি ৬০ সেকেন্ড পর পর চেক করে এটি চলছে কিনা, এবং প্রয়োজনে রিস্টার্ট করে:
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;}
এই পাওয়ারশেল স্ক্রিপ্টটি GPO লগঅন স্ক্রিপ্ট হিসেবে ইউজার লগঅন সময় চালাতে পারেন।
তারপর পাওয়ারশেল কোডটি *.PS1 এক্সটেনশন যুক্ত ফাইলে সংরক্ষণ করুন। আপনি স্ক্রিপ্টটি ডিজিটাল সিগনেচার দিয়ে সাইন করতে পারেন, PowerShell Execution policy সেটিংস পরিবর্তন করতে পারেন, বা স্ক্রিপ্টটি –ExecutionPolicy Bypass অপশন দিয়ে চালাতে পারেন।
- ফাইল নাম:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe - চলানোর অপশন:
-windowstyle hidden -ExecutionPolicy Bypass –Noprofile -file %~dp0CheckProcess.ps1
আপনি টাস্ক স্কেডিউলার ব্যবহার করে PS1 স্ক্রিপ্ট শেডিউলে চালাতে পারেন। একই রান অপশন ব্যবহার করুন। আপনি যে ইউজার অ্যাকাউন্ট দিয়ে প্রসেস চালাতে চান সেটিও স্পেসিফাই করতে পারেন।
$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
অথবা আপনি এই পাওয়ারশেল স্ক্রিপ্টটি উইন্ডোজ সার্ভিস হিসেবে চালাতে পারেন।
যদি রানিং অ্যাপ্লিকেশন ইউজারের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন না হয়, তবে এটি সার্ভিস হিসেবে চালানো ভালো। পরে, আপনি স্ট্যান্ডার্ড services.msc কনসোল বা পাওয়ারশেল দিয়ে এটিকে ম্যানেজ করতে পারবেন। উইন্ডোজে সার্ভিস রিস্টার্ট করার বিল্ট-ইন ফিচার আছে, অথবা হ্যাঙ্গ করা সার্ভিসকে এইভাবে রিস্টার্ট করতে পারেন।