Su Windows Server 2019 può capitare che l’accesso via Remote Desktop resti bloccato sul messaggio “Please wait for the Remote Desktop configuration”. Nella grande maggioranza dei casi la radice del problema è lo storage dei profili utente (User Profile Disks, UPD). In questa guida trovi verifiche, rimedi e prevenzione.
Sintomi e contesto
I client RDP inseriscono le credenziali, la connessione viene accettata, ma la sessione rimane ferma su “Please wait for the Remote Desktop configuration”. Il comportamento è spesso intermittente (alcuni utenti entrano, altri no) e si accentua nelle ore di picco. In ambienti con Remote Desktop Session Host (singolo o farm) i profili utente risiedono su uno share di rete e vengono montati come VHDX (User Profile Disks). Se questo montaggio fallisce o impiega troppo tempo, l’handshake di logon resta sospeso.
Come funziona UPD e perché può bloccare il logon
Con UPD ogni utente possiede un file .vhdx
archiviato in una cartella condivisa (es. \\server\UPD$
). All’avvio della sessione:
- Il Session Host verifica la raggiungibilità dello share e la presenza del VHDX associato all’utente.
- Tenta il mount del VHDX tramite i servizi di virtual disk/Hyper‑V e lo collega come volume nella sessione utente.
- Il servizio User Profile Service carica hive e cartelle dal disco montato e completa il logon.
Se la rete è lenta o lo share non risponde, se il file VHDX è corrotto o bloccato da un altro handle, o se i servizi RDS/Virtual Disk sono in stato anomalo, l’operazione non termina e la schermata “Please wait…” rimane visibile finché non scade il timeout o finché non interviene un operatore.
Verifiche consigliate
Passo | Cosa fare | Perché è utile |
---|---|---|
1 | Test di connettività al file share dei profili (UPD): usare Esplora risorse o \\server\UPD$ da un altro host. | Se lo share non risponde o è lento, i profili non vengono montati e la sessione resta in sospeso. |
2 | Controllo Event Viewer → Applications and Services Logs ▶ Microsoft ▶ Windows ▶ RemoteDesktopServices‑RdpCoreTS / RDS‑Server e log del file server. | Errori su rete, permessi NTFS/SMB, o mancato montaggio dei VHDX UPD indicano la causa. |
3 | Verifica stato disco e quota sul server che ospita lo share (spazio libero, salute RAID/NAS, latenza). | Storage esaurito o degradato blocca l’aggancio dei profili. |
4 | Riavvio controllato del Session Host e, se separato, del file‑server. | Rilancia servizi RDS e SMB, talvolta elimina lock temporanei su VHDX. |
Dettagli operativi per ciascun passo
Connettività e velocità verso lo share UPD
- Da un host amministrativo: apri
\\server\UPD$
e misura il tempo di risposta. Prova a copiare un file di test (5–50 MB) dentro una sottocartella di salute (es.\\server\UPD$\_health
). - Verifica la porta SMB:
Test-NetConnection server -Port 445
. - Dal file server: elenca le share e le sessioni correnti:
Get-SmbShare Get-SmbSession | Sort-Object -Property NumOpens -Descending | Select-Object -First 10 Get-SmbOpenFile | Where-Object {$_.Path -like "*.vhdx"}
- Controlla DNS e latenza di rete (ping/jitter). DNS errato o WINS obsoleto rallenta la risoluzione del percorso UNC.
Event Viewer e tracce utili
- RemoteDesktopServices‑RdpCoreTS / Operational: problemi di handshake RDP, TLS, canali virtuali.
- RemoteDesktopServices‑RDS‑Server: errori nel provisioning/montaggio dei profili.
- User Profile Service (Registro applicazioni e canali Microsoft‑Windows‑User Profile Service): eventi tipici su profili temporanei, hive non caricabili o file in uso (esempi: ID 1511, 1509, 1530).
- SMBClient/SMBServer: accessi negati, share offline, perdita di connessioni.
- Filtri veloci con PowerShell:
$logs = @( 'Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational', 'Microsoft-Windows-RemoteDesktopServices-RemoteDesktopSessionManager/Operational', 'Microsoft-Windows-User Profile Service/Operational', 'Microsoft-Windows-SMBClient/Connectivity', 'Microsoft-Windows-SMBServer/Operational' ) $since = (Get-Date).AddHours(-6) $logs | ForEach-Object { Get-WinEvent -LogName $_ -ErrorAction SilentlyContinue | Where-Object { $_.TimeCreated -ge $since } | Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message }
Capacità e salute dello storage
- Controlla spazio libero e quota:
Get-Volume | Sort-Object -Property DriveLetter Get-PSDrive -PSProvider FileSystem
- Se usi FSRM o quote: verifica soglie e notifiche; un superamento quota può impedire la creazione/espansione dei VHDX.
- Verifica stato RAID/NAS/SAN: ricostruzioni in corso, dischi degradati o write‑back cache disattivata aumentano la latenza e possono mandare in timeout il montaggio.
Riavvio dei servizi
- Talvolta basta riavviare i servizi senza riavviare il server:
Restart-Service -Name TermService -Force Restart-Service -Name LanmanServer -Force # sul file server Restart-Service -Name vmms -Force # Hyper-V Virtual Machine Management, se presente Restart-Service -Name vds -Force # Virtual Disk Service
- Se il problema coinvolge più utenti e non puoi interrompere tutti, valuta un drain mode del Session Host e il riavvio a finestre controllate.
Possibili cause radicate
- Storage UPD non raggiungibile (rete interrotta, share offline, permessi modificati o errati). Spesso dovuto a modifiche ACL dove gli account computer dei Session Host perdono il diritto di scrittura.
- Corruzione o lock dei file VHDX dei profili. Antivirus/backup non VSS‑aware possono trattenere handle sui VHDX; spegnimenti improvvisi possono lasciare il file in stato incoerente.
- Servizi RDS/Virtual Disk instabili dopo aggiornamenti, snapshot o manutenzioni. Dipendenze (DNS, SMB) non ancora disponibili all’avvio possono causare errori.
- Spazio insufficiente o quota superata sul volume dei profili; UPD non può espandersi o creare differenziali e il logon fallisce.
Soluzioni pragmatiche
Situazione | Rimedio rapido | Azione definitiva |
---|---|---|
Share UPD irraggiungibile | Ripristinare connettività o permessi; in emergenza, disabilitare l’uso di UPD per consentire log‑on con profilo temporaneo. | Migrare lo share su storage affidabile, ridondante e monitorato. |
VHDX bloccato/corrotto | Smontare il file con diskpart o Hyper‑V Manager; se necessario, eseguire chkdsk /f sul VHDX. | Implementare backup coerenti a caldo dei dischi UPD ed evitare AV che li blocchi. |
Servizi RDS instabili | Riavviare servizi Remote Desktop Services (termservice ) o l’intero server. | Aggiornare driver/patch, validare licenze RDS, configurare avvio ritardato dipendenze (SMB, DNS). |
Spazio disco esaurito | Liberare spazio o espandere volume. | Configurare quote, monitoraggio proattivo, pulizia profili obsoleti. |
Permessi corretti sullo share UPD
Un’impostazione robusta e pratica:
- Condivisione: Administrators e SYSTEM Full Control; gruppo dei Session Host (account computer) Change/Full; rimuovi concessioni generiche a Everyone.
- NTFS: Administrators e SYSTEM Full Control ereditabili; gruppo dei Session Host Modify su cartella radice e contenuto; utenti finali non necessitano permessi diretti alla radice.
- Disattiva l’opportunistic locking aggressivo sugli AV o crea esclusioni per
*.vhdx
e cartella UPD.
Gestire un VHDX bloccato
- Identifica l’handle dal file server:
Get-SmbOpenFile | Where-Object {$_.Path -like "UVHD-.vhdx"} | Select-Object -Property FileId, ClientComputerName, SessionId, Path, LockState
- Se confermi che è un lock orfano e l’utente è disconnesso, puoi chiuderlo con cautela:
# ATTENZIONE: interrompe l'handle lato client Close-SmbOpenFile -FileId <ID> -Force
- Valuta un mount in sola lettura per verifiche:
Mount-VHD -Path "\\server\UPD$\UVHD-<SID_utente>.vhdx" -ReadOnly -PassThru | Get-Disk | Get-Partition | Get-Volume Smontaggio Dismount-VHD -Path "\\server\UPD$\UVHD-<SID_utente>.vhdx"
- Se il file è incoerente:
chkdsk X: /f # dove X: è la lettera assegnata dopo il mount
Eseguichkdsk
al di fuori dell’orario di lavoro: su file grandi può richiedere tempo.
Runbook di emergenza
Quando “si deve far entrare tutti” e la radice non è ancora chiara, segui questo percorso fail‑open con rischio minimo:
- Disattiva temporaneamente UPD nella collezione RDS o criterio equivalente, quindi riavvia il servizio TermService. Gli utenti accederanno con profili temporanei (dati non persistenti).
- Verifica il rientro degli utenti e comunica che i dati personali potrebbero non essere disponibili fino al ripristino dei VHDX.
- Stabilisci una finestra per riparare lo storage UPD e riabilitare il montaggio.
Nota: se devi isolare un singolo utente con VHDX danneggiato, rinomina il suo file (es. UVHD‑{SID}.vhdx.bak
) e consenti la creazione di un nuovo profilo, quindi valuta il merge dei dati successivamente.
Analisi avanzata dei log
- Pattern più indicativi:
- Eventi User Profile Service su profilo temporaneo o hive non caricabile (esempi: ID 1511, 1509, 1530) in corrispondenza del timestamp del blocco.
- Avvisi SMB su perdita di sessione, errori STATUSACCESSDENIED o STATUSSHARINGVIOLATION sul percorso del VHDX.
- Errori del servizio Virtual Disk o VDS all’atto del mount.
- Nel file server: picchi di Queue Length e latenze superiori ai 30–50 ms su disco.
- Correlazione temporale: crea una timeline di 15 minuti con eventi RDP, profilo e SMB per misurare la durata del blocco; spesso rivela un collo di bottiglia I/O.
Controlli mirati su spazio e crescita dei profili
- Ricerca dei VHDX più grandi o rapidamente cresciuti:
Get-ChildItem "\\server\UPD$" -Filter *.vhdx -Recurse | Select-Object FullName, Length, LastWriteTime | Sort-Object Length -Descending | Select-Object -First 20
- Se usi deduplica o compressione sul volume UPD, verifica i job in coda: un job aggressivo può impattare il montaggio durante orari di punta.
- Stima di headroom: mantieni almeno 15–20% di spazio libero sul volume per evitare frammentazione e crescite dinamiche lente.
Automazione con PowerShell
Test periodico di salute dello share UPD
function Test-UpdShare {
param(
[Parameter(Mandatory)] [string] $Path, # es. \\server\UPD$
[int] $SizeMB = 5,
[int] $TimeoutSec = 10
)
$tmp = Join-Path $Path ("health\test{0}.bin" -f (Get-Date -Format "yyyyMMdd_HHmmss"))
$buf = New-Object byte[] ($SizeMB * 1MB)
[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($buf)
$sw = [Diagnostics.Stopwatch]::StartNew()
try {
if (-not (Test-Path (Split-Path $tmp))) { New-Item -ItemType Directory -Force -Path (Split-Path $tmp) | Out-Null }
[IO.File]::WriteAllBytes($tmp, $buf)
$writeMs = $sw.ElapsedMilliseconds
$null = Get-Content $tmp -ReadCount 0 | Out-Null
$readMs = $sw.ElapsedMilliseconds - $writeMs
Remove-Item $tmp -Force
[pscustomobject]@{
Path = $Path
WriteMs = $writeMs
ReadMs = $readMs
Ok = ($writeMs -lt ($TimeoutSec1000) -and $readMs -lt ($TimeoutSec1000))
Timestamp= Get-Date
}
} catch {
[pscustomobject]@{ Path=$Path; Error=$_.Exception.Message; Ok=$false; Timestamp=Get-Date }
} finally { $sw.Stop() }
}
Esegui il test ogni 5–10 minuti con Operazioni pianificate e invia alert se Ok
è False
o se i tempi superano le soglie.
Rilevare e chiudere handle orfani sui VHDX
function Find-LockedVhdx {
param([string]$SharePath="\\server\UPD$")
Get-SmbOpenFile | Where-Object {
$_.Path -like (Join-Path $SharePath "*.vhdx")
} | Select-Object FileId, ClientComputerName, SessionId, Path, LockState
}
Chiudi in modo mirato un handle (uso consapevole!)
Close-SmbOpenFile -FileId -Force
Riavvio sicuro dei servizi RDS in finestra di manutenzione
# Metti in drain il Session Host e chiudi sessioni inattive > 30 min
quser
rwinsta <IDsessioneinattiva>
Riavvio servizi chiave
Stop-Service -Name TermService -Force
Start-Service -Name TermService
Prevenzione e buone pratiche
- Storage affidabile: dischi con cache protetta, controller con BBU, rete SMB ridondata (team/LACP o equiv.). Abilita SMB Multichannel se appropriato.
- Quote e pulizia: imposta soglie FSRM e revisione periodica di profili inattivi; elimina o archivia VHDX non usati.
- Backup VSS‑aware: escludi i VHDX aperti o usa snapshot consistenti; evita scanner AV su
*.vhdx
e cartelle UPD. - Controllo dipendenze all’avvio: ritarda il servizio RDS finché DNS/SMB non sono attivi per evitare errori di montaggio a freddo.
- Telemetria: raccogli metriche su latenza SMB, queue disco, tempi di logon; soglie chiare (p. es. logon > 60 s = warning).
- Documentazione: conserva il SID‑to‑user mapping dei VHDX; utile per interventi rapidi su singoli profili.
Domande frequenti
È sempre colpa di UPD? No. Il messaggio può apparire anche con profili roaming tradizionali o profili locali danneggiati. In tal caso controlla la chiave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
e le cartelle %SystemDrive%\Users
.
Posso far entrare alcuni utenti ignorando UPD? Sì: disabilita temporaneamente UPD o applica una GPO mirata al gruppo interessato. Attenzione: i dati non saranno persistenti finché UPD non verrà ripristinato.
Conviene migrare ad altre soluzioni profili? In alcuni scenari è opportuno valutare soluzioni più moderne di gestione profili. Indipendentemente dalla scelta, i principi di storage affidabile, esclusioni AV e backup coerenti restano validi.
Checklist tascabile
- Apri
\\server\UPD$
da un altro host: risponde in tempi ragionevoli? Scrittura/lettura test ok? - Log RDS, User Profile Service, SMB con errori temporali coincidenti con i blocchi?
- Spazio libero > 20% sul volume UPD? Quote non superate?
- VHDX con lock orfani? Chiudili con consapevolezza.
- Servizi RDS/Virtual Disk in stato regolare? Riavvio controllato se necessario.
- Se serve continuità immediata: disattiva temporaneamente UPD e comunica l’uso di profili temporanei.
Appendice di comandi utili
# Rete e SMB
Test-NetConnection server -Port 445
Get-SmbShare
Get-SmbSession | ft ClientComputerName, NumOpens
Get-SmbOpenFile | ? Path -like "*.vhdx"
Individuare rapidamente il VHDX di un utente (da SID)
wmic useraccount where name="" get sid
Mount/umount VHDX
Mount-VHD -Path "\server\UPD$\UVHD-.vhdx" -ReadOnly
Dismount-VHD -Path "\server\UPD$\UVHD-.vhdx"
Spazio e dischi
Get-Volume
Get-PSDrive -PSProvider FileSystem
chkdsk X: /f
Eventi chiave ultime 2 ore
$since=(Get-Date).AddHours(-2)
Get-WinEvent -LogName "Microsoft-Windows-User Profile Service/Operational" | ? TimeCreated -ge $since | select TimeCreated,Id,Message
Conclusioni
Il blocco su “Please wait for the Remote Desktop configuration” è quasi sempre il sintomo di un problema a monte: storage dei profili lento o non disponibile, VHDX bloccati, servizi in stato anomalo o spazio esaurito. Con le verifiche proposte (connettività e velocità verso lo share, lettura mirata dei log, controllo della capacità) e i rimedi pragmatici (sblocco dei VHDX, riavvio dei servizi, disattivazione temporanea di UPD in emergenza) è possibile ripristinare rapidamente l’operatività e prevenire ricadute. Automatizzando i controlli con PowerShell e adottando buone pratiche su storage, backup ed esclusioni antivirus, il messaggio scompare e i logon tornano rapidi e stabili.
Implementando le verifiche di base e ripristinando l’accesso affidabile allo storage dei profili, il messaggio “Please wait for the Remote Desktop configuration” dovrebbe scomparire, consentendo nuovamente logon rapidi e stabili.