Это связано с определенной проблемой, но я думаю, что это «интересный» вопрос для общего использования: в Windows (в частности, на сервере 2k8, для меня) у вас есть задача, которая запускается событием (в частности, ИБП переходит в разряд батареи. из-за сбоя питания) с задержкой (заряда батареи хватит минимум на 15 минут), а затем выполните какое-то действие (в частности, выключение / s / t 60 / d U: 6: 12). Но есть и другое событие (в частности, ИБП отключается от батареи из-за восстановления питания), которое затем должно блокировать выполнение первой задачи (в частности, не завершать работу), ЕСЛИ это происходит во время задержки.
Я начал думать об этом, потому что программное обеспечение для управления выключением сервера, поставляемое с моим ИБП, чистое ... о, я должен быть здесь вежливым, не так ли? ... гм ... очень-очень нехорошо. Поэтому я думал о том, как обеспечить стандартное отключение до того, как батарея разрядится без него. Обычно система получает сообщение от ИБП о том, что батарея почти разрядилась, а затем отключается. Этот ИБП НЕ отправляет такое сообщение. Он отправляет «Я на батарее», «Я нахожусь в сети» и все такое. является. Это. Нет сообщения «Я скоро умру».
Но я думаю, что это может быть полезно и в других ситуациях. В любое время есть что-то, что вы хотите сделать после того, как что-то происходит какое-то время без восстановления. Например. если вы не можете связаться с удаленным ПК в течение некоторого периода времени, отправьте сообщение на умный удлинитель, чтобы выключить его ... Но не в случае восстановления связи. Или, если вам не удавалось получить данные из одного источника в течение некоторого периода времени, переключитесь на резервный источник данных ... Но только не, если основной источник начинает отвечать.
Это можно сделать? Я не вижу выхода ...
Это отличная идея. Я бы написал это для вас на Powershell или C # за несколько часов за очень скромную плату. ;)
Просто шучу. Как насчет этого...
Используйте планировщик задач, чтобы создать две задачи. Каждая задача будет запускаться по событию журнала событий. Задача номер один будет запускаться в зависимости от события «Нет питания переменного тока», и она выполнит такое действие, как shutdown /s /t 1200
для выключения системы с задержкой 1200 секунд. Затем сработает вторая задача на основе события журнала событий «Восстановлено питание переменного тока». Вторая задача выполнит shutdown /a
чтобы прервать отложенное завершение работы.
Я думаю, что для чего-то более сложного нужно будет написать сценарий.
Расширение подхода Райана с использованием двух задач: одна запускается кнопкой «Power Gone», а задача кнопки «прервать» запускается событием «Power Restore».
Если вам нужно сделать что-то более общее (не каждый исполняемый файл имеет переключатель прерывания, например shutdown
) и хотите поддерживать буфер на несколько минут, прежде чем вы начнете отправлять электронные письма руководству, стирать диски или самоуничтожать центр обработки данных (или что-то еще, что вы хотите автоматизировать в чрезвычайной ситуации), вы можете сделать первый останов / подождать некоторое время, и пусть вторая задача остановит первую, если сработает:
Задача PowerGone:
Send-MailMessage -To "james@company.tld" -Body "Self-destruction sequence initiated, T-10m"
# We can still abort this task
Start-Sleep -Seconds 600
Send-MailMessage -To "everyone@company.tld" -Subject "Notice of termination..."
Start-Implosion -Force
Задача PowerBack:
$TaskScheduler = New-Object -ComObject Schedule.Service
$TaskScheduler.Connect("localhost")
$TargetTask = $TaskScheduler.GetFolder('\').GetTask('PowerGone')
$TargetTask.Stop()