มาเรียนรู้วิธีใช้ PowerShell เพื่อตรวจสอบว่าแอปพลิเคชั่นหรือกระบวนการใดกำลังทำงานอยู่หรือไม่ วิธีการรีสตาร์ทอัตโนมัติในกรณีที่เกิดปัญหา หากผู้ใช้ปิดโดยไม่ได้ตั้งใจ หรือเริ่มใช้หน่วยความจำจำนวนมาก (หน่วยความจำรั่ว)
ก่อนหน้านี้ เราได้แสดงวิธีจัดการกระบวนการของ Windows โดยใช้ PowerShell เพื่อให้แน่ใจว่ากระบวนการ notepad.exe กำลังทำงานและเริ่มต้นใหม่ คุณสามารถใช้สคริปต์ด้านล่าง:
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}
คุณสามารถเริ่มกระบวนการใหม่โดยอัตโนมัติได้หากไม่ตอบสนอง (หยุดทำงาน) หรือหากเริ่มใช้หน่วยความจำมากเกินไป (ในตัวอย่างนี้มากกว่า 1,000 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 cmdlet:
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 มีคุณสมบัติในตัวเพื่อเริ่มบริการใหม่ หรือคุณสามารถเริ่มบริการที่วางสายได้ดังนี้