У меня есть главный компьютер, который знает, когда происходит отключение электроэнергии. Затем этот главный компьютер сообщит всем рабочим станциям о завершении работы по сети с помощью встроенной команды «shutdown / m \ computername / s». Этот главный компьютер также сообщит отдельным рабочим станциям о необходимости перезапуска с использованием того же механизма shutdown /m \\computername /r
.
На каждой рабочей станции есть сценарий, который при запуске сохраняет все важные данные.
Каждая рабочая станция должна выполнить свой сценарий, когда ей сообщают о выключении или перезапуске по сети (shutdown /m \\computername /s
или shutdown /m \\computername /r
).
Идея1:
- Используйте событие WM_QUERYENDSESSION, чтобы узнать, когда происходит выключение / перезапуск.
- Отменить выключение / перезагрузку.
- Запускаем скрипт.
- Продолжить выключение / перезагрузку (Проблема: я не вижу разумного способа определить, было ли выполнено выключение или перезагрузка главным компьютером.)
Идея2:
- Подождите, пока не появится процесс shutdown.exe.
- Получить параметры командной строки этого процесса
- Убейте этот процесс
- Запускаем скрипт.
- Запустите shutdown.exe с полученными параметрами.
Проблема: на самом деле shutdown.exe не запускается. Даже если вы запустите локально простой shutdown -s -t 30
.
Идея3:
- Отслеживайте входящий сетевой трафик.
- Ищите пакеты shutdown -m
- ...
Проблема: я понятия не имею, какой протокол используется и как форматируются пакеты.
Идея4:
- Мониторинг журналов событий
- Надеюсь, что он содержит информацию о том, какое отключение было выдано
Проблема: я не знаю, будет ли это регистрироваться и где.
PS:
Я не хочу использовать PsExec. Рабочие станции должны выполнять свои сценарии самостоятельно.