ฉันจะทำให้ Task Scheduler เป็น“ ล้มเหลว” ได้อย่างไรถ้ากล่องโต้ตอบส่งคืนผลลัพธ์ที่แน่นอน


3

ฉันกำลังทำงานกับ VBScript เพื่อทำการรีบูตเครื่องทุกเครื่องในเครือข่ายของเราทุกสัปดาห์ ฉันต้องการเรียกใช้สคริปต์นี้ผ่าน Task Scheduler สคริปต์ทำงานเวลา 3:00 น. แต่มีโอกาสเล็กน้อยที่ผู้ใช้อาจยังอยู่ในเครือข่ายในเวลานั้นและฉันจำเป็นต้องให้ตัวเลือกแก่พวกเขาในการยุติการรีบูต หากพวกเขาทำเช่นนั้นฉันต้องการให้รีบูตเกิดขึ้นในคืนถัดไปเวลา 3:00 น. ฉันได้ตั้งค่า Task Scheduler ให้ทำซ้ำในลักษณะนี้

จนถึงตอนนี้ดีมาก ปัญหาคือหากผู้ใช้เลือก "ยกเลิก" ในสคริปต์ของฉัน Task Scheduler ไม่เห็นงานของฉันว่าล้มเหลวและจะไม่ทำงานอีกครั้งในคืนถัดไป

ความคิดใด ๆ ฉันสามารถส่งรหัสข้อผิดพลาดไปที่ตัวกำหนดตารางเวลางานหรือยกเลิกงานผ่าน VBScript ได้หรือไม่

รหัสของฉันอยู่ด้านล่าง:

Option Explicit
Dim objShell, intShutdown
Dim strShutdown, strAbort

' -r = restart, -t 600 = 10 minutes, -f = force programs to close
strShutdown = "shutdown.exe -r -t 600 -f"
set objShell = CreateObject("WScript.Shell")
objShell.Run strShutdown, 0, false

'go to sleep so message box appears on top
WScript.Sleep 100

' Input Box to abort shutdown
intShutdown = (MsgBox("Computer will restart in 10 minutes. Do you want to cancel computer     restart?",vbYesNo+vbExclamation+vbApplicationModal,"Cancel Restart"))
If intShutdown = vbYes Then
' Abort Shutdown
strAbort = "shutdown.exe -a"
set objShell = CreateObject("WScript.Shell")
objShell.Run strAbort, 0, false
End if

Wscript.Quit

ขอบคุณสำหรับความคิดใด ๆ


ที่เกี่ยวข้อง: Windows Task Scheduler ใน Win7 จำแนกงานที่ล้มเหลวได้อย่างไร ไม่มีคำตอบที่ยอมรับแม้ว่า ...
Indrek

คำตอบ:


3

เรียกใช้สคริปต์ทุกคืนไม่ใช่แค่สัปดาห์ละครั้ง ก่อนตรวจสอบคอมพิวเตอร์uptime หากสถานะการออนไลน์มากกว่า 7 วันให้รีบูตระบบ (พร้อมตัวเลือกในการยกเลิก)


คำตอบที่ดีนอกกล่อง! เราจะให้มันยิง ขอบคุณ.
Roger

นั่นเป็นการหลอกลวง เราได้เพิ่มเงื่อนไขพิเศษในการออกหากไม่ใช่วันเสาร์หรือวันอาทิตย์เนื่องจากเราต้องการให้สิ่งนี้เกิดขึ้นในช่วงสุดสัปดาห์ แต่นี่คือสิ่งที่เราต้องการ ขอบคุณอีกครั้ง.
Roger

1

Wscript.Quit โดยไม่มีอาร์กิวเมนต์ส่งกลับข้อผิดพลาดระดับ "0" ซึ่งหมายถึง "ไม่มีข้อผิดพลาด"

ดังนั้นให้ระบุอาร์กิวเมนต์. Quit ที่จะทำให้เกิดการออกพร้อมกับ errorlevel อื่นที่ไม่ใช่ "0" เมื่อผู้ใช้เลือกที่จะยกเลิก:

If intShutdown = vbYes Then
  ' Abort Shutdown
  strAbort = "shutdown.exe -a"
  set objShell = CreateObject("WScript.Shell")
  objShell.Run strAbort, 0, false
  Wscript.Quit(666)
Else
  ' Abort Not Requested
  Wscript.Quit
End if

แก้ไข

ดังนั้นเมื่อ @Indrek ชี้ให้เห็นว่าสิ่งนี้ไม่ได้ผล ในฐานะที่เป็น (2008) Task Scheduler รายงานรหัสผลลัพธ์ใน UI แต่จริงๆแล้วจะพิจารณาว่างานรันหรือไม่เท่านั้นโดยไม่คำนึงถึงรหัสผลลัพธ์ของสคริปต์

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

แหล่ง


2
ใช้งานไม่ได้ Task Scheduler จะไม่ดูรหัสออกจากกระบวนการ
Indrek

ดูสิว่าคุณพูดถูก มันรายงานรหัสที่ส่งคืน แต่ไม่พิจารณาถึงความล้มเหลวเพียงเพราะสคริปต์ล้มเหลว เพราะงานยังคงเสร็จ ที่โง่! ฉันจะอัปเดตคำตอบของฉัน
Ƭᴇcʜιᴇ007

นั่นคือสิ่งที่ฉันได้รับในการวิจัยของฉัน ชื่นชมความคิดแม้ว่า
Roger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.