This particular RDP failure mode is especially frustrating because it provides zero feedback - the client appears to authenticate successfully (wrong credentials are properly rejected), shows connection progress messages, then silently returns to the connection window. Here's what's happening under the hood:
// Typical RDP connection sequence when working:
1. Credential validation (NLA)
2. Session allocation (TermService)
3. Display driver initialization
4. Session establishment
// Failed sequence in our case:
1. Credential validation √
2. Session allocation ?
3. Display driver ?
4. Session establishment X
Since this occurs after a reboot, we need to check services that initialize late in the boot process:
# PowerShell check for critical services
Get-Service -Name TermService, SessionEnv, UmRdpService |
Select Name, Status, StartType | Format-Table -AutoSize
Common findings in this scenario:
- TermService starts but fails to create sessions
- UmRdpService (Remote Desktop USB Redirector) stuck in "Starting"
- SessionEnv (Remote Desktop Configuration) set to Manual but not triggered
Even though basic connectivity exists, we should verify RDP-specific ports:
# Test-NetConnection equivalent for RDP ports
Test-NetConnection -ComputerName [SERVER] -Port 3389
Test-NetConnection -ComputerName [SERVER] -Port 3390 # Possible secondary port
When standard troubleshooting fails, these registry tweaks often resolve silent connection issues:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"UserAuthentication"=dword:00000001
"SecurityLayer"=dword:00000002
For persistent cases, enable RDP logging and analyze the events:
# Enable enhanced RDP logging
wevtutil set-log Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational /enabled:true
wevtutil set-log Microsoft-Windows-TerminalServices-RdpClient/Operational /enabled:true
# After repro attempt, export logs
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" |
Where-Object {$_.Id -in (21,22,23,24,25,1149)} | Format-List
Try these rapid solutions in order:
- Restart the Remote Desktop Services service cluster:
Restart-Service -Name TermService -Force Restart-Service -Name SessionEnv -Force
- Reset the RDP listener:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0 Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1
- Recreate the RDP certificate:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\" -Name "SSLCertificateSHA1Hash" -Value ""
This particular RDP failure mode is especially frustrating because it provides zero feedback about what's going wrong. Here's what we know:
- Connection was working prior to server reboot
- Credentials are being accepted (invalid credentials get rejected)
- Session appears to initiate but silently terminates
- Other remote machines remain accessible
Before diving deep, let's check some basic network connectivity:
# Test basic TCP connectivity
Test-NetConnection -ComputerName [SERVER] -Port 3389
# Check RDP service status remotely (requires WinRM enabled)
Invoke-Command -ComputerName [SERVER] -ScriptBlock { Get-Service TermService }
From my experience, these are the most likely causes when RDP fails silently post-reboot:
1. Licensing Service Issues
Windows servers require RDP licensing components. Check with:
Get-WmiObject -Class Win32_TSLicenseKeyPack -Namespace "root\cimv2\TerminalServices"
2. User Profile Service Glitches
A corrupted user profile can cause silent failures. Try creating a test local admin account:
net user tempadmin "P@ssw0rd!" /add
net localgroup administrators tempadmin /add
Event Log Analysis
Check these critical event logs remotely using PowerShell:
$session = New-PSSession -ComputerName [SERVER]
Invoke-Command -Session $session -ScriptBlock {
Get-EventLog -LogName Application -Source "TerminalServices*" -Newest 20
Get-EventLog -LogName System -Source "TermService" -Newest 10
}
Network Level Tracing
Capture network traffic during connection attempt:
netsh trace start scenario=NetConnection capture=yes tracefile=C:\temp\rdptrace.etl
netsh trace stop
These registry values often cause silent RDP failures:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication
When RDP fails, try these workarounds while troubleshooting:
- Windows Admin Center (WAC) if configured
- SSH (Windows 2019+) with remote PowerShell
- Emergency Management Services (EMS) console
If all else fails, boot the server in Safe Mode with Networking and test RDP:
bcdedit /set {default} safeboot network
shutdown /r /t 0