Comment déconnecter automatiquement les utilisateurs d'une machine Windows?

9

Je voudrais m'assurer que les gens sont déconnectés une fois qu'ils ont fini de travailler sur une seule machine multi-utilisateurs spécifique. Actuellement, le prochain utilisateur "changera d'utilisateur" et continuera de travailler, mais le fait d'avoir de nombreux utilisateurs connectés en même temps avec des programmes ouverts semble utiliser des ressources.

Est-il possible de déconnecter automatiquement les utilisateurs d'une machine s'ils ne sont pas actifs depuis 24 heures?


Alternativement, est-il possible de déconnecter tout le monde sauf l'utilisateur actuel à minuit?

L'ordinateur est sur un réseau de domaine Windows - bien que je souhaite uniquement que la déconnexion automatique fonctionne pour la seule machine (et je ne suis pas l'administrateur du réseau)

.

Jonas
la source
1
S'agit-il d'un réseau de domaine Windows?
Moab
@Moab: L'ordinateur est sur un réseau de domaine Windows - bien que je souhaite uniquement que la déconnexion automatique fonctionne pour la seule machine (et je ne suis pas l'administrateur du réseau).
Jonas
@ Jonas, Votre choix de mots fait sonner plus d'un PC, vous pouvez modifier votre message d'origine pour inclure ces nouvelles informations.
Moab
@Moab: J'ai essayé de clarifier la question. Est-ce mieux?
Jonas
C'est maintenant, jetez un oeil.
Moab

Réponses:

6

Afin de déconnecter les utilisateurs déconnectés tout en laissant l'utilisateur actuel connecté, copiez le code de script suivant dans un fichier .cmd tel que "LogOffUsers.cmd", puis exécutez-le en tant que service à minuit:

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

Le script fonctionne en utilisant la commande query pour trouver les utilisateurs qui sont déconnectés en recherchant la phrase "disque", puis en les déconnectant.

Si vous souhaitez que le script s'exécute en continu en tant que service, déconnectant les utilisateurs lorsqu'ils ont été déconnectés / inactifs pendant une certaine période, vous utiliseriez plutôt:

@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

Ce script utilise la même commande de requête, mais vérifie en outre la partie "IDLE TIME" des résultats, déconnectant l'utilisateur si le temps d'inactivité est supérieur à 32 ("GTR 32"). Cette phrase se produit deux fois, car le jeton "IDLE TIME" peut apparaître deux positions légèrement différentes. Ensuite, la ligne commençant par "choix" attend 2 minutes avant de recommencer l'opération en bouclant au début. Vous pouvez augmenter ou diminuer la valeur "32" selon vos besoins.

Trouvé ici .

eMansipater
la source
@eMansipater: Pourriez-vous expliquer ce que cela fait et où je peux définir les 24 heures?
Jonas
1
La meilleure solution consiste à désactiver le changement rapide d'utilisateur, ce qui forcera une déconnexion avant que le nouvel utilisateur puisse se connecter à son compte.
Moab
1
@Moab désactivant le changement rapide d'utilisateur signifie qu'un non-administrateur ne peut pas se connecter si l'utilisateur précédent a verrouillé l'écran. @Jonas Une sage question - le bit entre parenthèses utilise la commande de requête de support.microsoft.com/kb/186592 pour trouver les utilisateurs qui sont déconnectés en recherchant la phrase "disque", puis en les déconnectant. La commande de choix attend de n'effectuer l'opération que toutes les 2 minutes. L'option 24 heures n'est pas nécessaire car ce script ne doit déconnecter un utilisateur que si un autre utilisateur s'est déjà connecté.
eMansipater
1
@Jonas un fichier batch utilise "%% a", mais pour faire la même chose sur la ligne de commande, vous tapez "% a" à la place - cela devrait aider au débogage. Je n'ai pas de machine Windows à portée de main pour essayer le script, il peut donc y avoir quelque chose de subtil qui ne va pas. Vous pouvez essayer de changer les commandes "GTR 32 (logoff %% b)" en "echo logoff %% b" sans les guillemets, ou "echo logoff% b" sans les guillemets si vous le saisissez. De cette façon, il imprimera le les utilisateurs qu'il essaie de se déconnecter. S'il imprime des ordures ou rien, cela montrera que le script est mal formé. Je crains de ne pas connaître par cœur le format de sortie "requête" pour le vérifier.
eMansipater
1
@Jonas J'ai eu l'occasion de vérifier à nouveau la sortie de la commande de requête et ces parties du script étaient de sorte que la déconnexion ne se produise que si l'utilisateur avait été inactif pendant une période de temps définie. 'if %% d GTR 32' signifie d'exécuter la commande de déconnexion si le jeton %% d est supérieur à 32. Selon l'utilisation du bureau distant, etc., le jeton "inactif" peut apparaître à deux endroits, c'est pourquoi le script vérifie les deux scénarios. Votre version modifiée déconnecte simplement tout utilisateur inactif, quelle que soit sa durée. Si je peux accéder à une machine Windows, je peux vérifier la syntaxe.
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))

Notez que ce qui précède ne fonctionnera que pendant les minutes d'inactivité, vous devez y apporter une légère modification si vous souhaitez utiliser des heures d'inactivité avant de vous déconnecter de la session déconnectée.

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

Modifiez le 23 pour ajuster les heures, ce qui précède fonctionnera 24 heures ou plus de temps d'inactivité. Le %% h 2012 garantit que la valeur %% d est une valeur d'heure et non une minute.

FOULE
la source
0

Je chercherais un moyen de désactiver la fonction "Changer d'utilisateur". Cela pourrait aider.

Wizard Prang
la source
En fait, j'aime la fonction "changer d'utilisateur": de cette façon, quelqu'un qui exécute un long calcul n'empêche pas les autres utilisateurs d'utiliser l'ordinateur également.
Jonas