Как я могу запланировать перезагрузку сервера из командной строки в Windows 2012?

15

Я хотел бы запланировать одноразовый перезапуск сервера, например, завершить установку обновлений рано утром. Как я могу сделать это из командной строки в Windows 2012?

На Windows 2008 я бы использовал atкоманду,

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

и забрал остаток дня.

Но в Windows 2012 запуск этой команды говорит мне, что

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

Таким образом, эквивалентная команда с schtasks.exe может быть

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

Помимо того , что очень забывается, эта команда имеет еще один важный недостаток : она планирует задание на 2 часа ночи сегодня -не много пользы , если я не просыпаются в 1am , чтобы запустить его.

Согласно справке для schtasks.exe, /sdпереключатель для установки даты начала не применяется с /sc once. Поэтому даже если бы я хотел напечатать завтрашнюю дату в формате мм / дд / гггг, а я нет, я не смогу этого сделать.

Единственное возможное решение, которое я нашел, - здесь , где Кевин Траас предлагает создать пакетный файл для создания запланированного задания незадолго до полуночи, который ждет пару минут, а затем создает другое запланированное задание для запуска команды, которую вы действительно хотите запустить. Умно, но далеко не так удобно, как at.

Люк Сэмпсон
источник
@Lijo эта ссылка не содержит никакой информации о том, как запланировать перезапуск.
Люк Сэмпсон
Это просто полная глупость, чтобы заменить AT непригодными для выполнения задач. Почему они не могли сделать оба? Толчки!
Миденок

Ответы:

13

Сама shutdownкоманда имеет параметр /tзадержки, который задерживает отключение на количество секунд до 10 лет. Если вы хотите запланировать отключение через 14 часов, скажем, вы можете запустить

shutdown /r /t 50400

Вы также можете добавить причину с помощью /dпараметра или комментарий с помощью /c; бегите shutdown /?за подробностями.

Имон Нербонн
источник
9

Несмотря на документацию, /SDпараметр кажется совместимым с /SC ONCE. Задача успешно создана для выполнения в указанную дату и в указанное время. (Проверено на W8 и W7)

Кроме того, документация XP дляschtasks.exe того, чтобы сказать, что /SDпараметр требуется при использовании /SC ONCE, поэтому я предполагаю, что есть довольно много сценариев, использующих комбинацию.

Пример:

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>

Если вы не согласны с документацией, рассмотрите возможность создания XML-файла напрямую ( схема приведена здесь ), который определенно поддерживается и определенно поддерживает задачу, запланированную для однократного запуска в будущем. Простой способ получить нужный файл - создать его в mmcоснастке « Планировщик заданий» и использовать команду экспорта .

Пример:

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

Команда для импорта:

schtasks /CREATE /TN "Task Name" /XML filename.xml
Митч
источник
Спасибо за совет о /sdподдержке. Это интересно и в отношении импорта XML, хотя лично я не хочу идти против документации. Так что, по крайней мере, это возможно - просто намного, намного сложнее, чем раньше at.
Люк Сэмпсон
Слегка интересно: /sdне работает с /sc onceWindows Server 2008. В результатеERROR: Incorrect Start Date.
Люк Сэмпсон
4
Хм ... Я дополнительно проверил Server 2008 SP2 и Server 2008 R2 без проблем. Я отмечу, что формат даты основан на вашем местном формате даты / времени, и требуются начальные нули. При стандартной установке EN-us это приведет к форматированию, как /SD 06/14/2013.
Митч
2

Я закончил тем, что создал, runat.ps1чтобы воспроизвести некоторые из простых особенностей at, включая мудрость из ответа Митча.

Синтаксис runat (time) (command), например,

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

Если вы тоже испытываете ностальгию по старым добрым временам, когда вам не нужно было печатать ...

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

... затем вы можете установить его, выполнив команду 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

Или вы можете вручную скачать runat.ps1скрипт здесь .

Люк Сэмпсон
источник
1
+1 Это очень полезный сценарий ... он определенно добавлен в мои любимые.
Митч
1

Я использовал это в сценарии для 2012 R2 и работает хорошо; Это создаст ежедневную задачу, которая перезапускает сервер в 4:30 утра.

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

Убедитесь, что вы запускаете это из командной строки CMD с правами администратора.

Энди

Энди Денли
источник
1

Еще один скрипт PowerShell для программной перезагрузки компьютера на следующий день в указанное время

$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

Я предлагаю использовать команду schtasks с параметром / f.

Используя / f, если есть задача с таким же именем, она модифицируется.

Это очень полезно для развертывания задач с помощью сценариев.

Полный пример перезапуска сервера расписаний:

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

Извлечено из: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinicio-automatico.html

Мануэль Гомес
источник
0

Если цель состоит в простой перезагрузке после установки обновлений, вы можете использовать модуль PSWindowsUpdate для установки обновлений. Вы можете скачать его здесь . После установки просто откройте Powershell и введите

Get-WuInstall -AcceptAll -AutoReboot
Чарльз Бердж
источник