如何安排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格式输入明天的日期,但我不这样做,我也无法做到。

我找到的唯一可能的解决方案是在这里,Kevin Traas建议在午夜之前创建批处理文件以创建计划任务,该任务等待几分钟,然后创建另一个计划任务以运行您实际要运行的命令。聪明,但是没有比这方便的地方at


@Lijo该链接不包含有关如何安排重新启动的任何信息。
路加·桑普森

用无法使用的schtask代替AT完全是愚蠢的。他们为什么不能两者都做?混蛋!
midenok '18

Answers:


13

shutdown命令本身具有一个delay参数/t,该参数将关闭关机的时间延迟最多10年。例如,如果您要在14小时内安排关机,则可以运行

shutdown /r /t 50400

您也可以在/d参数中添加原因,或在注释中添加/c; 运行shutdown /?的详细信息。


9

尽管有文档说明,但该/SD参数似乎与兼容/SC ONCE。该任务已成功创建,可以在提供的日期,提供的时间运行。(在W8和W7上测试)

此外,XP的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管理单元中创建该文件并使用export命令

例:

<?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)有趣:在Windows Server 2008上/sd不起作用/sc once。它导致ERROR: Incorrect Start Date.
Luke Sampson

4
嗯...我另外测试了Server 2008 SP2和Server 2008 R2,没有问题。我将注意到,日期格式基于您当地的日期/时间格式,并且需要前导零。在默认的EN-us安装中,这将导致格式类似/SD 06/14/2013
米奇

2

我最终创建runat.ps1了复制的一些简单功能at,并结合了Mitch的回答中的智慧。

语法是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

如果目标只是在安装更新后重新启动,则可以使用PSWindowsUpdate模块来安装更新。您可以从这里下载。安装后,只需打开Powershell并键入

Get-WuInstall -AcceptAll -AutoReboot

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.