Jak mogę spowodować, że Harmonogram zadań „zawiedzie”, jeśli okno dialogowe zwróci określony wynik?

3

Pracuję nad VBScript, aby co tydzień uruchamiać ponownie wszystkie maszyny w naszej sieci. Chcę uruchomić ten skrypt za pomocą Harmonogramu zadań. Skrypt działa o 3:00 rano, ale istnieje niewielka szansa, że ​​użytkownicy mogą być w tym czasie w sieci, i muszę dać im możliwość zakończenia ponownego uruchamiania. Jeśli to zrobią, chciałbym, aby ponowne uruchomienie nastąpiło następnej nocy o 3:00 rano. Ustawiłem Harmonogram zadań, aby powtarzał się w ten sposób.

Jak na razie dobrze. Problem polega na tym, że jeśli użytkownik wybierze opcję „Anuluj” w moim skrypcie, Harmonogram zadań nie zobaczy mojego zadania jako zakończonego niepowodzeniem i nie uruchomi go ponownie następnego dnia.

Jakieś pomysły? Czy mogę przekazać kod błędu do harmonogramu zadań lub w inny sposób przerwać zadanie za pomocą VBScript?

Mój kod jest poniżej:

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

Doceń wszelkie myśli.

zrozumiałem
źródło
Powiązane: W jaki sposób Harmonogram zadań systemu Windows w Win7 rozpoznaje nieudane zadanie? Nie przyjęto jednak odpowiedzi ...
Indrek

Odpowiedzi:

3

Uruchom skrypt co noc, nie tylko raz w tygodniu. Najpierw sprawdź czas pracy komputera . Jeśli czas pracy jest dłuższy niż 7 dni, uruchom ponownie system (z opcją przerwania).

jftuga
źródło
Świetna odpowiedź od razu po wyjęciu z pudełka! Damy temu szansę. Dziękuję Ci.
Roger
To załatwiło sprawę. Dodaliśmy dodatkowy warunek wyjścia, jeśli nie jest to sobota lub niedziela, ponieważ chcemy, aby stało się to tylko w weekend, ale tego właśnie potrzebowaliśmy. Dzięki jeszcze raz.
Roger
1

Wscript.Quit bez argumentu zwraca poziom błędu „0”, co oznacza „brak błędu”.

Podaj argument .Quit, aby spowodować wyjście z poziomem błędu innym niż „0”, gdy użytkownik zdecyduje się przerwać:

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

EDYTOWAĆ

Jak wskazuje @Indrek, okazuje się, że to nie zadziała. Ponieważ Harmonogram zadań (2008) zgłasza kod wynikowy w interfejsie użytkownika, ale w rzeczywistości bierze pod uwagę tylko to, czy zadanie zostało uruchomione, czy nie, niezależnie od kodów wynikowych skryptu.

Harmonogram zadań nie może odczytać wyniku i kodu powrotu skryptu. Może uzyskać tylko status zadania, czyli to, czy zadanie zostało uruchomione, czy nie. Jeśli zadanie zostało uruchomione, bez względu na wynik zadania, Harmonogram zadań uzna, że ​​zadanie się powiodło.

Źródło

Ƭᴇcʜιᴇ007
źródło
2
Nie działa, Harmonogram zadań nie sprawdza kodów zakończenia procesu.
Indrek
Spójrz na to, masz rację. Zgłasza kod powrotu, ale nie uważa zadania za niepowodzenie tylko z powodu niepowodzenia skryptu. Ponieważ zadanie wciąż zostało ukończone. To głupie! Zaktualizuję moją odpowiedź.
Ƭᴇcʜιᴇ007
Tam właśnie dostałem się w swoich badaniach. Doceń jednak tę myśl.
Roger