У меня та же проблема, я искал все, но не нашел ничего полезного.
В конце концов я просто начал возиться с разными вещами, которые мог придумать.Я могу придумать два обходных пути для нашей проблемы.
Средство просмотра событий может сказать вам, что завершение было запланировано, но не КОГДА оно было запланировано.
Одна идея состоит в том, чтобы запросить средство просмотра событийдля самого последнего выключения системы, самого последнего запланированного выключения и самой последней отмены запланированного выключения.Если запланированное отключение является более поздним, чем самое последнее отменение или завершение работы, то оно выполняется.Идентификаторы событий: 1074 для запуска по расписанию, 1075 для отмены по расписанию, в Windows Logs / System 12 для запуска системы 13 для закрытия системы (все в Windows Logs / System)
Я был слишкомМне лень делать это в пакетном файле, я знаю, что это возможно.
Так вот, что я в итоге сделал: вместо того, чтобы запланировать завершение работы, просто попытайтесь прервать его.Если выключение не выполняется, выдается сообщение об ошибке (Невозможно прервать выключение системы, поскольку выключение не выполнялось. (1116)).Гораздо лучше, я думаю, чем пугать пользователя, планируя завершение работы.
Вот копия кода, который я написал для простого сценария автоматического выключения, он переключается между отменой и запуском запланированного завершения работы.
@echo off
shutdown /a
if errorlevel 1 call:shutdown
goto end
:shutdown
set /p choice=Shutdown in how many minutes?
set /a mod=60
set /a mod*=%choice%
shutdown /s /t %mod%
:end
РЕДАКТИРОВАТЬ - я вернусь к этому ответу, поскольку у меня есть дополнительная информация для добавления.
Вышеупомянутое решение обнаружит, было ли запланировано выключение через выключение.Команда exe с использованием аргумента / t.
Если вам необходимо определить, запланировано ли в Windows завершение работы (как это происходит автоматически после некоторых обновлений Windows), то существует заданная запись реестра, которую вы можете запросить.Ниже приведен PowerShell, но вы можете написать командный файл, чтобы сделать то же самое.
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
Примечание: это не вернет true, если перезагрузка запланирована с помощью shutdown.exe, оно вернет true, только если Windows сообщит, что ваш компьютер необходимо перезагрузить.