Come posso pianificare un riavvio del server dalla riga di comando su Windows 2012?


15

Vorrei programmare un riavvio del server una tantum, ad esempio per completare l'installazione degli aggiornamenti al mattino presto. Come posso farlo dalla riga di comando su Windows 2012?

Su Windows 2008, avrei usato il atcomando,

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

e mi sono preso il resto del pomeriggio libero.

Ma su Windows 2012, l'esecuzione di questo comando me lo dice

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

Quindi potrebbe essere il comando equivalente con schtasks.exe

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

Oltre ad essere molto dimenticabile, questo comando ha un altro aspetto negativo importante : pianifica l'attività per le 2 di oggi: non serve molto a meno che non sia sveglio all'01 per eseguirlo.

Secondo la guida di schtasks.exe, l'opzione /sdper l'impostazione della data di inizio non è applicabile con /sc once. Quindi, anche se volessi scrivere la data di domani in formato mm / gg / aaaa — e non lo faccio — non posso farlo.

L'unica soluzione possibile che ho trovato è qui , dove Kevin Traas suggerisce di creare un file batch per creare un'attività pianificata poco prima di mezzanotte che attende un paio di minuti e quindi crea un'altra attività pianificata per eseguire il comando che si desidera effettivamente eseguire. Intelligente, ma in nessun posto vicino come conveniente at.


@Lijo quel link non contiene alcuna informazione su come programmare un riavvio.
Luke Sampson,

Questa è solo una stupidità totale per sostituire AT con schtask inutilizzabili. Perché non sono riusciti a fare entrambe le cose? Jerks!
midenok,

Risposte:


13

Il shutdowncomando stesso ha un parametro di ritardo /tche ritarda un arresto per un numero di secondi fino a 10 anni. Se vuoi programmare un arresto tra 14 ore, diciamo, potresti correre

shutdown /r /t 50400

È inoltre possibile aggiungere un motivo con il /dparametro o un commento con /c; correre shutdown /?per i dettagli.


9

Nonostante la documentazione, il /SDparametro sembra essere compatibile con /SC ONCE. L'attività è stata creata correttamente per essere eseguita alla data fornita, all'ora fornita. (Testato su W8 e W7)

Inoltre, la documentazione di XPschtasks.exe arriva fino al punto di dire che il /SDparametro è richiesto durante l'utilizzo /SC ONCE, quindi immagino che ci sia un buon numero di script che usano la combinazione.

Esempio:

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>

Se andare contro la documentazione non ti va bene, considera di generare direttamente il file XML (lo schema è qui ), che è sicuramente supportato e sicuramente supporta un'attività pianificata per l'esecuzione una volta in una data futura. Un modo semplice per ottenere il file corretto è crearlo nello mmcsnap-in Utilità di pianificazione e utilizzare il comando export .

Esempio:

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

Comando da importare:

schtasks /CREATE /TN "Task Name" /XML filename.xml

Grazie per il suggerimento su come /sdessere supportato. È interessante anche l'importazione XML, anche se personalmente non mi interessa andare contro la documentazione. Quindi almeno questo è possibile, solo molto, molto più difficile di prima at.
Luke Sampson,

Leggermente interessante: /sdnon funziona con /sc onceWindows Server 2008. Ne risultaERROR: Incorrect Start Date.
Luke Sampson,

4
Hmm ... Ho testato ulteriormente Server 2008 SP2 e Server 2008 R2 senza problemi. Noterò che il formato della data si basa sul formato data / ora locale e sono necessari zero iniziali. Nell'installazione predefinita di EN-us, ciò porterebbe a una formattazione simile /SD 06/14/2013.
Mitch,

2

Ho finito per creare runat.ps1per replicare alcune delle semplici funzionalità di at, incorporando la saggezza della risposta di Mitch.

La sintassi è runat (time) (command), ad es

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

Se anche tu hai nostalgia dei bei vecchi tempi in cui non dovevi digitare ...

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

... quindi è possibile installarlo eseguendo questo comando 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

Oppure puoi scaricare manualmente lo runat.ps1script qui .


1
+1 Questo è uno script molto utile ... questo è sicuramente tra i miei preferiti.
Mitch,

1

L'ho usato in uno script per 2012 R2 e funziona bene; Creerà un'attività giornaliera che riavvia il server alle 4:30 del mattino

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

Assicurati di eseguirlo da un prompt CMD con privilegi di amministratore.

Andy


1

Solo un altro script PowerShell per riavviare in modo programmatico il computer il giorno successivo all'ora specificata

$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


0

Se l'obiettivo è semplicemente riavviare dopo l'installazione degli aggiornamenti, è possibile utilizzare il modulo PSWindowsUpdate per installare gli aggiornamenti. Puoi scaricarlo da qui . Una volta installato, basta aprire Powershell e digitare

Get-WuInstall -AcceptAll -AutoReboot

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.