RDP-Fehler: gesperrtes Windows-Konto entsperren (PowerShell)
Ein gesperrtes Windows-Konto beim RDP-Login ist meist die Folge automatisierter Angriffe. Dieses PowerShell-Skript entsperrt das Konto, zeigt die Quell-IPs und passt die Sperrrichtlinie an.
Ihre Remote-Desktop-Anmeldung schlägt plötzlich fehl, und Windows meldet sinngemäß: "Aus Sicherheitsgründen wurde das Benutzerkonto gesperrt, da zu viele Anmeldeversuche oder Kennwortänderungsversuche unternommen wurden." Dann hat das Konto die Kontosperrungsrichtlinie von Windows ausgelöst. Die Ursache ist fast immer dieselbe: jemand oder etwas hat Ihren RDP-Zugang aus dem Internet mit Anmeldeversuchen bombardiert.
In dieser Anleitung zeigen wir Ihnen, wie Sie das Konto entsperren, herausfinden, welche IP-Adressen die Sperren auslösen, und die Sperrrichtlinie anpassen oder deaktivieren. Alles davon erledigt ein einziges PowerShell-Skript, ganz ohne Klickarbeit im Gruppenrichtlinien-Editor.
Warum wird ein Windows-Konto beim RDP-Login gesperrt?
Windows zählt fehlgeschlagene Anmeldeversuche und sperrt ein Konto, sobald die eingestellte Schwelle erreicht ist. Diese Schutzfunktion ist sinnvoll, wird aber zum Problem, sobald der RDP-Port offen im Internet steht: automatisierte Bots probieren dann rund um die Uhr Passwörter durch und sperren dabei genau das Konto aus, mit dem Sie selbst arbeiten möchten.
Drei Werte bestimmen das Verhalten:
- Sperrschwelle: Anzahl der Fehlversuche bis zur Sperre
- Sperrdauer: Minuten, die das Konto gesperrt bleibt
- Zeitfenster: Minuten, über die Fehlversuche zusammengezählt werden
PowerShell als Administrator öffnen
Öffnen Sie die Windows PowerShell als Administrator. Klicken Sie dazu im Startmenü mit der rechten Maustaste auf "Windows PowerShell" und wählen Sie "Als Administrator ausführen". Ohne erhöhte Rechte kann das Skript weder das Konto entsperren noch die Richtlinie ändern.
Das Skript: Konto entsperren und Angreifer sichtbar machen
Passen Sie im Abschnitt "Einstellungen" den Kontonamen und die gewünschten Werte an und fügen Sie das Skript anschließend in die PowerShell ein:
#Requires -RunAsAdministrator
# KernelHost: gesperrtes Windows-RDP-Konto entsperren und Ursache finden
# In der Windows PowerShell als Administrator ausführen.
# ----------------------------------------------------------------------------
# Einstellungen: bitte an Ihre Umgebung anpassen
# ----------------------------------------------------------------------------
$Username = 'Administrator' # das lokale Konto, das entsperrt werden soll
$ApplyPolicy = $true # $false, wenn die Sperrrichtlinie unverändert bleiben soll
$LockoutThreshold = 10 # Fehlversuche bis zur Sperre (0 = Sperre DEAKTIVIEREN)
$LockoutDuration = 15 # Minuten, die das Konto gesperrt bleibt
$LockoutWindow = 15 # Minuten, über die Fehlversuche gezählt werden
# ----------------------------------------------------------------------------
# 1) Aktuelle Sperrrichtlinie anzeigen
Write-Host "`n=== 1) Aktuelle Sperrrichtlinie ===" -ForegroundColor Cyan
net accounts | Select-String 'Lockout|Sperr'
# 2) Konto entsperren
Write-Host "`n=== 2) Konto '$Username' entsperren ===" -ForegroundColor Cyan
try {
$user = [ADSI]"WinNT://$env:COMPUTERNAME/$Username,user"
if ($user.InvokeGet('IsAccountLocked')) {
$user.InvokeSet('IsAccountLocked', $false)
$user.SetInfo()
Write-Host " '$Username' war gesperrt und ist jetzt ENTSPERRT." -ForegroundColor Green
} else {
Write-Host " '$Username' ist nicht gesperrt." -ForegroundColor Yellow
}
} catch {
Write-Warning " '$Username' konnte nicht entsperrt werden: $($_.Exception.Message)"
}
# 3) Optional: Sperrrichtlinie anpassen oder deaktivieren
if ($ApplyPolicy) {
Write-Host "`n=== 3) Sperrrichtlinie setzen ===" -ForegroundColor Cyan
if ($LockoutThreshold -eq 0) {
net accounts /lockoutthreshold:0 | Out-Null
Write-Host " Kontosperrung DEAKTIVIERT (Schwelle 0)." -ForegroundColor Yellow
Write-Warning " Auf einem öffentlich erreichbaren Server ist das NICHT empfohlen."
} else {
net accounts /lockoutthreshold:$LockoutThreshold /lockoutduration:$LockoutDuration /lockoutwindow:$LockoutWindow | Out-Null
Write-Host " Schwelle=$LockoutThreshold Dauer=$LockoutDuration Min Zeitfenster=$LockoutWindow Min" -ForegroundColor Green
}
}
# 4) Wer löst die Sperren aus? (Quellen der RDP-Angriffe)
Write-Host "`n=== 4a) Letzte Sperr-Ereignisse (Security-ID 4740) ===" -ForegroundColor Cyan
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4740} -MaxEvents 10 -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml()
[pscustomobject]@{
Zeit = $_.TimeCreated
GesperrtesKonto = ($x.Event.EventData.Data | Where-Object { $_.Name -eq 'TargetUserName' }).'#text'
Quelle = ($x.Event.EventData.Data | Where-Object { $_.Name -eq 'TargetDomainName' }).'#text'
}
} | Format-Table -AutoSize
Write-Host "=== 4b) Häufigste Quell-IPs fehlgeschlagener Anmeldungen, letzte 24h (Security-ID 4625) ===" -ForegroundColor Cyan
$since = (Get-Date).AddHours(-24)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=$since} -ErrorAction SilentlyContinue |
ForEach-Object {
([xml]$_.ToXml()).Event.EventData.Data |
Where-Object { $_.Name -eq 'IpAddress' } | Select-Object -ExpandProperty '#text'
} |
Where-Object { $_ -and $_ -ne '-' } |
Group-Object | Sort-Object Count -Descending | Select-Object -First 10 |
Format-Table Count, @{N='QuellIP'; E={$_.Name}} -AutoSize
Was das Skript im Einzelnen macht
- Es zeigt über
net accountsdie aktuelle Kontosperrungsrichtlinie an, also Schwelle, Sperrdauer und Zeitfenster. - Es entsperrt das unter
$Usernameeingetragene Konto über den WinNT-Verzeichnisanbieter. Das ist die Entsprechung vonUnlock-ADAccountfür lokale Konten. - Es passt die Richtlinie an, sofern
$ApplyPolicyauf$truesteht. Mit den Vorgabewerten wird die Sperre weniger aggressiv, mit$LockoutThreshold = 0schalten Sie sie vollständig ab. - Es listet die letzten Sperr-Ereignisse (Ereignis-ID 4740) sowie die häufigsten Quell-IP-Adressen fehlgeschlagener Anmeldungen der letzten 24 Stunden (Ereignis-ID 4625) auf. Das sind die Adressen, von denen aus Ihr RDP-Zugang angegriffen wird.
Hinweis zur Sprache: Auf einem deutschsprachigen Windows gibt net accounts die Werte unter deutschen Bezeichnungen aus. Deshalb filtert das Skript oben sowohl nach "Lockout" als auch nach "Sperr".
Lokales Konto oder Domänenkonto?
Das Skript spricht ein lokales Konto an, also den typischen Fall auf einem einzeln stehenden vServer oder Rootserver. Handelt es sich um ein Domänenkonto oder arbeiten Sie auf einem Domänencontroller, entsperren Sie das Konto stattdessen mit:
Unlock-ADAccount -Identity <Benutzername>
Sperrschwelle anpassen oder deaktivieren
Mit $LockoutThreshold = 0 schalten Sie den Sperrschutz komplett aus. Auf einem Server, der aus dem Internet erreichbar ist, raten wir davon ab: ohne Sperre kann ein Angreifer beliebig viele Passwörter durchprobieren. Sinnvoller ist eine moderate Schwelle, etwa 10 Fehlversuche, kombiniert mit den Maßnahmen aus dem nächsten Abschnitt.
Ursache beseitigen: RDP dauerhaft absichern
Ein gesperrtes Konto ist nur das Symptom. Die eigentliche Ursache ist ein RDP-Zugang, der für das gesamte Internet offen steht. Diese vier Maßnahmen beseitigen das Problem an der Wurzel.
RDP auf die eigene IP-Adresse begrenzen
Das ist die mit Abstand wirksamste Maßnahme. Ist RDP nur noch von Ihrer eigenen Adresse aus erreichbar, laufen sämtliche automatisierten Angriffe ins Leere:
# Eingehendes RDP nur noch von der eigenen IP-Adresse erlauben
Set-NetFirewallRule -DisplayName 'Remote Desktop - User Mode (TCP-In)' -RemoteAddress '203.0.113.5'
Der angegebene Anzeigename gilt für ein englischsprachiges Windows. Auf einem deutschsprachigen System lautet er anders. Die vorhandenen Regeln und ihre genauen Bezeichnungen listen Sie mit Get-NetFirewallRule -DisplayGroup 'Remotedesktop' auf.
Einzelne Angreifer-IP blockieren
Für die Adressen, die Ihnen Schritt 4b des Skripts ausgibt, legen Sie gezielt eine Sperrregel an:
New-NetFirewallRule -DisplayName 'Block RDP attacker 203.0.113.9' -Direction Inbound -Action Block -RemoteAddress '203.0.113.9'
Das hilft gegen einzelne hartnäckige Quellen, ersetzt aber keine Beschränkung auf die eigene IP-Adresse, weil Angreifer laufend neue Adressen verwenden.
RDP-Port ändern
Wenn RDP nicht mehr auf dem Standardport 3389 lauscht, finden die üblichen Massenscans Ihren Dienst gar nicht erst. Wie Sie den Port ohne Server-Neustart umstellen, zeigt unsere Anleitung RDP-Port unter Windows ohne Neustart ändern.
Starkes Passwort und Network Level Authentication
Verwenden Sie ein langes, zufälliges Passwort und lassen Sie Network Level Authentication (NLA) aktiviert. NLA verlangt die Authentifizierung, bevor überhaupt eine Sitzung aufgebaut wird, und wehrt damit einen großen Teil der automatisierten Versuche bereits im Vorfeld ab.
Häufige Fragen
Warum wird mein Windows-Konto beim RDP-Login gesperrt?
Wie lange bleibt ein gesperrtes Konto gesperrt?
Sollte ich die Kontosperrung ganz deaktivieren?
Wie finde ich heraus, welche IP-Adressen mein Konto sperren?
Das Skript entsperrt mein Konto nicht, woran liegt das?
2026 KernelHost GmbH. Alle Rechte vorbehalten. Diese Anleitung ist urheberrechtlich geschützt. Eine Veröffentlichung auf anderen Webseiten, auch auszugsweise oder in bearbeiteter Form, ist ohne unsere schriftliche Zustimmung nicht gestattet. Zitate mit Quellenangabe und Link sind ausdrücklich willkommen.

