Jak zaplanować ponowne uruchomienie serwera z wiersza polecenia w systemie Windows 2012?

15

Chciałbym zaplanować jednorazowy restart serwera, np. Aby zakończyć instalację aktualizacji wcześnie rano. Jak mogę to zrobić z wiersza polecenia w systemie Windows 2012?

W systemie Windows 2008 użyłbym atpolecenia

at 2am shutdown -r -f -c "restart"

i wziąłem resztę popołudnia.

Ale w systemie Windows 2012 uruchomienie tego polecenia mi to mówi

The AT command has been deprecated. Please use schtasks.exe instead.

Więc równoważne polecenie z schtasks.exe może być

schtasks /create /sc once /tn restart /tr "shutdown - r -f ""restart""" /st 02:00

Oprócz tego, że jest bardzo niezapomniana, to polecenie ma jeszcze jedną ważną wadę : planuje dziś zadanie na 2 w nocy - mało użyteczne, chyba że nie śpię o 1 w nocy, aby je uruchomić.

Według pomocy dla schtasks.exe /sdprzełącznik do ustawiania daty początkowej nie ma zastosowania w przypadku /sc once. Więc nawet jeśli chciałbym wpisać jutrzejszą datę w formacie mm / dd / rrrr - a ja nie - nie mogę tego zrobić.

Jedyne możliwe rozwiązanie, jakie znalazłem, jest tutaj , gdzie Kevin Traas sugeruje utworzenie pliku wsadowego, aby utworzyć zaplanowane zadanie tuż przed północą, które czeka kilka minut, a następnie tworzy kolejne zaplanowane zadanie, aby uruchomić polecenie, które faktycznie chcesz uruchomić. Sprytne, ale nigdzie nie tak wygodne jak at.

Luke Sampson
źródło
@Lijo ten link nie zawiera żadnych informacji na temat planowania ponownego uruchomienia.
Luke Sampson
To tylko całkowita głupota zastąpić AT bezużytecznymi schtaskami. Dlaczego nie mogli zrobić obu? Targanie!
midenok

Odpowiedzi:

13

Samo shutdownpolecenie ma parametr opóźnienia, /tktóry opóźnia wyłączenie na kilka sekund do 10 lat. Jeśli chcesz zaplanować zamknięcie za 14 godzin, powiedzmy, że możesz biec

shutdown /r /t 50400

Możesz także dodać przyczynę za pomocą /dparametru lub komentarz za pomocą /c; biegnij shutdown /?po szczegóły.

Eamon Nerbonne
źródło
9

Pomimo dokumentacji /SDparametr wydaje się być zgodny z /SC ONCE. Zadanie zostało pomyślnie utworzone w celu uruchomienia w podanym terminie o podanej godzinie. (Testowane na W8 i W7)

Dodatkowo dokumentacja XPschtasks.exe mówi, że /SDparametr jest wymagany podczas używania /SC ONCE, więc wyobrażam sobie, że istnieje spora liczba skryptów używających tej kombinacji.

Przykład:

C:\Users\Mitch>schtasks /create /sc once /tn restart /tr "shutdown -r -f ""restart""" /st 23:00 /sd 2013-06-13
SUCCESS: The scheduled task "restart" has successfully been created.

C:\Users\Mitch>

Jeśli niezgodność z dokumentacją nie pasuje do ciebie, rozważ wygenerowanie pliku XML bezpośrednio ( schemat jest tutaj ), który jest zdecydowanie obsługiwany i zdecydowanie obsługuje zadanie zaplanowane do uruchomienia raz w przyszłości. Prostym sposobem na uzyskanie odpowiedniego pliku jest utworzenie go w mmcprzystawce Harmonogram zadań i użycie polecenia eksportowania .

Przykład:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-06-12T21:20:51.004181</Date>
    <Author>FOOBAR\Mitch</Author>
  </RegistrationInfo>
  <Triggers>
    <TimeTrigger>
      <StartBoundary>2013-06-13T22:20:29</StartBoundary>
      <Enabled>true</Enabled>
    </TimeTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>FOOBAR\Mitch</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>Your command here</Command>
    </Exec>
  </Actions>
