如何在Windows 2012上安排从命令行重新启动服务器?

我想安排一次性服务器重新启动,例如在清晨完成安装更新。 我如何从Windows 2012上的命令行执行此操作?

在Windows 2008上,我会使用at命令,

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

并在下午rest了。

但在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的帮助,设置开始date的/sd开关不适用于/sc once 。 所以,即使我想以mm / dd / yyyy的格式输出明天的date,我也不能这样做。

我find的唯一可能的解决scheme就是在这里 ,Kevin Traasbuild议创buildbatch file,在午夜之前创build一个计划任务,等待几分钟,然后创build另一个计划任务来运行您实际想要运行的命令。 聪明,但远不及方便。

    尽pipe有文档, /SD参数似乎与/SC ONCE兼容。 该任务已成功创build,可在提供的date提供。 (testingW8和W7)

    另外, 用于schtasks.exe的XP文档甚至可以说使用/SC ONCE时需要/SD参数,所以我想有相当数量的脚本使用这个组合。

    例:

     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文件( 模式在这里 ),这是肯定支持的,并且绝对支持一个计划在未来的date运行一次的任务。 获取正确文件的简单方法是在Task Scheduler的mmcpipe理单元中创build它,并使用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 

    shutdown命令本身有一个延迟参数/t ,延迟关机时间长达10年。 如果您想要在14个小时内安排关机,那么可以运行

     shutdown /r /t 50400 

    您也可以使用/d参数添加原因或使用/c添加注释; 运行shutdown /? 了解详情。

    我最终创build了runat.ps1来复制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脚本。

    我在2012 R2的脚本中使用了这个function,效果很好。 它会创build一个每天在凌晨4:30重新启动服务器的任务

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

    请确保您从具有pipe理权限的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 

    我build议使用带/ f参数的schtasks命令。

    使用/ 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