Wie kann ich Benutzer automatisch von einem Windows-Computer abmelden?

9

Ich möchte sicherstellen, dass die Benutzer abgemeldet sind, sobald sie mit der Arbeit an einem einzelnen, spezifischen Mehrbenutzer-Computer fertig sind. Derzeit wird der nächste Benutzer nur den Benutzer wechseln und weiterarbeiten, aber wenn viele Benutzer gleichzeitig mit geöffneten Programmen angemeldet sind, scheinen die Ressourcen aufgebraucht zu sein.

Ist es möglich, Benutzer automatisch von einem Computer abzumelden, wenn sie 24 Stunden lang nicht aktiv waren?


Ist es alternativ möglich, alle außer dem aktuellen Benutzer um Mitternacht abzumelden?

Der Computer befindet sich in einem Windows-Domänennetzwerk. Ich möchte jedoch, dass die automatische Abmeldung nur für den einzelnen Computer funktioniert (und ich bin nicht der Netzwerkadministrator).

.

Jonas
quelle
1
Ist das ein Windows-Domänennetzwerk?
Moab
@Moab: Der Computer befindet sich in einem Windows-Domänennetzwerk. Ich möchte jedoch, dass die automatische Abmeldung nur für den einzelnen Computer funktioniert (und ich bin nicht der Netzwerkadministrator).
Jonas
@ Jonas, Ihre Wortwahl lässt es wie mehr als einen PC klingen. Sie können Ihren ursprünglichen Beitrag bearbeiten, um diese neuen Informationen aufzunehmen.
Moab
@ Moab: Ich habe versucht, die Frage zu klären. Ist das besser?
Jonas
Es ist jetzt, schau mal.
Moab

Antworten:

6

Kopieren Sie den folgenden Skriptcode in eine cmd-Datei wie "LogOffUsers.cmd" und führen Sie ihn um Mitternacht als Dienst aus, um nicht verbundene Benutzer abzumelden, während der aktuelle Benutzer verbunden bleibt.

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

Das Skript verwendet den Abfragebefehl , um Benutzer zu finden, die nicht verbunden sind, indem der Ausdruck "Disc" durchsucht und dann abgemeldet wird.

Wenn Sie möchten, dass das Skript stattdessen kontinuierlich als Dienst ausgeführt wird und Benutzer abgemeldet werden, wenn sie für einen bestimmten Zeitraum getrennt / inaktiv waren, verwenden Sie stattdessen Folgendes:

@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

Dieses Skript verwendet denselben Abfragebefehl, überprüft jedoch zusätzlich den Teil "IDLE TIME" der Ergebnisse und meldet den Benutzer ab, wenn die Leerlaufzeit größer als 32 ist ("GTR 32"). Diese Phrase kommt zweimal vor, weil das Token "IDLE TIME" zwei leicht unterschiedliche Positionen haben kann. Dann wartet die mit "Auswahl" beginnende Zeile 2 Minuten, bevor die Operation erneut ausgeführt wird, indem eine Schleife zum Anfang ausgeführt wird. Sie können den Wert "32" je nach Bedarf erhöhen oder verringern.

Gefunden hier .

eMansipater
quelle
@eMansipater: Würde es Ihnen etwas ausmachen zu erklären, was dies bewirkt und wo ich die 24 Stunden einstellen kann?
Jonas
1
Die beste Lösung besteht darin, die schnelle Benutzerumschaltung zu deaktivieren. Dadurch wird eine Abmeldung erzwungen, bevor sich der neue Benutzer bei seinem Konto anmelden kann.
Moab
1
@Moab Deaktivieren der schnellen Benutzerumschaltung bedeutet, dass sich ein Nicht-Administrator nicht anmelden kann, wenn der vorherige Benutzer den Bildschirm gesperrt hat. @Jonas Eine kluge Frage: Das Bit in Klammern verwendet den Abfragebefehl von support.microsoft.com/kb/186592, um Benutzer zu finden, deren Verbindung getrennt wird, indem der Ausdruck "disc" gesucht und dann abgemeldet wird. Der Auswahlbefehl wartet darauf, den Vorgang nur alle 2 Minuten auszuführen. Die 24-Stunden-Option ist nicht erforderlich, da dieses Skript einen Benutzer nur
abmelden
1
@Jonas eine Batch-Datei verwendet "%% a", aber um dasselbe in der Befehlszeile zu tun, geben Sie stattdessen "% a" ein - das sollte beim Debuggen helfen. Ich habe keinen Windows-Computer zur Hand, auf dem ich das Skript anprobieren kann, daher stimmt möglicherweise etwas Feines nicht. Sie können versuchen, die Befehle "GTR 32 (logoff %% b)" in "echo logoff %% b" ohne Anführungszeichen oder "echo logoff% b" ohne Anführungszeichen zu ändern, wenn Sie sie eingeben. Auf diese Weise wird die Datei ausgedruckt Benutzer, die versucht, sich abzumelden. Wenn Müll oder nichts gedruckt wird, wird angezeigt, dass das Skript fehlerhaft ist. Ich fürchte, ich kenne das Ausgabeformat "Abfrage" nicht auswendig, um es zu überprüfen.
eMansipater
1
@Jonas ich eine Chance habe , habe die Ausgabe des Doppelprüf Abfrage Befehls und jene Teile des Skripts waren so , dass die Abmeldung nur , wenn der Benutzer inaktiv für eine bestimmte Zeit lang war der Fall wäre. 'if %% d GTR 32' bedeutet, dass der Abmeldebefehl ausgeführt wird, wenn das Token %% d größer als 32 ist. Abhängig von der Verwendung des Remotedesktops usw. kann das "inaktive" Token an zwei Stellen angezeigt werden, weshalb das Skript angezeigt wird prüft für beide Szenarien. Ihre geänderte Version meldet einfach jeden inaktiven Benutzer ab, egal wie lange es her ist. Wenn ich zu einem Windows-Computer komme, kann ich die Syntax überprüfen.
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))

Beachten Sie, dass das oben Genannte nur für Leerlaufminuten funktioniert. Sie müssen eine geringfügige Änderung daran vornehmen, wenn Sie Stunden Leerlaufzeit verwenden möchten, bevor Sie die getrennte Sitzung abmelden.

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

Ändern Sie die 23, um die Stunden anzupassen. Die oben genannten Funktionen funktionieren für 24 Stunden oder mehr Leerlaufzeit. Der %% h 2012 stellt sicher, dass der %% d-Wert eine Stunde und kein Minutenwert ist.

MOB
quelle
0

Ich würde nach einer Möglichkeit suchen, die Funktion "Benutzer wechseln" zu deaktivieren. Dies könnte helfen.

Zauberer Prang
quelle
Eigentlich gefällt mir die Funktion "Benutzer wechseln": Auf diese Weise hindert jemand, der eine lange Berechnung durchführt, andere Benutzer nicht daran, den Computer ebenfalls zu verwenden.
Jonas