当没有用户登录 Windows 终端服务器时执行操作

当没有用户登录 Windows 终端服务器时执行操作

这个问题的背景是:我们有一个 Windows Server 2012 R2 终端服务器,用户可在此进行长时间工作,因此我们尽量避免不必要地重启服务器。但是,有时我们需要重启服务器(安装更新是最重要的),而这目前需要大量的沟通和手动干预。

如果服务器未处于活动状态时可以自动重启,那么这将大大简化。到目前为止,我最好的尝试涉及在事件上触发的计划任务Security/Security Auditing/4634 (Logoff),但我无法确定刚刚断开的会话是否是最后一个会话,而且这可能不是最好的方法。

有没有办法在没有活动会话(交互式或断开连接)时立即执行任务(即 PS Restart-Computer)?

答案1

类似这样的方法可能会有用。当您需要重新启动时,将其作为身份系统的一次性计划任务运行。

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

相关内容