3

Я работаю над 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

Цени любые мысли.

2 ответа2

3

Запускайте скрипт каждую ночь, а не раз в неделю. Сначала проверьте работоспособность компьютера. Если время работы превышает 7 дней, перезагрузите систему (с возможностью отмены).

1

Wscript.Quit без аргументов возвращает errorlevel "0", что означает "no error".

Итак, укажите.Аргумент 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) сообщает о коде результата в пользовательском интерфейсе, но на самом деле учитывает только, была ли задача выполнена или нет, независимо от кодов результата сценария.

Планировщик задач не может прочитать результат и код возврата сценария. Он может получить только статус задачи, независимо от того, была она запущена или нет. Если задание выполнено независимо от результата задания, Планировщик заданий будет считать, что задание выполнено успешно.

Источник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .