Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีการรีสตาร์ทแอพ / กระบวนการที่ขัดข้องหรือปิดโดยอัตโนมัติด้วย PowerShell

มาเรียนรู้วิธีใช้ 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
}

วิธีการรีสตาร์ทแอพ / กระบวนการที่ขัดข้องหรือปิดโดยอัตโนมัติด้วย PowerShell

หากคุณต้องการตรวจสอบสถานะของกระบวนการบนคอมพิวเตอร์ระยะไกล คุณสามารถใช้คำสั่งนี้:

$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 มีคุณสมบัติในตัวเพื่อเริ่มบริการใหม่ หรือคุณสามารถเริ่มบริการที่วางสายได้ดังนี้