Como posso desconectar usuários automaticamente de uma máquina Windows?

9

Gostaria de garantir que as pessoas sejam desconectadas assim que terminarem de trabalhar em uma única máquina multiusuário específica. Atualmente, o próximo usuário apenas "alterna o usuário" e continua trabalhando, mas ter muitos usuários conectados ao mesmo tempo com programas abertos parece consumir recursos.

É possível desconectar automaticamente os usuários de uma máquina se eles não estiverem ativos por 24 horas?


Como alternativa, é possível desconectar todos, exceto o usuário atual, à meia-noite?

O computador está em uma rede de domínio do Windows - embora eu só queira que o logoff automático funcione para uma única máquina (e não sou o administrador da rede)

.

Jonas
fonte
11
Esta é uma rede de domínio do Windows?
Moab
@ Moo: O computador está em uma rede de domínio do Windows - embora eu só queira que o logout automático funcione para uma única máquina (e eu não sou o administrador da rede).
Jonas11
@ Jonas, sua escolha de palavras soa como mais de um PC. Você pode editar sua postagem original para incluir essas novas informações.
Moab
@ Moab: Eu tentei esclarecer a questão. Isto é melhor?
Jonas
É agora, dê uma olhada.
Moab

Respostas:

6

Para fazer logoff de usuários desconectados e deixar o usuário atual conectado, copie o seguinte código de script em um arquivo .cmd como "LogOffUsers.cmd" e execute-o como um serviço à meia-noite:

@echo off
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do logoff %%b

O script funciona usando o comando query para encontrar usuários desconectados pesquisando a frase "disco" e fazendo logoff deles.

Se você deseja que o script seja executado continuamente como um serviço, desconectando usuários quando eles foram desconectados / inativos por um determinado período de tempo, você deve usar:

@echo off
:Top
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else %%e GTR 32 (logoff %%b)
choice /T 120 /C 1 /D 1 /N
goto top

Esse script usa o mesmo comando de consulta, mas também verifica a parte "IDLE TIME" dos resultados, desconectando o usuário se o tempo ocioso for maior que 32 ("GTR 32"). Essa frase ocorre duas vezes porque o token "IDLE TIME" pode ocorrer em duas posições ligeiramente diferentes. Em seguida, a linha que começa com "escolha" aguarda 2 minutos antes de executar a operação novamente fazendo um loop no início. Você pode aumentar ou diminuir o valor "32" de acordo com suas necessidades.

Encontrado aqui .

eMansipater
fonte
@eMansipater: Importa-se de explicar o que isso faz e onde posso definir as 24 horas?
Jonas
11
A melhor solução é desativar a troca rápida de usuário, isso forçará o logoff antes que o novo usuário possa fazer login em sua conta.
Moab
11
A desativação da troca rápida de usuário pelo @Moab significa que um não administrador não poderá efetuar login se o usuário anterior tiver bloqueado a tela. @ Jonas Uma pergunta sábia - o bit entre parênteses está usando o comando query em support.microsoft.com/kb/186592 para encontrar usuários desconectados pesquisando a frase "disc" e fazendo logoff deles. O comando de escolha está aguardando para executar a operação apenas a cada 2 minutos. Não há nenhuma necessidade para a opção de 24 horas uma vez que este script só deverá sair um usuário se outro usuário já logado.
eMansipater
11
@Jonas, um arquivo em lotes usa "%% a", mas para fazer o mesmo na linha de comando, digite "% a" - isso deve ajudar na depuração. Eu não tenho uma máquina Windows à mão para testar o script; portanto, pode haver algo sutil de errado com ela. Você pode tentar alterar os comandos "GTR 32 (logoff %% b)" para "eco logoff %% b" sem as aspas ou "echo logoff% b" sem as aspas, se digitar. Dessa forma, imprimirá o usuários que está tentando fazer logoff. Se imprimir lixo ou nada, mostrará que o script está incorreto. Receio não saber o formato de saída "consulta" de cor para verificá-lo.
EMansipater
11
@ Jonas: Eu tive a chance de verificar novamente a saída do comando query e essas partes do script eram para que o logout ocorresse apenas se o usuário estivesse ocioso por um período definido. 'if %% d GTR 32' significa executar o comando logoff se o token %% d for maior que 32. Dependendo do uso da área de trabalho remota, etc., o token "inativo" pode aparecer em dois locais, e é por isso que o script verifica os dois cenários. Sua versão modificada simplesmente desconecta qualquer usuário ocioso, não importa quanto tempo tenha passado. Se eu conseguir acessar uma máquina Windows, posso verificar a sintaxe.
EMansipater
1
for /f "tokens=1-7 delims=,: " %%a in ('query user ^| find /i "disc"') do if %%d GTR 32 (logoff %%b) else (if %%e GTR 35 (logoff %%b))

Observe que o descrito acima funcionará apenas por minutos ociosos; você precisará fazer uma pequena alteração se desejar usar horas de tempo ocioso antes de sair da sessão desconectada.

for /f "tokens=1-8 delims=,:/ " %%a in ('query user ^| find /i "disc"') do if %%d GTR 23 (if %%h GTR 2012 (logoff %%b))

Altere o 23 para ajustar as horas, o acima funcionará em 24 horas ou mais de tempo ocioso. O %% h 2012 garante que o valor de %% d seja de uma hora e não de um minuto.

MOB
fonte
0

Eu procuraria uma maneira de desativar o recurso "Alternar usuário". Isso pode ajudar.

Wizard Prang
fonte
Na verdade, eu gosto do recurso "alternar usuário": dessa forma, alguém que executa um cálculo longo não impede que outros usuários usem o computador também.
Jonas