Comment puis-je planifier un redémarrage du serveur à partir de la ligne de commande sur Windows 2012?

15

Je voudrais planifier un redémarrage unique du serveur, par exemple pour terminer l'installation des mises à jour tôt le matin. Comment puis-je le faire à partir de la ligne de commande sur Windows 2012?

Sur Windows 2008, j'aurais utilisé la atcommande,

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

et pris le reste de l'après-midi.

Mais sur Windows 2012, l'exécution de cette commande me dit que

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

Ainsi, la commande équivalente avec schtasks.exe pourrait être

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

En plus d'être très oubliable, cette commande a un autre inconvénient important de : il planifie la tâche pour deux heures aujourd'hui -pas beaucoup moins que je utiliser suis réveillé à 1h du matin pour l' exécuter.

Selon l'aide de schtasks.exe, le /sdcommutateur de définition de la date de début n'est pas applicable avec /sc once. Donc, même si je voulais taper la date de demain au format mm / jj / aaaa - et je ne le fais pas - je ne peux pas faire ça.

La seule solution possible que j'ai trouvée est ici , où Kevin Traas suggère de créer un fichier de commandes pour créer une tâche planifiée juste avant minuit qui attend quelques minutes, puis crée une autre tâche planifiée pour exécuter la commande que vous souhaitez réellement exécuter. Intelligent, mais loin d'être aussi pratique que at.

Luke Sampson
la source
@Lijo ce lien ne contient aucune information sur la façon de planifier un redémarrage.
Luke Sampson
C'est juste une stupidité totale de remplacer AT par des schtasks inutilisables. Pourquoi ne pouvaient-ils pas faire les deux? Jerks!
midenok

Réponses:

13

La shutdowncommande elle-même possède un paramètre de délai /tqui retarde un arrêt pendant un certain nombre de secondes jusqu'à 10 ans. Si vous souhaitez planifier un arrêt dans 14 heures, par exemple, vous pouvez exécuter

shutdown /r /t 50400

Vous pouvez également ajouter une raison au /dparamètre ou un commentaire avec /c; courir shutdown /?pour plus de détails.

Eamon Nerbonne
la source
9

Malgré la documentation, le /SDparamètre semble être compatible avec le /SC ONCE. La tâche est créée avec succès pour s'exécuter à la date indiquée, à l'heure indiquée. (Testé sur W8 et W7)

De plus, la documentation de XPschtasks.exe va jusqu'à dire que le /SDparamètre est requis lors de l'utilisation /SC ONCE, donc j'imagine qu'il existe un bon nombre de scripts utilisant la combinaison.

Exemple:

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>

Si aller à l'encontre de la documentation ne vous convient pas, envisagez de générer directement le fichier XML (le schéma est ici ), qui est définitivement pris en charge et prend définitivement en charge une tâche planifiée pour s'exécuter une fois à une date ultérieure. Un moyen simple d'obtenir le fichier approprié consiste à le créer dans le mmccomposant logiciel enfichable Planificateur de tâches et à utiliser la commande d'exportation .

Exemple:

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

Commande à importer:

schtasks /CREATE /TN "Task Name" /XML filename.xml
Mitch
la source
Merci pour le conseil sur le /sdsoutien. C'est aussi intéressant à propos de l'importation XML - bien que personnellement je ne me soucie pas d'aller à l'encontre de la documentation. Donc au moins c'est possible - juste beaucoup, beaucoup plus difficile qu'auparavant at.
Luke Sampson
Mildy intéressant: /sdne fonctionne pas avec /sc onceWindows Server 2008. Il en résulteERROR: Incorrect Start Date.
Luke Sampson
4
Hmm ... J'ai également testé Server 2008 SP2 et Server 2008 R2 sans problème. Je noterai que le format de date est basé sur votre format de date / heure local, et des zéros non significatifs sont requis. Dans l'installation par défaut EN-us, cela conduirait à un formatage comme /SD 06/14/2013.
Mitch
2

J'ai fini par créer runat.ps1pour reproduire certaines des fonctionnalités simples de at, en incorporant la sagesse de la réponse de Mitch.

La syntaxe est runat (time) (command), par exemple

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

Si vous aussi, vous êtes nostalgique du bon vieux temps où vous n'aviez pas à taper ...

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

... alors vous pouvez l'installer en exécutant cette commande 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

Ou vous pouvez télécharger manuellement le runat.ps1script ici .

Luke Sampson
la source
1
+1 C'est un script très utile ... ça va définitivement dans mes favoris.
Mitch
1

Je l'ai utilisé dans un script pour 2012 R2 et fonctionne bien; Il créera une tâche quotidienne qui redémarrera le serveur à 4h30.

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

Veuillez vous assurer que vous l'exécutez à partir d'une invite CMD avec des privilèges administratifs.

Andy

Andy Denley
la source
1

Juste un autre script PowerShell pour redémarrer par programme l'ordinateur le lendemain à l'heure spécifiée

$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
la source
0

Je suggère d'utiliser la commande schtasks avec le paramètre / f.

En utilisant / f, s'il existe une tâche du même nom, elle est modifiée.

Il est très utile pour déployer des tâches via des scripts.

Un exemple complet d'un redémarrage du serveur de planification:

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

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

Manuel Gómez
la source
0

Si l'objectif est simplement de redémarrer après l'installation des mises à jour, vous pouvez utiliser le module PSWindowsUpdate pour installer les mises à jour. Vous pouvez le télécharger ici . Une fois installé, ouvrez simplement Powershell et tapez

Get-WuInstall -AcceptAll -AutoReboot
Charles Burge
la source