¿Cómo puedo desconectar automáticamente a los usuarios de una máquina con Windows?

9

Me gustaría asegurarme de que las personas cierren sesión una vez que hayan terminado de trabajar en una única máquina multiusuario específica. Actualmente, el próximo usuario simplemente "cambiará de usuario" y seguirá trabajando, pero tener muchos usuarios conectados al mismo tiempo con los programas abiertos parece agotar los recursos.

¿Es posible desconectar automáticamente a los usuarios de una máquina si no han estado activos durante 24 horas?


Alternativamente, ¿es posible cerrar sesión a todos menos al usuario actual a medianoche?

La computadora está en una red de dominio de Windows, aunque solo quiero que el cierre de sesión automático funcione para la única máquina (y no soy el administrador de la red)

.

Jonas
fuente
1
¿Es esta una red de dominio de Windows?
Moab
@Moab: la computadora está en una red de dominio de Windows, aunque solo quiero que el cierre de sesión automático funcione para la única máquina (y no soy el administrador de la red).
Jonas
@ Jonas, tu elección de palabras hace que suene como más de una PC, puedes editar tu publicación original para incluir esta nueva información.
Moab
@Moab: he tratado de aclarar la pregunta. ¿Eso está mejor?
Jonas
Es ahora, echa un vistazo.
Moab

Respuestas:

6

Para cerrar la sesión de los usuarios desconectados mientras el usuario actual está conectado, copie el siguiente código de script en un archivo .cmd como "LogOffUsers.cmd" y luego ejecútelo como un servicio a medianoche:

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

La secuencia de comandos funciona mediante el comando de consulta para buscar usuarios que están desconectados buscando la frase "disco" y luego cerrándolos.

Si desea que el script se ejecute de forma continua como un servicio, desconectando a los usuarios cuando se hayan desconectado / inactivo durante un cierto período de tiempo, en su lugar usaría:

@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

Este script usa el mismo comando de consulta, pero además verifica la porción de "TIEMPO DE INACTIVO" de los resultados, desconectando al usuario si el tiempo de inactividad es mayor que 32 ("GTR 32"). Esa frase aparece dos veces porque el token "IDLE TIME" puede aparecer en dos posiciones ligeramente diferentes. Luego, la línea que comienza con "elección" espera 2 minutos antes de volver a realizar la operación pasando al principio. Puede aumentar o disminuir el valor "32" según sus necesidades.

Encontrado aquí .

eMansipater
fuente
@eMansipater: ¿Te importaría explicar qué hace esto y dónde puedo configurar las 24 horas?
Jonas
1
La mejor solución es desactivar el cambio rápido de usuario, esto forzará un cierre de sesión antes de que el nuevo usuario pueda iniciar sesión en su cuenta.
Moab
1
@Moab deshabilita el cambio rápido de usuario significa que un no administrador no puede iniciar sesión si el usuario anterior ha bloqueado la pantalla. @Jonas Una pregunta acertada: la parte entre paréntesis está usando el comando de consulta de support.microsoft.com/kb/186592 para encontrar usuarios que están desconectados buscando la frase "disco", y luego cerrándolos. El comando de elección solo espera realizar la operación cada 2 minutos. No hay necesidad de la opción de 24 horas, ya que este script solo debe desconectar a un usuario si otro usuario ya ha iniciado sesión.
eMansipater
1
@Jonas, un archivo por lotes utiliza "%% a", pero para hacer lo mismo en la línea de comandos, escriba "% a", eso debería ayudar con la depuración. No tengo una máquina Windows a mano para probar el script, por lo que puede haber algo sutil mal. Puede intentar cambiar los comandos "GTR 32 (logoff %% b)" a "echo logoff %% b" sin las comillas, o "echo logoff% b" sin las comillas si lo escribe. De esa manera imprimirá el usuarios está intentando cerrar sesión. Si imprime basura o nada, mostrará que el script está mal formado. Me temo que no sé el formato de salida de "consulta" de memoria para verificarlo.
eMansipater
1
@Jonas He tenido la oportunidad de verificar dos veces la salida del comando de consulta y esas partes del script fueron para que el cierre de sesión solo ocurriera si el usuario había estado inactivo durante un período de tiempo establecido. 'if %% d GTR 32' significa ejecutar el comando de cierre de sesión si el token %% d es mayor que 32. Dependiendo del uso del escritorio remoto, etc., el token "inactivo" puede aparecer en dos lugares, razón por la cual el script comprueba los dos escenarios. Su versión modificada simplemente cierra la sesión de cualquier usuario inactivo sin importar cuánto tiempo haya pasado. Si puedo acceder a una máquina con Windows, puedo verificar la sintaxis.
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))

Tenga en cuenta que lo anterior solo funcionará durante minutos inactivos, debe hacer una pequeña modificación si desea usar horas de tiempo inactivo antes de cerrar la sesión 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))

Después de los 23 para ajustar las horas, lo anterior funcionará en 24 horas o más de tiempo de inactividad. El %% h 2012 garantiza que el valor de %% d sea una hora y no un valor de minutos.

MULTITUD
fuente
0

Buscaría una forma de deshabilitar la función "Cambiar usuario". Esto puede ayudar.

Mago Prang
fuente
De hecho, me gusta la función "cambiar de usuario": de esta manera, alguien que realiza un cálculo largo no impide que otros usuarios usen la computadora también.
Jonas