73329
Goto Top

Force User logout bei Konto deaktivierung

Wenn ein AD-Benutzerkonto deaktiviert wird und der User noch angemeldet ist, kann er uneingeschränkt weiter arbeiten was nun zu verhindern ist.

Gibt es eine möglichkeit einen Check abzusetzen der z.B. alle 10min prüft, ob der Account deaktiviert ist und sobald dies zutrifft dem User die Session killt (vorzugsweise via GP)?


Bin um jeden Input froh...


Umgebung:
- W2k3 DC R2 SP2
- User melden sich über einen TerminalServer an!

Content-Key: 124220

Url: https://administrator.de/contentid/124220

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: Destry
Destry 04.09.2009 um 16:06:54 Uhr
Goto Top
Hi,

also soweit ich weiss kann der Nutzer nicht uneingeschränkt weiterarbeiten.

Sobald ein Zugriff erfolgt werden die Rechte gegen geprüft, und wenn das Konto gesperrt ist, gibt es keinen Zugriff.
Das gilt z.B. für Outlook, das Speichern und Öffnen einer Datei oder das Entsperren des Bildschirmschoners mit Kennwort.

Via GPO die Session killen, geht meiner Meinung nach nicht.
Ich könnte das nur über lokale Skripte und geplante Tasks verwirklichen.

Gruss,
Destry
Mitglied: DerWoWusste
DerWoWusste 06.09.2009 um 14:45:36 Uhr
Goto Top
Moin.
@Destry
soweit ich weiss kann der Nutzer nicht uneingeschränkt weiterarbeiten.
Leider nein. Hab ich auch gerade nochmal getestet.
@ccube
Diese Batch ließe sich wohl erstellen. Sie müsste ein Logoff absetzen, am besten über psshutdown -o
Zum Test, ob das Konto deaktiviert ist, würde ich das Kommando
net user DeaktivierterUser /domain
nehmen und dann im Output nach dem String
Konto aktiv Nein
suchen lassen.
Wie aber willst Du vorgehen, vollautomatisiert oder halb? voll wird schwer, woher soll das Kommando den Nutzernamen nehmen? Es ginge natürlich mit %username% auf jedem einzelnen PC im Rahmen eines geplanten tasks, aber den musst Du folglich auch im Nutzerkontext laufen lassen - dazu brauchst Du die Nutzerkennwörter...
Mitglied: Dani
Dani 06.09.2009 um 15:08:24 Uhr
Goto Top
@dww
warum auf jeden Rechner? Eigentlich sollte es reichen, wenn das Script auf dem TS unter "System" läuft. Denn die User arbeiten wohl alle auf dem Server.

Ich würde die Batchdatei so aufbauen:
  1. Alle angemeldeten TS-User auslesen
  2. Danach die Einzelheiten wie DWW schon anmerkte mit "net user %user% /domain" ausgeben lassen und gleich auswerten
  3. If-Abfrage wo den speziellen Parameter "Konto aktiv" überprüft und ggf. ein Logoff absetzt.
  4. Nächster TS-User einlesen

Was eben noch ein Problem darstellt, ist 1). Ich weiß im Moment keinen Befehl dafür.


Grüße,
Dani
Mitglied: 81825
81825 06.09.2009 um 15:14:04 Uhr
Goto Top
Hi,

Zitat von @DerWoWusste:
@Destry
> soweit ich weiss kann der Nutzer nicht uneingeschränkt
weiterarbeiten.
Leider nein. Hab ich auch gerade nochmal getestet.

Nur aus Interesse: Worauf beziehen sich dein "Leider" und dein "nein"? Darauf. dass er nicht uneingeschränkt weiterarbeiten kann, oder dass er leider doch weiterarbeiten kann?
Ist nicht ganz eindeutig zu interpretieren, jedenfalls nicht für mich, da ich keinen Domänenzugang zum Ausprobieren habe.
Mitglied: DerWoWusste
DerWoWusste 06.09.2009 um 15:16:11 Uhr
Goto Top
Ah ja, ein TS face-smile steht ja auch oben - hab ich vergessen.
zu 1) psloggedon kann das.
Mitglied: DerWoWusste
DerWoWusste 06.09.2009 um 15:17:33 Uhr
Goto Top
Hast recht, Deutlichkeit ist nötig. Destry hat Unrecht mit seiner Vermutung.
Mitglied: Dani
Dani 06.09.2009 um 15:59:08 Uhr
Goto Top
Hi,
ok...ich versuch es mal. face-smile Hier die Version 0.1:
@echo off

