একটি নির্দিষ্ট অ্যাপ্লিকেশন বা প্রক্রিয়া চলছে কিনা তা পরীক্ষা করার জন্য পাওয়ারশেল কীভাবে ব্যবহার করবেন তা শিখুন; ক্র্যাশের ক্ষেত্রে কীভাবে এটি স্বয়ংক্রিয়ভাবে পুনরায় চালু করবেন, যদি কোনও ব্যবহারকারী দুর্ঘটনাক্রমে এটি বন্ধ করে দেয়, বা এটি প্রচুর পরিমাণে মেমরি গ্রাস করতে শুরু করে (মেমরি লিক)।
আগে আমরা দেখিয়েছিলাম কিভাবে PowerShell ব্যবহার করে উইন্ডোজ প্রসেস পরিচালনা করতে হয়। notepad.exe প্রক্রিয়া চলছে কিনা তা নিশ্চিত করতে এবং এটি পুনরায় চালু করতে, আপনি নীচের স্ক্রিপ্টটি ব্যবহার করতে পারেন:
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}
আপনি স্বয়ংক্রিয়ভাবে একটি প্রক্রিয়া পুনরায় চালু করতে পারেন যদি এটি সাড়া না দেয় (ঝুলে থাকে) বা যদি এটি খুব বেশি মেমরি ব্যবহার করতে শুরু করে (এই উদাহরণে 1000 এমবি এর বেশি):
$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
}
পাওয়ারশেল 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 cmdlet ব্যবহার করতে পারেন:
Invoke-Command -ComputerName WKS-NYC211 -Credential $Cred -ScriptBlock {Start-Process C:\Windows\notepad.exe -wait -verb runas;}
আপনি এই PowerShell স্ক্রিপ্টটিকে ব্যবহারকারী লগঅনে একটি GPO লগন স্ক্রিপ্ট হিসাবে চালাতে পারেন।
তারপর PowerShell কোডটি *.PS1 এক্সটেনশন সহ একটি ফাইলে সংরক্ষণ করুন। আপনি একটি ডিজিটাল স্বাক্ষর সহ স্ক্রিপ্টে স্বাক্ষর করতে পারেন, PowerShell এক্সিকিউশন নীতি সেটিংস পরিবর্তন করতে পারেন, অথবা –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
অথবা আপনি এই PowerShell স্ক্রিপ্টটিকে একটি Windows পরিষেবা হিসাবে চালাতে পারেন৷
৷ চলমান অ্যাপটিকে ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন না হলে, এটি একটি পরিষেবা হিসাবে চালানো ভাল। পরে, আপনি স্ট্যান্ডার্ডservices.msc
এর মাধ্যমে এটি পরিচালনা করতে সক্ষম হবেন কনসোল বা PowerShell এর সাথে। পরিষেবাগুলি পুনরায় চালু করার জন্য উইন্ডোজের একটি অন্তর্নির্মিত বৈশিষ্ট্য রয়েছে, অথবা আপনি নিম্নরূপ একটি হ্যাং আপ পরিষেবা পুনরায় চালু করতে পারেন।