Como posso agendar uma reinicialização do servidor a partir da linha de comando no Windows 2012?

13

Gostaria de programar uma reinicialização única do servidor, por exemplo para concluir a instalação de atualizações no início da manhã. Como posso fazer isso a partir da linha de comando no Windows 2012?

No Windows 2008, eu teria usado o comando at

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

e tiramos o resto da tarde.

Mas no Windows 2012, a execução deste comando indica que

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

Portanto, o comando equivalente com schtasks.exe pode ser

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

Além de ser muito esquecível, esse comando tem outra desvantagem importante : ele programa a tarefa para 2am hoje - não é muito útil, a menos que eu esteja acordado à uma da manhã para executar isso.

De acordo com a ajuda do schtasks.exe, a opção /sd para definir a data de início não é aplicável com /sc once . Então, mesmo se eu quisesse digitar a data de amanhã no formato dd / mm / aaaa - e eu não - eu não posso fazer isso.

A única solução possível que encontrei é aqui , onde Kevin Traas sugere a criação de um arquivo em lotes para criar uma tarefa agendada antes da meia-noite que aguarda alguns minutos e depois cria outra tarefa agendada para executar o comando que você deseja executar. Inteligente, mas nem de longe tão conveniente quanto at .

    
por Luke Sampson 13.06.2013 / 02:41

8 respostas

13

O comando shutdown tem um parâmetro de atraso /t que atrasa o desligamento por alguns segundos até 10 anos. Se você quiser agendar um desligamento em 14 horas, digamos, você pode executar

shutdown /r /t 50400

Você também pode adicionar um motivo com o parâmetro /d ou um comentário com /c ; execute shutdown /? para detalhes.

    
por 16.10.2014 / 13:57
7

Apesar da documentação, o parâmetro /SD parece ser compatível com o /SC ONCE . A tarefa é criada com sucesso para ser executada na data fornecida, no horário fornecido. (Testado em W8 e W7)

Além disso, a documentação do XP para schtasks.exe chega a dizer que o parâmetro /SD é necessário ao usar /SC ONCE , então imagino que há um número razoável de scripts usando a combinação.

Exemplo:

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 você não concordar com a documentação, considere gerar o arquivo XML diretamente ( esquema está aqui ), que é definitivamente suportado e definitivamente suporta uma tarefa programada para ser executada uma vez em uma data futura. Uma maneira fácil de obter o arquivo adequado é criá-lo no Agendador de Tarefas mmc snap in e use o comando de exportação .

Exemplo:

<?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 para importar:

schtasks /CREATE /TN "Task Name" /XML filename.xml
    
por 13.06.2013 / 04:36
2

Acabei criando runat.ps1 para replicar alguns dos recursos simples de at , incorporando a sabedoria de A resposta de Mitch.

A sintaxe é runat (time) (command) , por exemplo

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

Se você também é nostálgico pelos bons e velhos tempos em que não precisava digitar ...

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

... então você pode instalá-lo executando este 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

Ou você pode fazer download manual do runat.ps1 script aqui .

    
por 14.06.2013 / 06:07
1

Eu usei isso em um script para 2012 R2 e funciona bem; Ele criará uma tarefa diária que reinicia o servidor @ 4:30 am

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

Por favor, certifique-se de que você execute isso a partir de um prompt CMD com privilégios administrativos.

Andy

    
por 27.11.2014 / 03:34
1

Apenas outro script do PowerShell para reiniciar programaticamente o computador no dia seguinte, em horário especificado

$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
    
por 29.07.2015 / 18:17
0

Sugiro usar o comando schtasks com o parâmetro / f.

Usando / f, se houver uma tarefa com o mesmo nome, ela será modificada.

É muito útil para implantar tarefas via script.

Um exemplo completo de reinicialização do servidor de planejamento:

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

Extraído de: link

    
por 15.09.2016 / 20:38
0

Se o objetivo for simplesmente reinicializar após a instalação das atualizações, você poderá usar o módulo PSWindowsUpdate para instalar as atualizações. Você pode baixá-lo em aqui . Uma vez instalado, basta abrir o Powershell e digitar

Get-WuInstall -AcceptAll -AutoReboot
    
por 15.09.2016 / 21:38
0

Esse script permite agendar a reinicialização de vários servidores em uma data / hora específica.

link

    
por 28.09.2018 / 00:30