</Task>

Polecenie importowania:

schtasks /CREATE /TN "Task Name" /XML filename.xml
Mitch
źródło
Dzięki za wskazówkę dotyczącą /sdwsparcia. To również interesujące w przypadku importu XML - chociaż osobiście nie dbam o to, aby nie postępować wbrew dokumentacji. Przynajmniej jest to możliwe - o wiele, wiele trudniejsze niż kiedyś at.
Luke Sampson,
Mildy ciekawe: /sdnie działa /sc oncew systemie Windows Server 2008. Powoduje toERROR: Incorrect Start Date.
Luke Sampson
4
Hmm ... Dodatkowo bez problemu przetestowałem Server 2008 SP2 i Server 2008 R2. Zwrócę uwagę, że format daty jest oparty na lokalnym formacie daty / godziny i wymagane są zera na początku. W domyślnej instalacji EN-us doprowadziłoby to do takiego formatowania /SD 06/14/2013.
Mitch
2

Skończyło się na tym, że stworzyłem runat.ps1replikę niektórych prostych funkcji at, uwzględniając mądrość z odpowiedzi Mitcha.

Składnia jest runat (time) (command)np

runat 2am shutdown -r -f -c "restarting the server"
runat 10:15 msg * it`'s 10:15 everyone!

Jeśli ty też jesteś nostalgiczny za dawnymi dobrymi czasy, kiedy nie musiałeś pisać ...

schtasks /create /ru system /rl highest /sc once /tn restart /tr shutdown -r -f -c \"restarting the server\" /st 02:00 /sd 06/15/2013

... możesz go zainstalować, uruchamiając następującą komendę PowerShell:

iex (new-object net.webclient).downloadstring('https://gist.github.com/lukesampson/5779205/raw/install.ps1');install runat https://gist.github.com/lukesampson/5778559/raw

Możesz też ręcznie pobrać runat.ps1skrypt tutaj .

Luke Sampson
źródło
1
+1 To jest bardzo pomocny skrypt ... to zdecydowanie trafi do moich ulubionych.
Mitch
1

Użyłem tego w skrypcie dla 2012 R2 i działa dobrze; Stworzy codzienne zadanie, które ponownie uruchomi serwer o 4:30 rano

schtasks /create /ru system /rl highest /sc DAILY /tn restart /tr "shutdown /r /f /c "Restarting" /st 04:30

Upewnij się, że uruchamiasz to z wiersza CMD z uprawnieniami administracyjnymi.

Andy

Andy Denley
źródło
1

Kolejny skrypt programu PowerShell do programowego ponownego uruchamiania komputera następnego dnia o określonej godzinie

$tomorrowDate = (get-date).AddDays(1).ToString("dd/mm/yyyy")

schtasks /delete /tn restart /f
schtasks /create /sc once /ru MyDomain\administrator /rp /tn restart /tr "shutdown -r -f" /st 07:13 /sd $tomorrowDate
Marc Cals
źródło
0

Sugeruję użycie polecenia schtasks z parametrem / f.

Użycie / f, jeśli istnieje zadanie o tej samej nazwie, jest modyfikowane.

Jest to bardzo przydatne do wdrażania zadań za pomocą skryptów.

Pełny przykład restartu serwera harmonogramu:

schtasks /create /ru system /rl highest /sc DAILY /tn Reinicio /tr "shutdown /r /f /t 0 /c "Reinicio"" /st 22:30 /F

Wyodrębniono z: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinicio-automatico.html

Manuel Gómez
źródło
0

Jeśli celem jest po prostu ponowne uruchomienie po zainstalowaniu aktualizacji, możesz użyć modułu PSWindowsUpdate do zainstalowania aktualizacji. Możesz go pobrać stąd . Po zainstalowaniu wystarczy otworzyć PowerShell i pisać

Get-WuInstall -AcceptAll -AutoReboot
Charles Burge
źródło