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).
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.
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).
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.