Erkennen ob Remoterechner gesperrt ist
Hallo,
wie kann ich ermitteln, ob auf einem Remoterechner gerade eine aktive Session ohne Bildschirmschoner läuft?
Umgebung:
Windows 7 64bit
Hintergrund:
Wir installieren auf den Rechnern unserer Mitarbeiter keine Sondersoftware mehr, sondern nur noch Standard-Office Programme. Für Sondersoftware steht unseren Mitarbeitern ein "Remotecluster" zur Verfügung. Bitte an dieser Stelle nicht verwirren lassen, das Remotecluster besteht aus älteren Rechnern die im Keller stehen und von den Mitarbeitern mittels MS RDP genutzt werden.
Das Problem ist nun, dass die Mitarbeiter nicht wissen, welchen Rechner sie gerade nutzen können. Um Ihnen diese Information mitteilen zu können, möchte ich wissen, ob am Remoterechner gerade gearbeitet wird. Dazu muss ich folgende drei Fälle unterscheiden und je nach Fall die Info "frei" oder "belegt" an den Mitarbeiter weitergeben (dies geschieht auf einer Website, aber das ist nicht Teil der hier gestellten Frage).
Fall 1: Wie direkt nach einem Neustart
Es ist kein User auf dem Rechner angemeldet und demnach existieren auch keine aktiven oder inaktiven Sessions.
Fall 2: Aktive Remotesession vorhanden, es arbeitet jemand am Remoterechner.
Ein Mitarbeiter arbeitet aktiv mit dem Remoterechner und eine Nutzung durch einen zweiten Mitarbeiter ist nicht möglich. Versucht der zweite Mitarbeiter nun sich am Remoterechner anzumelden, erhält der erste Mitarbeiter eine Anfrage, ob er seine eigene Verbindung trennen lassen möchte. Dies kann der erste Mitarbeiter ablehnen oder annehmen.
Fall 3: Aktive Remotesession vorhanden, es arbeitet aber niemand am Remoterechner, der Bildschirm ist gesperrt.
In diesem Fall hat der erste Mitarbeiter seinen Arbeitsplatz verlassen und vom Remoterechner wird der Bildschirm gesperrt. Ein anderer Mitarbeiter könnte den Rechner nutzen.
Ich habe mir vorgestellt, dass Ganze in ein Batch- oder PowerShell Skript zu stecken und dieses bei Bedarf oder automatisiert ausführen zu lassen. Als Ergebnis kommt "frei" oder "belegt" raus.
Grundsätzlich bin ich auch allen anderen Lösungen gegenüber aufgeschlossen, allerdings bin ich außer bei Batch und Powershell nur wenig bewandert was die Programmierung angeht.
Schon mal vielen Dank für's Lesen dieser Zeilen, hoffentlich kann mir jemand bei meinem Problem helfen!
Schöne Grüße
Tim
wie kann ich ermitteln, ob auf einem Remoterechner gerade eine aktive Session ohne Bildschirmschoner läuft?
Umgebung:
Windows 7 64bit
Hintergrund:
Wir installieren auf den Rechnern unserer Mitarbeiter keine Sondersoftware mehr, sondern nur noch Standard-Office Programme. Für Sondersoftware steht unseren Mitarbeitern ein "Remotecluster" zur Verfügung. Bitte an dieser Stelle nicht verwirren lassen, das Remotecluster besteht aus älteren Rechnern die im Keller stehen und von den Mitarbeitern mittels MS RDP genutzt werden.
Das Problem ist nun, dass die Mitarbeiter nicht wissen, welchen Rechner sie gerade nutzen können. Um Ihnen diese Information mitteilen zu können, möchte ich wissen, ob am Remoterechner gerade gearbeitet wird. Dazu muss ich folgende drei Fälle unterscheiden und je nach Fall die Info "frei" oder "belegt" an den Mitarbeiter weitergeben (dies geschieht auf einer Website, aber das ist nicht Teil der hier gestellten Frage).
Fall 1: Wie direkt nach einem Neustart
Es ist kein User auf dem Rechner angemeldet und demnach existieren auch keine aktiven oder inaktiven Sessions.
Fall 2: Aktive Remotesession vorhanden, es arbeitet jemand am Remoterechner.
Ein Mitarbeiter arbeitet aktiv mit dem Remoterechner und eine Nutzung durch einen zweiten Mitarbeiter ist nicht möglich. Versucht der zweite Mitarbeiter nun sich am Remoterechner anzumelden, erhält der erste Mitarbeiter eine Anfrage, ob er seine eigene Verbindung trennen lassen möchte. Dies kann der erste Mitarbeiter ablehnen oder annehmen.
Fall 3: Aktive Remotesession vorhanden, es arbeitet aber niemand am Remoterechner, der Bildschirm ist gesperrt.
In diesem Fall hat der erste Mitarbeiter seinen Arbeitsplatz verlassen und vom Remoterechner wird der Bildschirm gesperrt. Ein anderer Mitarbeiter könnte den Rechner nutzen.
Ich habe mir vorgestellt, dass Ganze in ein Batch- oder PowerShell Skript zu stecken und dieses bei Bedarf oder automatisiert ausführen zu lassen. Als Ergebnis kommt "frei" oder "belegt" raus.
Grundsätzlich bin ich auch allen anderen Lösungen gegenüber aufgeschlossen, allerdings bin ich außer bei Batch und Powershell nur wenig bewandert was die Programmierung angeht.
Schon mal vielen Dank für's Lesen dieser Zeilen, hoffentlich kann mir jemand bei meinem Problem helfen!
Schöne Grüße
Tim
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 289120
Url: https://administrator.de/forum/erkennen-ob-remoterechner-gesperrt-ist-289120.html
Ausgedruckt am: 05.04.2025 um 14:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo lowrider,
ohne Dir weder die PS noch batch-Details liefern zu können, vielleicht hilft folgende Idee: Über die Computerverwaltung lässt sich z.B. die Ereignisanzeige (und dort An- und Abmeldeinformationen) eines Remote-Computers auslesen. Was ich (als PS-Laie) manuell über Systemsteuerung > Computerverwaltung > Ereignisanzeige > Verbindung mit anderem Computer herstellen ... bewerkstellige, wird Dir ein PS-Profi (oder Du selbst) sicher in ein Skript umsetzen können.
Nur am Rande: Laufen denn Deine Kellerkinder auch mit Win7?
Achja, und noch eine ganz andere Lösung: Weise die Keller-PCs doch einfach jeweils einer Arbeitsgruppe zu, die sich dann per Flurfunk über die Verfügbarkeit verständigt...
Gruß Spinnifex
ohne Dir weder die PS noch batch-Details liefern zu können, vielleicht hilft folgende Idee: Über die Computerverwaltung lässt sich z.B. die Ereignisanzeige (und dort An- und Abmeldeinformationen) eines Remote-Computers auslesen. Was ich (als PS-Laie) manuell über Systemsteuerung > Computerverwaltung > Ereignisanzeige > Verbindung mit anderem Computer herstellen ... bewerkstellige, wird Dir ein PS-Profi (oder Du selbst) sicher in ein Skript umsetzen können.
Nur am Rande: Laufen denn Deine Kellerkinder auch mit Win7?
Achja, und noch eine ganz andere Lösung: Weise die Keller-PCs doch einfach jeweils einer Arbeitsgruppe zu, die sich dann per Flurfunk über die Verfügbarkeit verständigt...
Gruß Spinnifex
Hi.
Ich schlage folgenden einfachen Weg vor: stell im taskscheduler der Clusterrechner ein paar Tasks ein, die von einem Trigger gestartet werden, der wahlweise "on workstation lock" oder "at logoff" usw. ist. Dann lässt Du die Tasks einfach eine Datei auf eine Freigabe schreiben: %computername%_istfrei / %computername%_inVerwendung / %computername%_ist_gesperrt
Ich schlage folgenden einfachen Weg vor: stell im taskscheduler der Clusterrechner ein paar Tasks ein, die von einem Trigger gestartet werden, der wahlweise "on workstation lock" oder "at logoff" usw. ist. Dann lässt Du die Tasks einfach eine Datei auf eine Freigabe schreiben: %computername%_istfrei / %computername%_inVerwendung / %computername%_ist_gesperrt

