RDP User per Skript abmelden
Hallo zusammen,
wir haben einen RDP-Server auf Windows Server 2019.
Ich würde gerne regelmäßig alle getrennten User außer einem bestimmten User automatisch abmelden.
Hat jemand eine Idee, wie man das umsetzen kann.
Da es sich nur um wenige User handelt, wollte ich ein Skript erstellen, was die User nacheinander abmeldet. Rwinsta oder logoff benötigen aber immer die Session-ID.
Kann ich irgendwie die Session-ID eines Users abfragen und übergeben?
wir haben einen RDP-Server auf Windows Server 2019.
Ich würde gerne regelmäßig alle getrennten User außer einem bestimmten User automatisch abmelden.
Hat jemand eine Idee, wie man das umsetzen kann.
Da es sich nur um wenige User handelt, wollte ich ein Skript erstellen, was die User nacheinander abmeldet. Rwinsta oder logoff benötigen aber immer die Session-ID.
Kann ich irgendwie die Session-ID eines Users abfragen und übergeben?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671422
Url: https://administrator.de/forum/rdp-user-per-skript-abmelden-671422.html
Ausgedruckt am: 20.02.2025 um 10:02 Uhr
10 Kommentare
Neuester Kommentar
Mit qwinsta bekommst du die IDs der aktiven Sessions.
https://www.windows-faq.de/2018/08/29/rdp-informationen-abfragen-mit-qwi ...
https://www.windows-faq.de/2018/08/29/rdp-informationen-abfragen-mit-qwi ...
Vor einigen Jahren hatte ich hier ne ähnliche Frage gestellt, weil auch so ein Problem mit RDP-Usern habe. Ein User hier hat mir folgenden Code gebastelt.
Ich lasse dieses Script alle 15 Minuten über die Aufgabenplanung laufen.
@chcp 1252
@echo on
@cls
echo.
echo Dieses Script meldet alle Benutzer(ausser USERNAME_1,USERNAME_2, Administrator) mit dem Status "Getrennt" ab
echo.
for /f "tokens=1-3" %%a in ('query user ^| findstr /ilc:"Getr." ^| findstr /ilvc:"USERNAME_1" ^| findstr /ilvc:"USERNAME_2" ^| findstr /ilvc:"administrator"') do logoff %%b
exit
Ich lasse dieses Script alle 15 Minuten über die Aufgabenplanung laufen.
Ich stimme auch ganz klar hier für die GPO Lösung mit Sitzungslimit. Aber ich habe gerade ein ähnliches Problem und bastel gerade an einem Speziellen PowerShell Skript dafür. Fragt Benutzer ab und meldet diesen an allen Server im Array ab, wenn getrennt.
Ist noch absolut im Entwicklungsstadium, aber vielleicht hilft es Dir ja. Funktion ist schon so weit gegeben müsste halt aufgehübscht werden und mehr Fehler Korrekturen haben.
Ist noch absolut im Entwicklungsstadium, aber vielleicht hilft es Dir ja. Funktion ist schon so weit gegeben müsste halt aufgehübscht werden und mehr Fehler Korrekturen haben.
## Abmelde Skript für Benutzer an Servern.
<#
Informationen abfragen= Benuztername
#>
$Benutzerzumabmelden = $null
function readuser321 () {
[Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
$msg = 'Enter User name:'
$title = 'UserName'
#$default = $null # optional default value
$default = "" # optional default value
$global:Benutzerzumabmelden = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title, $default)
}
while (!($Benutzerzumabmelden)) {
#Write-host "true"
readuser321
#Write-Output ""schleife" + $Benutzerzumabmelden"
}
#############################
$title = 'Benutzer abmelden'
$question = 'Wirklich überall abmelden ?'
$choices = '&Ja', '&Nein'
$ergebnisseTabelle = @()
$remotecomputerArray = @()
$ergebnisseTabelle = @()
$pcNamen = @()
$remotecomputerArray +=
"server1.de",
"192.168.0.1",
"server02.contoso.de"
cls
# Überprüfen, ob die Computer online sind
foreach ($computer in $remotecomputerArray) {
if (Test-Connection -ComputerName $computer -Count 1 -Quiet) {
$pcNamen += $computer
}else {
Write-Output "$computer Offline"}
}
foreach ($pcName in $pcNamen) {
try {
$SitzungsID = $null
# Führe die quser-Abfrage aus, um den angemeldeten Benutzer zu erhalten
$quserOutput = quser /server:$pcName 2>$null
$SitzungsID = (($quserOutput | Select-Object -Skip 1 | Where-Object { $_ -like $Benutzerzumabmelden }) -split ‚ + ‚ )[1]
$gefundene = "Server: " + $pcName + ($quserOutput | Select-Object -Skip 1| Where-Object { $_ -like $Benutzerzumabmelden })
#write-output " Gefunden auf: $gefundene"
#$SitzungsID = ((quser /server:$pcName | Where-Object { $_ -match $Benutzerzumabmelden }) -split ‚ + ‚ )[1]
if ($SitzungsID){
$ergebnis = [PSCustomObject]@{
'server' = $pcName
'benutzer' = $Benutzerzumabmelden
'ID' = $SitzungsID
}
$ergebnisseTabelle += $ergebnis
} else {
Write-Output "Benutzername nicht gefunden oder niemand angemeldet auf $pcName."
} #>
} catch {
Write-Output "Fehler beim Abrufen von Informationen für $pcName."
}
}
Write-Output "Gefundene Anmeldungen:"
Write-Output $ergebnisseTabelle |ft -AutoSize
#Write-Output $ergebnisseTabelle.Count
#logoff /server:$pcName $SitzungsID
Write-Output "Sollen diese Abgemeldet werden?"
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
foreach ($server in $ergebnisseTabelle)
{
Write-Output "Melde ab: $($server.server) ID: $($server.ID)"
logoff /server:$server.server $server.ID
}
}else {
write-Output "Abgebochen"}
Hallo,
wir benutzen derzeit über die Aufgabenplanung in Windows dies hier:
@echo off
query session >session.txt
for /f "eol=> skip=2 tokens=1,2,3," %%i in (session.txt) DO (
REM Nutzer prüfen, ob er "netadmin" ist
if "%%i"=="%hier Name eingeben%" (
echo Nutzer %%i wird nicht abgemeldet.
) else (
if "%%k" == "Getr." (
REM Getrennte Verbindungen killen
echo Getrennte Sitzung: %%i %%j
logoff %%j
) else (
REM Aktive Verbindungen killen
echo Aktive Sitzung: %%i %%k
logoff %%k
)
)
)
del session.txt
wir benutzen derzeit über die Aufgabenplanung in Windows dies hier:
@echo off
query session >session.txt
for /f "eol=> skip=2 tokens=1,2,3," %%i in (session.txt) DO (
REM Nutzer prüfen, ob er "netadmin" ist
if "%%i"=="%hier Name eingeben%" (
echo Nutzer %%i wird nicht abgemeldet.
) else (
if "%%k" == "Getr." (
REM Getrennte Verbindungen killen
echo Getrennte Sitzung: %%i %%j
logoff %%j
) else (
REM Aktive Verbindungen killen
echo Aktive Sitzung: %%i %%k
logoff %%k
)
)
)
del session.txt
Zitat von @niraxx:
Vielen Dank für die Skripte, die werde ich mal austesten.
Sehen jedenfalls passend aus!
Bei der Lösung per GPO müsste ich eine Gruppe erstellen, auf deren Mitglieder die Einstellung wirken soll.
Ist in der Umgebung hier kompliziert umzusetzen ...
Vielen Dank für die Skripte, die werde ich mal austesten.
Sehen jedenfalls passend aus!
Bei der Lösung per GPO müsste ich eine Gruppe erstellen, auf deren Mitglieder die Einstellung wirken soll.
Ist in der Umgebung hier kompliziert umzusetzen ...
Ja,
hört sich erstmalso an, aber, du hast eine Zentrale Steuerung des Ganzen.
Mit Skripts hast du weitere Fehlerquellen, und bei der Fehlersuche ...