Wie kann ich unter Windows 2012 einen Serverneustart über die Befehlszeile planen?

14

Ich möchte einen einmaligen Neustart des Servers einplanen, um z. B. die Installation von Updates am frühen Morgen abzuschließen. Wie kann ich dies über die Befehlszeile unter Windows 2012 tun?

Unter Windows 2008 hätte ich den atBefehl verwendet,

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

und nahm den Rest des Nachmittags frei.

Unter Windows 2012 wird mir dies jedoch durch Ausführen dieses Befehls mitgeteilt

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

So könnte der entsprechende Befehl mit schtasks.exe lauten

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

Abgesehen davon, dass dieser Befehl sehr vergesslich ist, hat er einen weiteren wichtigen Nachteil : Er plant die Aufgabe für heute um 2 Uhr morgens.

Laut der Hilfe zu schtasks.exe ist der /sdSchalter zum Einstellen des Startdatums bei nicht anwendbar /sc once. Selbst wenn ich das morgige Datum im Format MM / TT / JJJJ eingeben wollte - und das tue ich nicht - kann ich das nicht.

Die einzig mögliche Lösung, die ich gefunden habe, ist hier , wo Kevin Traas vorschlägt, eine Batchdatei zu erstellen, um eine geplante Aufgabe kurz vor Mitternacht zu erstellen, die einige Minuten wartet, und dann eine andere geplante Aufgabe zu erstellen, um den Befehl auszuführen, den Sie tatsächlich ausführen möchten. Clever, aber bei weitem nicht so praktisch wie at.

Luke Sampson
quelle
@Lijo dieser Link enthält keine Informationen zum Planen eines Neustarts.
Luke Sampson
Dies ist nur eine völlige Dummheit, AT durch unbrauchbare Schtasks zu ersetzen. Warum konnten sie nicht beide machen? Idioten!
Midenok

Antworten:

13

Der shutdownBefehl selbst verfügt über einen Verzögerungsparameter, der /tdas Herunterfahren um einige Sekunden bis zu 10 Jahre verzögert. Wenn Sie ein Herunterfahren in 14 Stunden planen möchten, können Sie beispielsweise ausführen

shutdown /r /t 50400

Sie können auch einen Grund mit dem /dParameter oder einen Kommentar mit hinzufügen /c. Laufen Sie shutdown /?für Details.

Eamon Nerbonne
quelle
8

Trotz der Dokumentation /SDscheint der Parameter mit dem kompatibel zu sein /SC ONCE. Die Aufgabe wurde erfolgreich erstellt, um am angegebenen Datum zum angegebenen Zeitpunkt ausgeführt zu werden. (Getestet auf W8 und W7)

Außerdem wird in der XP-Dokumentation für angegebenschtasks.exe , dass der /SDParameter für die Verwendung erforderlich /SC ONCEist. Ich stelle mir daher vor, dass die Kombination eine ausreichende Anzahl von Skripten enthält.

Beispiel:

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>

Wenn es Ihnen nicht gefällt, gegen die Dokumentation zu verstoßen, sollten Sie die XML-Datei direkt generieren (das Schema ist hier ). Dies wird definitiv unterstützt und unterstützt definitiv eine Aufgabe, die zu einem späteren Zeitpunkt einmal ausgeführt werden soll. Eine einfache Möglichkeit, die richtige Datei abzurufen, besteht darin, sie im mmcSnap-In Taskplaner zu erstellen und den Befehl export zu verwenden .

Beispiel:

<?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>

Befehl zum Importieren:

schtasks /CREATE /TN "Task Name" /XML filename.xml
Mitch
quelle
Danke für den Tipp über /sddie Unterstützung. Das ist auch am XML-Import interessant - obwohl es mir persönlich egal ist, ob ich gegen die Dokumentation verstoße. Zumindest ist das möglich - nur viel, viel schwieriger als früher at.
Luke Sampson
Mildy interessant: /sdfunktioniert nicht mit /sc onceWindows Server 2008. Es führt zuERROR: Incorrect Start Date.
Luke Sampson
3
Hmm ... ich habe zusätzlich Server 2008 SP2 und Server 2008 R2 ohne Probleme getestet. Ich werde bemerken, dass das Datumsformat von Ihrem lokalen Datums- / Zeitformat abhängt und führende Nullen erforderlich sind. Bei der Standardinstallation von EN-us würde dies zu einer Formatierung wie folgt führen /SD 06/14/2013.
Mitch
2

Am Ende habe ich runat.ps1einige der einfachen Funktionen von nachgebildet, wobei ich atdie Weisheit von Mitch's Antwort mit einbezogen habe.

Die Syntax ist runat (time) (command)z

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

Wenn Sie auch für die guten alten Zeiten nostalgisch sind, als Sie nicht tippen mussten ...

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

... dann können Sie es installieren, indem Sie diesen Powershell-Befehl ausführen:

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

Oder Sie können das runat.ps1Skript hier manuell herunterladen .

Luke Sampson
quelle
1
+1 Das ist ein sehr hilfreiches Skript ... das gehört definitiv zu meinen Favoriten.
Mitch
1

Ich habe dies in einem Skript für 2012 R2 verwendet und es funktioniert gut. Es wird eine tägliche Aufgabe erstellt, die den Server um 4.30 Uhr neu startet

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

Stellen Sie sicher, dass Sie dies an einer CMD-Eingabeaufforderung mit Administratorrechten ausführen.

Andy

Andy Denley
quelle
1

Nur ein weiteres Powershell-Skript zum programmgesteuerten Neustarten des Computers am nächsten Tag zur angegebenen Zeit

$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
quelle
0

Ich schlage vor, den Befehl schtasks mit dem Parameter / f zu verwenden.

Mit / f wird eine Aufgabe mit demselben Namen geändert.

Es ist sehr nützlich, um Aufgaben per Skript bereitzustellen.

Ein vollständiges Beispiel für einen geplanten Serverneustart:

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

Auszug aus: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinicio-automatico.html

Manuel Gómez
quelle
0

Wenn Sie nach der Installation von Updates einfach einen Neustart durchführen möchten, können Sie die Updates mit dem PSWindowsUpdate-Modul installieren. Sie können es hier herunterladen . Einmal installiert, öffnen Sie einfach Powershell und geben Sie

Get-WuInstall -AcceptAll -AutoReboot
Charles Burge
quelle