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

16370
Jonas

Ich möchte sicherstellen, dass die Benutzer abgemeldet werden, sobald sie an einem einzelnen Mehrbenutzer-Computer gearbeitet haben. Derzeit wird der nächste Benutzer nur "Benutzer wechseln" und weiterarbeiten, doch wenn viele Benutzer gleichzeitig mit Programmen angemeldet sind, scheint dies Ressourcen zu benötigen.

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


Ist es 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).

.

8
Handelt es sich um ein Windows-Domänennetzwerk? Moab vor 13 Jahren 1
@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 vor 13 Jahren 0
@ Jonas, Ihre Wortwahl lässt es wie mehrere PCs klingen. Sie können Ihren ursprünglichen Beitrag bearbeiten, um diese neuen Informationen aufzunehmen. Moab vor 13 Jahren 0
@ Moab: Ich habe versucht, die Frage zu klären. Ist das besser? Jonas vor 13 Jahren 0
Es ist jetzt, schau es dir an. Moab vor 13 Jahren 0
@Moab: Danke für die Bearbeitung. Jonas vor 13 Jahren 0

3 Antworten auf die Frage

5
eMansipater

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

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

Das Skript funktioniert, indem der Abfragebefehl verwendet wird, um Benutzer zu suchen, die getrennt wurden, indem der Ausdruck "disc" durchsucht und anschließend abgemeldet wird.

Wenn Sie möchten, dass das Skript stattdessen kontinuierlich als Dienst ausgeführt wird, und Benutzer abmelden, wenn sie für einen bestimmten Zeitraum getrennt oder 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 den gleichen Abfragebefehl, überprüft jedoch zusätzlich den Teil "IDLE TIME" der Ergebnisse und protokolliert den Benutzer, wenn die Leerlaufzeit größer als 32 ist ("GTR 32"). Diese Phrase kommt zweimal vor, da das Token "IDLE TIME" an zwei leicht unterschiedlichen Positionen vorkommen kann. Dann wartet die Zeile, die mit "choice" beginnt, 2 Minuten, bevor sie die Operation erneut ausführt, indem sie an den Anfang geht. Sie können den Wert "32" je nach Bedarf erhöhen oder verringern.

Gefunden hier .

