Windows Server 2019: risolvere il blocco “Please wait for the Remote Desktop configuration” causato da UPD

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.

Indice

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:

  1. Il Session Host verifica la raggiungibilità dello share e la presenza del VHDX associato all’utente.
  2. Tenta il mount del VHDX tramite i servizi di virtual disk/Hyper‑V e lo collega come volume nella sessione utente.
  3. 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

PassoCosa farePerché è utile
1Test 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.
2Controllo 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.
3Verifica 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.
4Riavvio 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

  1. 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.
  2. 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.
  3. Servizi RDS/Virtual Disk instabili dopo aggiornamenti, snapshot o manutenzioni. Dipendenze (DNS, SMB) non ancora disponibili all’avvio possono causare errori.
  4. Spazio insufficiente o quota superata sul volume dei profili; UPD non può espandersi o creare differenziali e il logon fallisce.

Soluzioni pragmatiche

SituazioneRimedio rapidoAzione definitiva
Share UPD irraggiungibileRipristinare 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/corrottoSmontare 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 instabiliRiavviare servizi Remote Desktop Services (termservice) o l’intero server.Aggiornare driver/patch, validare licenze RDS, configurare avvio ritardato dipendenze (SMB, DNS).
Spazio disco esauritoLiberare 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

  1. Identifica l’handle dal file server: Get-SmbOpenFile | Where-Object {$_.Path -like "UVHD-.vhdx"} | Select-Object -Property FileId, ClientComputerName, SessionId, Path, LockState
  2. 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
  3. 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"
  4. Se il file è incoerente: chkdsk X: /f # dove X: è la lettera assegnata dopo il mount Esegui chkdsk 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:

  1. Disattiva temporaneamente UPD nella collezione RDS o criterio equivalente, quindi riavvia il servizio TermService. Gli utenti accederanno con profili temporanei (dati non persistenti).
  2. Verifica il rientro degli utenti e comunica che i dati personali potrebbero non essere disponibili fino al ripristino dei VHDX.
  3. 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.

Indice