ค้นหาเว็บไซต์

PowerShell: วิธีรีสตาร์ทแอปพลิเคชันโดยอัตโนมัติเมื่อปิด


หากคุณต้องการให้แอปพลิเคชันเริ่มต้นและพร้อมใช้งานอยู่เสมอ บทความนี้เหมาะสำหรับคุณ บางครั้งแอปพลิเคชันถูกปิดโดยผู้ใช้โดยไม่ได้ตั้งใจ บทความนี้แสดงสถานการณ์ทีละขั้นตอนวิธีกำหนดค่างานที่กำหนดเวลาไว้เพื่อดูสถานะของแอปพลิเคชันของคุณ

ข้อกำหนดเบื้องต้น

เราจะใช้ PowerShell แบบสามอินเนอร์ สำหรับการดำเนินการไฟล์สคริปต์ PowerShell เราต้องดูนโยบายการดำเนินการของ PowerShell ตรวจสอบให้แน่ใจว่าการตั้งค่านโยบายได้รับการกำหนดค่าให้เป็นการลงนามระยะไกล (แนะนำ) หรือไม่จำกัด

Get-ExecutionPolicy

หากคุณเห็นถูกจำกัด ให้เรียกใช้

Set-ExecutionPolicy remotesigned -Force

สคริปต์ PowerShell สำหรับตรวจสอบสถานะของแอปพลิเคชัน (เริ่มต้น/ยังไม่เริ่ม)

เปิด PowerShell ISE (พิมพ์ ise ใน PowerShell) คัดลอกโค้ดลงในเซสชัน ISE ของคุณ

If (!(Get-Process -Name notepad.exe -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}

เรามาอยู่ที่นี่เพื่อดูคำอธิบายสั้น ๆ If Statement ตรวจสอบว่า notepad.exe กำลังทำงานอยู่หรือไม่ ! ที่จุดเริ่มต้นของคำสั่งคือคำสั่ง NOT เฉพาะในกรณีที่แผ่นจดบันทึกไม่ทำงาน Inเรียกใช้-Item จะเริ่มแผ่นจดบันทึกอีกครั้ง

บันทึกสคริปต์ ฉันชื่อมันว่า notepad.ps1

ตอนนี้เราสามารถเดินหน้าต่อไปและวางสคริปต์ไว้ในงานที่กำหนดเวลาไว้ได้ น่าเสียดายที่ฉันต้องบอกคุณว่านี่ไม่ใช่ความคิดที่ดี ทำไม PowerShell จะปรากฏขึ้นทุกครั้งที่สคริปต์ทำงาน นั่นน่ารำคาญ ข่าวดี: ฉันมีวิธีแก้ไขสำหรับเรื่องนั้น เราเรียกสคริปต์ PowerShell จากสคริปต์ VB!

การสร้างสคริปต์ VB

เปิดสมุดบันทึก พิมพ์ข้อความต่อไปนี้:

command = "powershell.exe -nologo -command C:\Temp\notepad.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0

การกำหนดค่างานที่กำหนดเวลาไว้ให้ทำงานทุกๆ 60 วินาที

เปิด PowerShell ISE ขั้นแรก ให้พิจารณาว่าคุณต้องการสร้างงานให้ผู้ใช้รายใด ในตัวอย่างโค้ดต่อไปนี้ งานจะถูกกำหนดค่าสำหรับบัญชีผู้ใช้ภายในเครื่อง patrick ให้ความสนใจกับเส้นทางของสคริปต์ VB ของคุณ (บรรทัดที่ 1):

$Action=New-ScheduledTaskAction -Execute "C:\Temp\notepad.vbs"
$Trigger=New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1)
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId "patrick" -LogonType Interactive
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal
Register-ScheduledTask -TaskName "Start Notepad" -InputObject $Task

เมื่อ Patrick เข้าสู่ระบบและหาก Notepad ไม่ได้เริ่มทำงาน งานก็จะเริ่มต้นขึ้น ที่เกิดขึ้นทุกๆ 60 วินาที ไม่รองรับการกำหนดค่าที่น้อยกว่า 1 นาที

ไม่มีความเจ็บปวดไม่ได้รับ

จบเรื่อง.

การเขียนสคริปต์งานที่กำหนดเวลาไว้นั้นเป็นฝันร้าย ฉันพิมพ์ผิดและมีข้อผิดพลาดเชิงตรรกะ และหาไม่พบนานกว่าหนึ่งชั่วโมง ไม่มีความเจ็บปวดไม่ได้รับ ?

ไม่ต้องกังวล. ทั้งหมดข้างต้นใช้งานได้ ขอให้สนุกกับมัน!

ความคิดเพิ่มเติม

หากคุณชอบงานที่กำหนดเวลาไว้และ PowerShell โปรดดูบทความของฉัน

วิธีกำหนดเวลาการติดตั้งซอฟต์แวร์ด้วย PowerShell

การกำหนดค่าการเริ่มต้น PowerShell โดยอัตโนมัติทุกครั้งที่เข้าสู่ระบบ

บทความที่เกี่ยวข้อง