Como posso fazer com que o Agendador de Tarefas “falhe” se uma caixa de diálogo retornar um determinado resultado?

3

Estou trabalhando em um VBScript para fazer uma reinicialização semanal de todas as máquinas em nossa rede. Eu quero executar este script via Task Scheduler. O script é executado às 3:00, mas há uma pequena chance de os usuários ainda estarem na rede naquele momento e eu preciso dar a eles a opção de encerrar a reinicialização. Se eles fizerem isso, gostaria que a reinicialização ocorresse na noite seguinte às 3:00 da manhã. Eu configurei o Agendador de Tarefas para repetir desta forma.

Até agora, tudo bem. O problema é que, se o usuário selecionar "Cancelar" no meu script, o Agendador de Tarefas não verá minha tarefa como falha e não a executará novamente na noite seguinte.

Alguma ideia? Posso passar um código de erro para o agendador de tarefas ou abortar a tarefa via VBScript?

Meu código está abaixo:

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

Aprecie todos os pensamentos.

    
por Roger 21.06.2012 / 17:01

2 respostas

3

Execute o script todas as noites, não apenas uma vez por semana. Primeiro, verifique o tempo de atividade do computador. Se o tempo de atividade for maior que 7 dias, reinicialize o sistema (com a opção de anular).

    
por 21.06.2012 / 17:55
1

Wscript.Quit sem argumento retorna errorlevel "0", que significa "sem erro".

Portanto, especifique um argumento .Quit para causar uma saída com um nível de erro diferente de "0" quando o usuário decidir abortar:

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

EDITAR

Então, como aponta @Indrek, acontece que isso não funciona. Como o Agendador de Tarefas (2008) relata o código de resultado na IU, mas na verdade só considera se a tarefa foi executada ou não, independentemente dos códigos de resultado do script.

The Task Scheduler cannot read the result and the return code of the script. It can only get the task status which is that whether the task has run or not. If the task has run, whatever the result of the task, Task Scheduler will consider that the task is successful.

Origem

    
por 21.06.2012 / 17:25