Назад | Перейти на главную страницу

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

Я хочу запланировать однократный перезапуск сервера, например чтобы завершить установку обновлений рано утром. Как я могу сделать это из командной строки в 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 часа ночи Cегодня- бесполезно, если я не сплю в час ночи, чтобы запустить его.

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

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

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

shutdown /r /t 50400

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

Несмотря на документацию, /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

В итоге я создал 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 сценарий Вот.

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

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

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

Энди

Еще один сценарий 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

Я предлагаю использовать команду 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

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

Get-WuInstall -AcceptAll -AutoReboot

Этот сценарий позволяет запланировать перезапуск нескольких серверов на определенную дату / время.

https://gallery.technet.microsoft.com/Schedule-restart-of-2c1131fb?redir=0