for /f "skip=1 delims=\ tokens=2" %%i in ('psloggedon.exe -x -l ^| findstr "NETBIOSNAME DER DOMÄNE"') do (  
	echo Username: %%i
	for /f "tokens=3 delims= " %%w in ('net user %%i /domain ^| findstr /i /b "Konto aktiv"') do (  
		if /i "%%w" == "Nein" echo shutdown /a /f /t 30  
	)
	echo Naechster Benutzer
)
Ich konnte es leider nur teilweiße testen...da ich hier grad kein Terminalserver stehen habe. Ich habe jetzt mal den internen "shutdown" Befehl genommen. Sollte auch gehen...

Erklärung zu den einzelnen Zeilen:
3: Mit dem Tool "psloggedon.exe" (Danke an DWW) werden alle aktiven Benutzer der Domäne ausgegeben. Durch die Kombination mit "findstr" wird eine Art Filter gesetzt. Somit werden die Systemaccounts nicht mehr aufgelistet und erzeugen keine Fehler.
4: Einfache Debugausgabe
5: Der Username wird automatisch in den nächsten Befehl eingesetzt. Auch hier wird über den Befehl "findstr" die gewünschten Angaben u filtern. Denn normalweiße werden 30-40 Optionen aufgelistet. Das brauchen wir ja eigentlich alles nicht.
6: Falls der Wert von "Konto aktiv" Nein ist, wird der entsprechende Benutzer ausgeloggt.

Was mir gerade zu Zeile 6 einfällt: Wie können wir den entsprechenden User ausloggen?! Denn mit shutdown.exe wird der aktuelle Benutzer unter dem das Skript läuft, abgemeldet. Gibts dafür vllt. auch ein Tool bei psTools?


Grüße,
Dani
Mitglied: 73329
73329 07.09.2009 um 07:56:01 Uhr
Goto Top
Vielen Dank für euren Input und den eleganten Lösungsansatz.
Werde das Skript gleich mal ausprobieren.
Mitglied: 73329
73329 07.09.2009 um 09:48:07 Uhr
Goto Top
Hmmm...

Wenn ich das Skript laufen lasse sehe ich folgendes:

