Crie um arquivo em lotes com o seguinte conteúdo, chamado algo como restore_console.bat:
@echo off
set LOG_FILENAME=%TEMP%\restore_console_log.txt
echo Script executed at %TIME% > %LOG_FILENAME%
echo qwinsta: >> %LOG_FILENAME%
qwinsta >> %LOG_FILENAME%
echo Checking for pending connection... >> %LOG_FILENAME%
for /f %%i in ('qwinsta ^| findstr /r /C:"^ [ ]*[0-9][0-9]* Disc"') do (
echo Pending connection detected, finishing. >> %LOG_FILENAME%
goto end
)
echo Checking for disconnection... >> %LOG_FILENAME%
for /f "tokens=2" %%i in ('qwinsta ^| findstr /r /I /C:"^ [ ]*[^ ][^ ]* [ ]*[0-9][0-9]* Disc"') do (
echo Redirecting session id %%i >> %LOG_FILENAME%
tscon %%i /dest:console /v >> %LOG_FILENAME%
goto end
)
:end
No Agendador de Tarefas, crie uma nova tarefa com as seguintes configurações:
- Geral - > Execute se o usuário está conectado ou não, execute com privilégios mais altos.
- Disparadores - > Novo - > Ao desconectar-se da sessão do usuário, Qualquer usuário, Conexão do computador remoto
- Ações - > Novo - > Iniciar um programa - > Programa / script: < seu arquivo em lote >
- Todo o restante padrão.
Notas sobre a implementação:
-
isso funciona analisando a saída qwinsta através de um regex findstr, ou seja, extraindo o ID da linha 3 aqui:
SESSIONNAME USERNAME ID STATE TYPE DEVICE >services 0 Disc ###### 2 Disc console 7 Conn #############... 65536 Listen rdp-tcp 65537 Listen
-
o bloco do meio é necessário porque, por alguma razão, a tarefa de agendamento é executada na conexão, bem como na desconexão. Quando isso acontece, a saída será da forma:
SESSIONNAME USERNAME ID STATE TYPE DEVICE >services 0 Disc ###### 2 Disc 3 Disc console 8 Conn #############... 65536 Listen rdp-tcp 65537 Listen
Portanto, procuramos por linhas do padrão da linha 4.
- copia as informações de registro para% TEMP% \ restore_console_log.txt, o que não é necessário, mas útil se o script não funcionar. Sem o registro, seriam apenas algumas linhas.
Isso funcionou para mim em uma única máquina com o Windows 8.1 - não sei se poderia ser implementada globalmente.