tengo el mismo problema, he buscado por todas partes, pero no encontró nada útil.
Finalmente acabo de empezar jugar un poco con diferentes cosas que podría pensar en. Puedo pensar en dos soluciones para nuestro problema
El visualizador de eventos puede indicarle que se programó un apagado, pero no CUÁNDO fue programado.
Una idea es consultar el visor de eventos para el cierre del sistema más reciente, el cierre programado más reciente y la cancelación más reciente de un apagado programado. Si el cierre programado es más reciente que la cancelación o el cierre más recientes, entonces hay uno en progreso. Los identificadores de sucesos son: 1074 para un apagado programado comenzado, 1075 para un apagado programado cancelado, en virtud de Registros de Windows/Sistema 12 para sistema de puesta en marcha 13 de apagado del sistema (todo bajo Registros de Windows/System)
Era demasiado vago para hacer esto en un archivo por lotes, sé que es posible.
Así que esto es lo que terminé haciendo: En lugar de programar un cierre, intente abortarlo. Si no se está encendiendo el apagado, arrojará un error (No se pudo abortar el apagado del sistema porque no estaba en curso el cierre. (1116)). Creo que es mucho mejor que enloquecer a un usuario al programar un cierre.
Aquí hay una copia del código que escribí para un script de apagado automático simple, que alterna entre cancelar e iniciar un apagado programado.
@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
EDITAR - Estoy volviendo a visitar esta respuesta ya que tengo más información que añadir.
La solución anterior detectará si se ha programado un apagado a través del comando shutdown.exe utilizando el argumento/t.
Si necesita determinar si Windows ha programado un cierre (como lo hace automáticamente después de algunas Actualizaciones de Windows), entonces hay una entrada de registro establecida que puede consultar. Lo siguiente se encuentra en PowerShell, pero puede escribir un archivo por lotes para hacer lo mismo.
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
Nota: esto no volverá cierto si un reinicio programado en el uso de Shutdown.exe, un viaje de solo devolver verdadero si Windows dice que su computadora necesita ser reiniciado.
Sí, lamentablemente hay algunas maneras y hasta ahora no he descubierto cómo lo programa el comando "shutdown/r/t 60". No parece ser una tarea programada, es probable que sea un nivel mucho más bajo que hace que sea difícil de detectar sin una API explícita :( – Ificator