如果对话框返回某个结果,如何导致任务计划程序“失败”?

如果对话框返回某个结果,如何导致任务计划程序“失败”?

我正在编写一个 VBScript 来每周重启一次我们网络上的所有机器。我想通过任务计划程序运行此脚本。该脚本在凌晨 3:00 运行,但用户当时可能仍在网络上,我需要让他们选择终止重启。如果他们这样做,我希望重启在第二天晚上 3:00 进行。我已将任务计划程序设置为以这种方式重复。

到目前为止一切顺利。问题是,如果用户在我的脚本中选择“取消”,任务计划程序不会将我的任务视为失败,并且不会在第二天晚上再次运行它。

有什么想法吗?我可以将错误代码传递给任务调度程序或以其他方式通过 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

欢迎提出任何想法。

答案1

每晚运行脚本,而不是每周运行一次。首先,检查计算机正常运行时间。如果正常运行时间超过 7 天,请重新启动系统(可选择中止)。

答案2

不带参数的 Wscript.Quit 将返回错误级别“0”,表示“无错误”。

因此,当用户选择中止时,指定 .Quit 参数以导致以“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) 任务计划程序在 UI 中报告结果代码,但实际上只考虑任务是否运行,而不管脚本结果代码如何。

Task Scheduler 无法读取脚本的结果和返回码,只能获取任务状态,即任务是否运行,如果任务运行,则无论任务结果如何,Task Scheduler 都会认为任务成功。

来源

相关内容