C:\>for /F "skip=1 delims=\ tokens=2" %i in ('psloggedon.exe -x -l | findstr "Meine Domäne"') do (  
echo Username: %i
 for /F "tokens=3 delims= " %w in ('net user %i /domain | findstr /i /b "Konto aktiv"') do (if /I "%  
w" == "Nein" echo shutdown /a /f /t 30  )  
)

loggedon v1.33 - See who's logged on  
Copyright ® 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\>(
echo Username: administrator
 for /F "tokens=3 delims= " %w in ('net user administrator /domain | findstr /i /b "Konto aktiv"') do (if  
 /I "%w" == "Nein" echo shutdown /a /f /t 30  )  
)
Username: administrator

C:\>(if /I "Ja" == "Nein" echo shutdown /a /f /t 30  )  

C:\>(if /I "Nie" == "Nein" echo shutdown /a /f /t 30  )  

C:\>

Obwohl noch weitere User angemeldet sind, wird nur der eine Account geprüft. Wenn ich aber den Befehl "psloggedon.exe -x -l" auf dem TS ausführe, zeigt er mir auch die anderen angemeldeten User an.

Für den Logoff denke ich mal ist der Befehl "logoff" am einfachsten...
Mitglied: Dani
Dani 07.09.2009 um 11:39:17 Uhr
Goto Top
Moin,
wie sieht denn die Ausgabe von deinem "psloggedon.exe -x -l" aus? Ich habe es eben mit einer Domäne versucht.


Grüße,
Dani
Mitglied: 73329
73329 07.09.2009 um 11:55:53 Uhr
Goto Top
C:\>psloggedon.exe -x -l

loggedon v1.33 - See who's logged on  
Copyright ® 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com

Users logged on locally:
     NT-AUTORIT─T\LOKALER DIENST
     NT-AUTORIT─T\NETZWERKDIENST
     Meine Domäne\TStestUser
     Meine Domäne\administrator
     NT-AUTORIT─T\SYSTEM
Mitglied: Destry
Destry 07.09.2009 um 14:53:28 Uhr
Goto Top
Zitat von @DerWoWusste:
Hast recht, Deutlichkeit ist nötig. Destry hat Unrecht mit seiner
Vermutung.

Hi,

wir haben Nutzer die das Ändern ihres Kennwortes bis auf den letzten Tag schieben. Sie denken dann sie hätten noch den ganzen Tag Zeit. Tatsächlich aber läuft das Kennwort im Laufe des Tages zu einer bestimmten Uhrzeit ab.

Nach dem Ablauf bekommen wir dann den Anruf das der Nutzer z.B. seine Mails nicht mehr lesen oder Dateien abspeichern kann, was eindeutig damit zu tun hat. Das ist keine Vermutung.

Gibt es hier einen Unterschied zwischen abgelaufenem Kennwort und deaktiviertem Konto? Weiss jemand warum?

Gruss,
Destry
Mitglied: Dani
Dani 07.09.2009 um 22:55:13 Uhr
Goto Top
Moin,
seltsam...macht eigentlich kein Unterschied. Mach bitte folgendes:
Für nur mal die 1. FOR-Schleife mit dem entsprechenden ECHO aus. Es sollten dann genau 2 Usernamen auftauchen. Denn die NT* werden gefiltert.


Grüße,
Dani
Mitglied: DerWoWusste
DerWoWusste 07.09.2009 um 23:20:29 Uhr
Goto Top
Moin destry!
Das ist keine Vermutung
Meins ja auch nicht. Hab es ja wie gesagt geprüft. Nun muss wohl der Schiri entscheiden...
Mitglied: 73329
73329 08.09.2009 um 09:01:33 Uhr
Goto Top
C:\>for /F "skip=1 delims=\ tokens=2" %i in ('psloggedon.exe -x -l | findstr "Meine Domäne"') do (  
echo Username: %i
)

loggedon v1.33 - See who's logged on  
Copyright ® 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\>

Nicht gerade viel...
Mitglied: 81825
81825 08.09.2009 um 09:21:03 Uhr
Goto Top
Moin,

es wird vielleicht mehr, wenn du skip rausnimmst:
for /F "delims=\ tokens=2" %i in ('psloggedon.exe -x -l ^| findstr "Meine Domäne"') do (echo Username: %i)   

An Stelle von "Meine Domäne" würde ich es mal mit "VPN" versuchen, im Batch die %-Zeichen verdoppeln.
Mitglied: 73329
73329 08.09.2009 um 12:38:38 Uhr
Goto Top
Hehe, natürlich hab ich anstelle von "Meine Domäne" die effektive Domäne eingetragen - trotzdem MERCI für den hinweis. Der getrennte Befehl funktioniert soweit und listet die angemeldeten User aus meiner Domäne aus.
Mitglied: 81825
81825 08.09.2009 um 12:41:15 Uhr
Goto Top
Hehe, das war mir schon klar, dass "Meine Domäne" ein Alias sein sollte. Da oben stand aber vorher (bevor du es geändert hast, VPN\....., nur deshalb der Hinweis.
Mitglied: Dani
Dani 14.09.2009 um 19:53:13 Uhr
Goto Top
Moin,
wie ist der Stand der Dinge cybercube?
War leider im kl. Deutschland unterwegs.


Grüße,
Dani
Mitglied: 73329
73329 16.11.2009 um 10:53:47 Uhr
Goto Top
da bin ich wieder....

Das Skript kann meiner Meinung nach nicht funktionieren, da in der Variabel "%%i" der Wert "Meine Domäne\ TStestUser" gespeichert wird, wobei der Befehl "net user" nur den Usernamen verwenden kann und nicht zusätzlich auch noch die Domäne...

Könnte es auch etwas einfacher gehen mit dem Befehl "net accounts /forcelogoff:5"?
beim ausführen passiert jedoch nicht und der User kann weiter uneingeschränkt weiterarbeiten...
führe ich den befehl falsch aus (gestartet auf dem Terminalserver auf dem der User eingeloggd ist aber die anmeldezeit abgelaufen ist...)?


MERCI