我想安排一次性服务器重新启动,例如在清晨完成安装更新。 我如何从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的mmc
pipe理单元中创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