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 โดยอัตโนมัติทุกครั้งที่เข้าสู่ระบบ




