Як я можу запланувати перезапуск сервера з командного рядка в 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 ранку сьогодні - мало особливого використання, якщо я не прокинувся о 1 годині ночі, щоб виконати її.

Відповідно до довідки щодо schtasks.exe, /sdперемикач для встановлення дати початку не застосовується для /sc once. Тож навіть якщо я хотів набрати завтрашню дату у форматі mm / dd / yyyy - а я ні - не можу цього зробити.

Єдине можливе рішення, яке я знайшов, є тут , де Кевін Траас пропонує створити пакетний файл для створення запланованого завдання безпосередньо перед півночі, який чекає пару хвилин, а потім створює ще одне заплановане завдання для запуску команди, яку ви насправді хочете виконати. Розумний, але ніде не так зручно, як at.


@Lijo це посилання не містить інформації про те, як запланувати перезапуск.
Люк Сампсон

Це просто повна дурість замінювати AT непридатними щітками. Чому вони не змогли скласти обох? Ривки!
midenok

Відповіді:


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.
Люк Сампсон

Mildy цікаво: /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

... тоді ви можете встановити його, виконавши цю команду повноважень:

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

Просто ще один скрипт повноважень для програмного перезавантаження комп'ютера на наступний день у визначений час

$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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.