Mit Powershell kann man so ermitteln ob der Rechner gerade auf dem Anmeldebildschirm hängt:
Gruß jodel32
if (!(gwmi win32_process -ComputerName COMPUTERXYZ -Filter "Name = 'logonui.exe'")){
write-host "Benutzer sind aktiv"
}else{
write-host "Anmeldebildschirm aktiv"
}
Hallöchen,
Der TO spricht aber von Remote Sessions...
Grundsätzlich beantwortet das seine Frage nach Sperrbildschirm und/oder Screensaver, aber in diesem Fall würde die LogonUI immer laufen. Denn die Anwender sind ja vie RDP verbunden.
Es wäre also sinnvoller, die jeweiligen Sessions zu enumerieren und dessen Status zu prüfen.
Somit könnte man dann sogar - wenn man es rechnerübergreifend gestaltet - eine Art Dispatcher selbst bauen.
Beste Grüße
Dominique
Der TO spricht aber von Remote Sessions...
Grundsätzlich beantwortet das seine Frage nach Sperrbildschirm und/oder Screensaver, aber in diesem Fall würde die LogonUI immer laufen. Denn die Anwender sind ja vie RDP verbunden.
Es wäre also sinnvoller, die jeweiligen Sessions zu enumerieren und dessen Status zu prüfen.
Somit könnte man dann sogar - wenn man es rechnerübergreifend gestaltet - eine Art Dispatcher selbst bauen.
Beste Grüße
Dominique
Hallo Tim,
Jodel32s Lösung fragt, ob der Prozess "LogonUI" läuft.
Dieser repräsentiert die Anmeldemaske. An einem normalen Client, an dem sich nur über die Console Session (Direkt vor dem Schirm) angemeldet wird, funktioniert die Abfrage genau, wie sie soll.
Ist der Rechner gesperrt, läuft LogonUI; ist er in Verwendung, läuft er nicht.
In deiner Konstellation melden sich die User aber via MSTSC an dem Gerät an - also über Netzwerk.
Das bedeutet, gehst du in den Keller und schaust auf den Monitor (wenn vorhanden), wirst du eine Anmeldemaske sehen.
LogonUI läuft also, egal ob der User angemeldet ist oder nicht.
Es gäbe da noch _Query User_, welches eine Tabelle der aktuell angemeldeten User ausgibt.
Diese könnte ein Script im Vorfeld remote ausführen. Du könntest auch einen weiteren Rechner aufbauen, der als eine Art Dispatcher fungiert und den Status regelmäßig abfragt. Ein Script auf den Clients holt sich diesen Status und verbindet anhanddessen automatisch auf das richtige, noch freie System.
Beste Grüße
Dominique
Jodel32s Lösung fragt, ob der Prozess "LogonUI" läuft.
Dieser repräsentiert die Anmeldemaske. An einem normalen Client, an dem sich nur über die Console Session (Direkt vor dem Schirm) angemeldet wird, funktioniert die Abfrage genau, wie sie soll.
Ist der Rechner gesperrt, läuft LogonUI; ist er in Verwendung, läuft er nicht.
In deiner Konstellation melden sich die User aber via MSTSC an dem Gerät an - also über Netzwerk.
Das bedeutet, gehst du in den Keller und schaust auf den Monitor (wenn vorhanden), wirst du eine Anmeldemaske sehen.
LogonUI läuft also, egal ob der User angemeldet ist oder nicht.
Es gäbe da noch _Query User_, welches eine Tabelle der aktuell angemeldeten User ausgibt.
Diese könnte ein Script im Vorfeld remote ausführen. Du könntest auch einen weiteren Rechner aufbauen, der als eine Art Dispatcher fungiert und den Status regelmäßig abfragt. Ein Script auf den Clients holt sich diesen Status und verbindet anhanddessen automatisch auf das richtige, noch freie System.
Beste Grüße
Dominique

Remote Sessions lassen sich über die WMI Klasse Win32_LogonSession abfragen, wobei man dann den LogonType auf den Wert 2 und 10 auswertet.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394189(v=vs.8 ...
Gruß jodel32
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394189(v=vs.8 ...
Gruß jodel32