@eMansipater: Könntest du erklären, was das bedeutet und wo ich die 24 Stunden einstellen kann? Jonas vor 13 Jahren 0
Die beste Lösung ist, die schnelle Benutzerumschaltung zu deaktivieren. Dadurch wird eine Abmeldung erzwungen, bevor sich der neue Benutzer bei seinem Konto anmelden kann. Moab vor 13 Jahren 1
@Moab-Deaktivierung 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 in Klammern stehende Bit verwendet den Abfragebefehl von support.microsoft.com/kb/186592, um Benutzer zu suchen, die getrennt werden, indem der Ausdruck "disc" durchsucht und anschließend abgemeldet wird. Der Auswahlbefehl wartet darauf, die Operation nur alle 2 Minuten auszuführen. Die 24-Stunden-Option ist nicht erforderlich, da dieses Skript einen Benutzer nur abmelden soll, wenn sich bereits ein anderer Benutzer angemeldet hat. eMansipater vor 13 Jahren 1
Dank eMansipater ist die ultimative Lösung ein Anwendertraining mit Konsequenzen. Je einfacher es für Benutzer ist, desto schlechter wird es. Moab vor 13 Jahren 0
@ eMansipater: Vielen Dank für deine Erklärung. Wenn ich es richtig verstanden habe, würden alte Benutzer abgemeldet werden, sobald ein anderer Benutzer für höchstens zwei Minuten mit diesem Skript angemeldet ist. Dies entspricht fast einer Deaktivierung der schnellen Benutzerumschaltung. Ist es nicht möglich, 120 Sekunden zu warten, um das Skript nur um etwa Mitternacht laufen zu lassen, wo es sich außer dem momentan aktiven Benutzer ausloggen würde (außer den Dienst um Mitternacht zu starten und 24 Stunden zu warten)? Jonas vor 13 Jahren 0
@Moab: Es gibt einige gute Verwendungsmöglichkeiten für die schnelle Benutzerumschaltung: Ein Administrator kann sich anmelden, ohne dass sich der Benutzer abmelden muss, oder wenn ein Benutzer zum Mittagessen geht, kann ein anderer Benutzer eine Stunde lang warten, bis der erste Benutzer zurückkommt und fortfährt . Ich bin völlig einverstanden, dass Training die beste Lösung ist, aber das ist in meiner Situation leider nicht sehr machbar. Auch wenn ich selbst Benutzer auf diesem Rechner bin, mag ich es, wenn die Dinge für mich einfach sind :) Jonas vor 13 Jahren 0
@Jonas Sie können einfach die Schleife aus dem Skript nehmen und dann jeden Abend um Mitternacht ausführen. Der Hauptunterschied zwischen dem Skript und dem Deaktivieren der schnellen Benutzerumschaltung besteht darin, dass sich ein Benutzer weiterhin anmelden kann, wenn ein anderer Computer einen Computer gesperrt hat. Soll ich den von mir gelieferten Code ändern? eMansipater vor 13 Jahren 0
@eMansipater: Ah, ja, das Wechseln mit einer anderen angemeldeten Person ist in der Tat nützlich. Das Entfernen der Schleife bedeutet, dass ich nur die erste und die dritte Zeile behalte, oder? Jonas vor 13 Jahren 0
@Jonas genau. eMansipater vor 13 Jahren 0
@ eMansipater: Wenn ich mit der rechten Maustaste auf die .cmd-Datei klicke und als Administrator ausgeführt werde, passiert nichts. Wenn ich den `for ...` -Befehl von der Kommandozeile aus laufe, erhalte ich ein %% a zu diesem Zeitpunkt unerwartet. Mache ich etwas falsch? Jonas vor 13 Jahren 0
@Jonas eine Batchdatei verwendet "%% a". Um dasselbe in der Befehlszeile zu tun, geben Sie stattdessen "% a" ein. Dies sollte beim Debuggen helfen. Ich habe keinen Windows-Computer, mit dem ich das Skript testen kann. Es könnte also etwas subtiles daran fehlen. 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 der Befehl gedruckt Benutzer versucht sich abzumelden. Wenn es Müll oder nichts druckt, wird das Skript fehlerhaft dargestellt. Ich fürchte, ich kenne das Ausgabeformat "Abfrage" nicht auswendig, um es zu überprüfen. eMansipater vor 13 Jahren 1
@eMansipater: `for / f" tokens = 1-7 delims = ,: "% a in ('query user ^ | find / i" disc "') do logoff% b funktioniert wie angekündigt, wenn es von der Kommandozeile aus als ausgeführt wird Administrator. Nur aus Neugier: Was bedeuten die If-Klausel und die GTR 32, dass ich weggelassen habe? Waren diese wichtig? Jonas vor 13 Jahren 0
@eMansipater: es funktioniert auch als .cmd-Datei mit %%. Jonas vor 13 Jahren 0
@ Jonas Ich hatte die Möglichkeit, die Ausgabe des Befehls [query] (http://support.microsoft.com/kb/186592) zu überprüfen, und diese Teile des Skripts waren so, dass die Abmeldung nur beim Benutzer erfolgt war eine bestimmte Zeit lang untätig gewesen. '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 Remote-Desktops usw. kann das "Leerlauf" -Token an zwei Stellen angezeigt werden, weshalb das Skript verwendet wird prüft für beide Szenarien. Ihre modifizierte Version einfach abmeldet _jeder_ inaktive Benutzer, egal wie lange es war. Wenn ich zu einem Windows-Rechner komme, kann ich die Syntax überprüfen. eMansipater vor 13 Jahren 1
@ eMansipater: Oh, deshalb funktionierte das Skript beim Testen nicht mit GTR! Ich habe mich als Benutzer angemeldet, zu admin gewechselt und war natürlich nicht lange genug im Leerlauf :). Vielen Dank für Ihre Hilfe! Jonas vor 13 Jahren 0
@Jonas Kein Problem! Ich werde die Antwort bearbeiten, um beide möglichen Lösungen für zukünftige Referenz zu klären, sobald ich zu einem Windows-Computer komme und die Syntax für das Skript verifizieren kann. eMansipater vor 13 Jahren 0
1
MOB
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 die oben genannten Funktionen nur für Leerlaufminuten funktionieren. Sie müssen eine geringfügige Änderung vornehmen, wenn Sie Stunden der 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 der Leerlaufzeit. Der %% h 2012 stellt sicher, dass der %% d-Wert eine Stunde und keine Minute ist.

0
Wizard Prang

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

Ich mag die Funktion "Benutzer wechseln": Auf diese Weise blockiert jemand, der eine lange Berechnung durchführt, nicht, dass andere Benutzer den Computer ebenfalls verwenden. Jonas vor 11 Jahren 0