Algo como isso pode funcionar. Execute-o como uma tarefa agendada única com o sistema de identidade quando precisar reiniciar.
SET LOGFILE=C:\TEMP\Reboot.log
ECHO. (*) %DATE% %TIME% > %LOGFILE%
:CHECKSESSIONS
ECHO. (*) %DATE% %TIME% Waiting one minute... >> %LOGFILE%
REM WAIT ONE MINUTE
TIMEOUT /T 60
QUERY USER >> %LOGFILE% 2>&1
FOR /F "tokens=*" %%i IN ('QUERY USER ^| FIND /C "Active"') DO SET ACTIVESESSIONS=%%i >> %LOGFILE% 2>&1
IF %ACTIVESESSIONS% GTR 0 (
ECHO Active sessions: %ACTIVESESSIONS% >> %LOGFILE% 2>&1
GOTO :CHECKSESSIONS
)
FOR /F "tokens=*" %%i IN ('QUERY USER ^| FIND /C "Disc"') DO SET DISCONNECTEDSESSIONS=%%i >> %LOGFILE% 2>&1
IF %DISCONNECTEDSESSIONS% GTR 0 (
ECHO Disconnected sessions: %DISCONNECTEDSESSIONS% >> %LOGFILE% 2>&1
GOTO :CHECKSESSIONS
)
ECHO. (*) %DATE% %TIME% Restarting computer >> %LOGFILE%
SHUTDOWN /F /R /T 0 >> %LOGFILE% 2>&1