Executar ação quando nenhum usuário efetuou login no Windows Terminal Server

4

Como pano de fundo para essa pergunta: temos um servidor de terminal do Windows Server 2012 R2 em que os usuários executam um trabalho de longa duração, por isso, tentamos não reinicializar o servidor desnecessariamente. No entanto, às vezes precisamos (instalar as atualizações sendo as mais importantes), e isso atualmente requer muita comunicação e interferência manual.

Isso seria muito implícito se a reinicialização pudesse ocorrer automaticamente quando o servidor não estivesse em uso ativo. Até agora, minha melhor tentativa envolveu uma tarefa planejada acionada no evento Security/Security Auditing/4634 (Logoff) , mas não consegui determinar se a sessão desconectada era a última, e essa pode não ser a melhor abordagem.

Existe uma maneira de executar uma tarefa (ou seja, PS Restart-Computer) assim que não houver sessões ativas (interativas ou desconectadas)?

    
por Martok 12.05.2017 / 23:28

1 resposta

2

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
    
por 13.05.2017 / 00:51