取消/阻止由窗口“任务调度程序”延迟触发的任务

这是与一个特定的问题有关,但我认为这是一个“有趣”的问题,一般使用:在Windows(特别是2k8服务器,对我来说)你有一个事件触发任务(具体来说,UPS上电池因为电源故障)(电池将持续至less15分钟),然后执行一些操作(具体来说,关机/ s / t 60 / d U:6:12)。 但是还有一些其他事件(特别是,因为电源已经恢复,UPSclosures电池)应该阻止第一个任务发生(特别是不closures),如果在延迟期间发生的话。

我开始考虑这个问题,因为用UPSpipe理服务器关机的软件是纯粹的…噢,我应该在这里礼貌一点,不是吗? 呃…非常不好。 所以我在考虑如何在没有它的电池耗尽function之前提供标准关机。 通常情况下,系统会从UPS得到一条消息,说明电池即将耗尽,然后关机。 该UPS不发送该消息。 它发送“我在电池上”,“我在AC上”。 是。 它。 没有信息“我即将死亡”。

但是我认为这对其他情况也是一个有用的窍门。 任何事情发生一段时间后,如果没有恢复的话,任何时候都有一些事情要做。 例如,如果您在一段时间内无法与远程PC进行通信,请将消息发送到智能电源板上以对其进行重新启动…但是,如果通信恢复,则不会。 或者,如果您在一段时间内无法从一个源获取数据,请切换到备份数据源…但是,如果主源开始响应,则不会。

可以这样做吗? 我看不到一个方法…

Ryan的方法扩展了两个任务,一个是由“Power Gone”触发的,另一个是由“Power Restore”事件触发的“中止”button任务

如果你需要做更通用的事情(并不是每个可执行文件都有一个中止开关,比如shutdown ),并且在开始向pipe理员发送邮件,擦除磁盘或者自毁数据中心(或者其他任何东西)之前要保留几分钟的缓冲区你想在紧急情况下自动化),你可以使第一个失速/等待一段时间,并有第二个任务停止第一个如果触发:

PowerGone任务:

 Send-MailMessage -To "[email protected]" -Body "Self-destruction sequence initiated, T-10m" # We can still abort this task Start-Sleep -Seconds 600 Send-MailMessage -To "[email protected]" -Subject "Notice of termination..." Start-Implosion -Force 

强化任务:

 $TaskScheduler = New-Object -ComObject Schedule.Service $TaskScheduler.Connect("localhost") $TargetTask = $TaskScheduler.GetFolder('\').GetTask('PowerGone') $TargetTask.Stop() 

这是一个整洁的想法。 我会在几个小时内用Powershell或者C#为你写这个,花费很less。 ;)

开玩笑。 这个怎么样…

使用任务计划程序来创build两个任务。 每个任务都将在事件日志事件中触发。 第一个任务会根据“AC power is gone”事件触发,执行shutdown /s /t 1200 ,延迟1200秒closures系统。 然后第二个任务将根据事件日志事件触发“交stream电源已恢复”。 第二个任务将执行shutdown /a来中止挂起的closures。

我认为比这更先进的任何东西都需要编写脚本。


关掉