Terminalserver - automatische Abmeldung aller Benutzer innerhalb eines gesetzten Zeitfensters
Moin Kollegen,
ich wollte hier mal einen Ansatz vorstellen.
Das generelle Problem, das ich bisher immer sah war, dass ich entweder über Lösungen kam, die alle Nutzer fast zeitgleich rauswarfen (hohe Last) oder diese immer nur zu festlegbaren Intervallen abmeldeten.
Meine Nutzer wollten, dass sie während der Woche ihre Sitzungen auf den TS offenlassen können. Also bitte.
Der nachfolgende Ansatz macht es wie folgt:
Durch die Verschiebung der verschiedenen Auslösezeitpunkte, werden die Nutzer abgemeldet, ohne dass es zu gravierenden Überschneidungen kommen sollte.
Vielleicht gefällt Euch die Idee ja.
Und bitte immer erst in Laborumgebung testen, vor produktiver Inbetriebnahme.
Viele Grüße
bdmvg
* ADDENDUM *
Zusätzlich enthält das Script die Möglichkeit, dass während der definierten Wartungsphase die Leute auch automatisch wieder direkt die Abmeldung triggern.
Dazu kopiert man noch die Zeilen 59 und 60 und fügt sie ab Zeile 15 im Script ein.
ich wollte hier mal einen Ansatz vorstellen.
Das generelle Problem, das ich bisher immer sah war, dass ich entweder über Lösungen kam, die alle Nutzer fast zeitgleich rauswarfen (hohe Last) oder diese immer nur zu festlegbaren Intervallen abmeldeten.
Meine Nutzer wollten, dass sie während der Woche ihre Sitzungen auf den TS offenlassen können. Also bitte.
Der nachfolgende Ansatz macht es wie folgt:
- Das Script kann im Autostart oder als Loginscript übergeben werden. Es läuft im Benutzerkontext.
- Man definiert den gewünschten Auslösetag, die Startzeit des Auslösefensters und die Dauer des Fensters.
- Innerhalb des Auslösefensters wird ein Pseudozufallszeitpunkt errechnet, dem Nutzer mitgeteilt und das Script wartet, bis dieser Zeitpunkt erreicht ist.
- Dann führt es im Nutzerkontext den Befehl "shutdown /l /f" aus. Dieser meldet den Benutzer ab und schließt seine Sitzung.
Durch die Verschiebung der verschiedenen Auslösezeitpunkte, werden die Nutzer abgemeldet, ohne dass es zu gravierenden Überschneidungen kommen sollte.
varStartzeit = Now()
intStartzeitTag = Weekday(varStartzeit,2) 'Die "2" definiert Montag mit seiner Tagesnummer als Wochenbeginn. Dadurch bekommt "Montag" die Tagenummer "1". Standard wäre Sonntag = 1.
varStartzeitZeit = TimeValue(varStartzeit)
intZielzeittag = 7 'Sonntag
intTagesdifferenz = intZielzeittag - intStartzeitTag
varZielzeitBasisZeit = TimeValue("02:00:00")
varWartungsfensterBeginn = TimeValue("06:00:00")
varWartungsfensterEnde = TimeValue("12:00:00")
'*** Falls wir uns im gesetzten Wartungsfenster (Zielzeittag + Wartungsfensterbeginn + Wartungsfensterende) befinden, erfolgt automatische Abmeldung
If intStartzeitTag = intZielzeittag Then
If Time() > varWartungsfensterBeginn AND Time() < varWartungsfensterEnde THEN
Dim strMsg
strMsg = ""
MsgBox Msg, vbExclamation or vbOKOnly + 4096, "Automatische Abmeldung wegen laufender Wartung!"
End If
End If
'*** Zufällige Minuten ***
'Diese werden auf die Zielbasiszeit draufgerechnet, damit die abzumeldenden Sessions nicht zeitgleich abgemeldet werden.
Dim max,min
max=120
min=1
Randomize
intZufallMinuten = (Int((max-min+1)*Rnd+min))
'*** Errechneter Abmeldezeitpunkt
varZielzeitreal = DateAdd("n",intZufallMinuten,varZielzeitBasisZeit)
'*** Errechnetes Abmeldedatum
If intTagesdifferenz = 0 then 'Falls eine Sitzung am Tag mit derselben Tagesnummer gestartet wird, an der eigentlich Sitzungen abgemeldet werden, werden 7 Tage draufgerechnet.
varZielDatum = DateValue(DateAdd("d",7,varStartzeit))
else
If intTagesdifferenz < 0 then
varZieldatum = DateValue(DateAdd("d", 7 + intTagesdifferenz,varStartzeit))
Else
varZielDatum = DateValue(DateAdd("d",intTagesdifferenz,varStartzeit))
End If
End If
'*** absoluter errechneter Abmeldezeitpunkt aus Datum und Uhrzeit
varEffectiveDate = CDate(varZielDatum & " " & varZielzeitreal)
'*** Wartezeit in Millisekunden
varWaittime = DateDiff("s",varStartzeit,varEffectiveDate) * 1000
'Ausnahmebehandlung, wenn negativer Wert errechnet wird. Das sollte nicht mehr passieren. Ist oben abgefangen.
If varWaittime <= 0 Then
WScript.Quit
End If
Dim Msg
Msg = "Achtung!" & vbcr & "" & vbcr & "Beachten Sie bitte, dass eine automatische Abmeldung Ihrer Sitzung eingereiht wurde." & vbcr & "" & vbcr & "Da sowohl automatische Windows- als auch manuelle Updates eingespielt werden können, ist es wichtig, dass kein Benutzer an den Terminalservern angemeldet bleibt," & vbcr & "falls diese neustarten. Dies kann zu Schäden an den Userprofile-Disks führen, die Ihre persönlichen Einstellungen und Dateien enthalten." & vbcr & "" & vbcr & "Dies versuche ich zu verhindern, indem ich Ihre aktuelle Sitzung zum Zeitpunkt" & vbcr & "" & vbcr & varEffectiveDate & vbcr & "" & vbcr & "abmelden werde." & vbcr & "" & vbcr & "LASSEN SIE BITTE ZU OBIGEM ZEITPUNKT KEINE DATEIEN OFFEN UND/ODER UNGESPEICHERT! ICH KANN DARAUF KEINE RÜCKSICHT NEHMEN!" & vbcr & "" & vbcr & "Vielen Dank für Ihr Verständnis!"
MsgBox Msg, vbExclamation or vbOKOnly + 4096, "Automatische Abmeldung Ihrer Sitzung..."
'Dynamische Pause, bis Zielzeitpunkt erreicht ist. Durch obige Berechnungen wird ein positiver Wert in Millisekunden ermittelt, der hier runtergezählt wird.
Wscript.Sleep varWaittime
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\windows\system32\shutdown.exe /l /f", 0, false
Wscript.Quit
Vielleicht gefällt Euch die Idee ja.
Und bitte immer erst in Laborumgebung testen, vor produktiver Inbetriebnahme.
Viele Grüße
bdmvg
* ADDENDUM *
Zusätzlich enthält das Script die Möglichkeit, dass während der definierten Wartungsphase die Leute auch automatisch wieder direkt die Abmeldung triggern.
Dazu kopiert man noch die Zeilen 59 und 60 und fügt sie ab Zeile 15 im Script ein.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 572840
Url: https://administrator.de/contentid/572840
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
@beidermachtvongreyscull:
Hhmmm,
ich habe mal gelernt, daß RDS-/Terminalserver bzw. Citrix-Terminalserver
1. täglich einen Neustart brauchen
2. am Ende eines Tages die lokalen Profile gelöscht werden sollten
Ist das nicht mehr empfohlen?
Hiernach:
anscheinend nicht.
Wie sind da Deine Erfahrungen?
Es interessiert mich, weil wir wg. Home-Office am Überlegen sind, bei uns einen TS hinzustellen, damit die User zu Hause mit dem einfachsten Notebook auskommen, das man für möglichst günstiges Geld kriegen kann, Hauptsache der RDP- oder ICA-Client laufen, damit die Home-Geräte nicht denselben Arbeitsaufwand beim Einrichten und bei der lfd. Pflege erfordern wie die PCs in den Büros. Daß manches über TS nicht funktioniert, z. B. der Durchschliff von so mancher USB-Peripherie, ist uns dabei bewußt. Thin Clients sind keine Alternative, da diese nicht mobil sind, was die Heimarbeiter zu Hause ja sein wollen und mitunter auch müssen. Ganz davon abgesehen, daß nicht jeder ein Arbeitszimmer mit Schreibtisch zu Hause hat, und das Notebook mal am Küchentisch, mal am Wohnzimmertisch und vielleicht auch mal auf dem Teppich betrieben wird (letzteres wohl eher nicht ).
Viele Grüße
von
departure69
Hhmmm,
ich habe mal gelernt, daß RDS-/Terminalserver bzw. Citrix-Terminalserver
1. täglich einen Neustart brauchen
2. am Ende eines Tages die lokalen Profile gelöscht werden sollten
Ist das nicht mehr empfohlen?
Hiernach:
Meine Nutzer wollten, dass sie während der Woche ihre Sitzungen auf den TS offenlassen können
anscheinend nicht.
Wie sind da Deine Erfahrungen?
Es interessiert mich, weil wir wg. Home-Office am Überlegen sind, bei uns einen TS hinzustellen, damit die User zu Hause mit dem einfachsten Notebook auskommen, das man für möglichst günstiges Geld kriegen kann, Hauptsache der RDP- oder ICA-Client laufen, damit die Home-Geräte nicht denselben Arbeitsaufwand beim Einrichten und bei der lfd. Pflege erfordern wie die PCs in den Büros. Daß manches über TS nicht funktioniert, z. B. der Durchschliff von so mancher USB-Peripherie, ist uns dabei bewußt. Thin Clients sind keine Alternative, da diese nicht mobil sind, was die Heimarbeiter zu Hause ja sein wollen und mitunter auch müssen. Ganz davon abgesehen, daß nicht jeder ein Arbeitszimmer mit Schreibtisch zu Hause hat, und das Notebook mal am Küchentisch, mal am Wohnzimmertisch und vielleicht auch mal auf dem Teppich betrieben wird (letzteres wohl eher nicht ).
Viele Grüße
von
departure69
Guten Morgen,
1) ein regelmäßiger TS Neustart war nur bei Windows 2000 sinnvoll.
Seit dem hat sich doch viel verbessert Aktuell ist das bei einem "ordendlich" konfiguriert TS Server nicht erforderlich.
2) Lokale Profile fressen Festplatten Speicher. Man sollte also genug Platz vorsehe, ggf Ordner umleiten und den Platzbedarf auch monitoren. Ein tägliches Löschen ist dann nicht erforderlich.
VG Marc
1) ein regelmäßiger TS Neustart war nur bei Windows 2000 sinnvoll.
Seit dem hat sich doch viel verbessert Aktuell ist das bei einem "ordendlich" konfiguriert TS Server nicht erforderlich.
2) Lokale Profile fressen Festplatten Speicher. Man sollte also genug Platz vorsehe, ggf Ordner umleiten und den Platzbedarf auch monitoren. Ein tägliches Löschen ist dann nicht erforderlich.
VG Marc