Migrazione di Remote Desktop Services Profile

Quando un sistema RDS è articolato su più server ogni utente deve mantenere le proprie impostazioni a prescindere dal server di sessione sul quale viene ad essere collegato.

L’ambiente di configurazione RDS dalla versione 2012 prevede la possibilità di utilizzare gli “User Profile Disks”, in breve si tratta di un disco virtuale che viene agganciato alla sessione utente e dentro il quale è possibile prevedere che vengano redirette tutte o parte delle impostazioni del profilo utente.

Figura 1 Configurazione di User Profile Disks

Già con le precedenti versioni di Terminal Server era (ed è ancora) possibile redigere globalmente il profilo per le connessioni RDS dei singoli utenti verso un’area condivisa.

Questa impostazione è presente nel Tab “Remote Desktop Service Profile” in ADUC

Figura 2 impostazione Di RDS Profile Path

Nel caso ci si trovi a dover gestire una configurazione di questo tipo può essere necessario dover spostare fisicamente la posizione dei vari profili utente.

L’intera operazione deve essere completata in due passaggi

  • Nel primo si devono migrare fisicamente le cartelle dei singoli utenti, che di norma sono ospitate su una share di rete
  • Nel secondo è necessario variare il percorso impostato nel campo Profile Path della configurazione del tab Remote Desktop Service Profile in ADUC.

Migrazione dei Profili Utente per le connessioni in Remote Desktop

Per lo spostamento, o la copia dei profili utente è possibile utilizzare il tool ROBOCOPY, in modo da copiare l’intera struttura di ogni profilo, preservandone le impostazioni di sicurezza, condizione essenziale al fine del corretto funzionamento dell’ambiente RDS.

Robocopy è un tool disponibile dapprima nei Resource Kit dei vari sistemi operativi e successivamente, dalle versioni 2008 Server e Vista è stato integrato direttamente nel sistema operativo, permette una agevole gestione della copia, spostamento del contenuto di interi filesystem gestendo in modo agevole anche la copia delle ACL di protezione ai vari file e cartelle.

robocopy <PathSorgente> <PathDestinazione> /e /COPYALL /LOG:<PatLog>uprofiliutentits.txt /R:0 /W:1

  • con l’opzione /E vengono copiate tutte le cartelle anche se vuota
  • con l’opzione /COPYALL vengono copiate tutte le informazioni sui file ACL comprese

il comando deve essere eseguito in una sessione a privilegi elevati

Variazione del percorso per il profilo condiviso impostato in AD

tramite Powershell è possibile gestire la modifica in modo automatizzato e, tramite la definizione di un controllo nello script stesso, modificare esclusivamente le impostazioni relative ai profili ospitati in un percorso specifico.

Con lo script seguente è possibile rilevare il valore impostato per tutti gli utenti del dominio ICTPOWER.LOCAL , nel caso si voglia focalizzare la ricerca su una singola OU è necessario impostare il percorso corretto in SearchRoot

$Ricerca=New-Object DirectoryServices.DirectorySearcher
$Ricerca.Filter ‘(&(objectCategory=person))’
$Ricerca.SearchRoot ‘LDAP://DC=ICTPOWER,DC=LOCAL’
$Utenti $Ricerca.FindAll()

foreach ($Utente in $Utenti) {
$Modifica [ADSI$($Utente.Path)
$Utente.path ” ” + $Modifica.psbase.Invokeget(“terminalservicesprofilepath”)
}

Una volta individuati e verificati gli utenti a cui deve essere modificato il valore in AD è sufficiente utilizzare uno script come il seguente che permette di modificare esclusivamente i profili con un percorso preciso, sarà sufficiente definire le variabili $NuovoPath e $VecchioPath al fine di automatizzare completamente le impostazioni

$Ricerca New-Object DirectoryServices.DirectorySearcher
$Ricerca.Filter ‘(&(objectCategory=person))’
$Ricerca.SearchRoot ‘LDAP://DC=ICTPOWER,DC=LOCAL’
$Utenti $Ricerca.FindAll()
$NuovoPath “\\dc02\newshare” # Imposta il nuovo valore per il percorso dei Roaming Profile
$VecchioPath “\\dc01\olshare” # Ricerca/Filtra il percorso attualmente impostato

foreach ($Utente in $Utenti) {
$Modifica [ADSI$($Utente.Path)
$ValoreCorrente $Modifica.psbase.Invokeget(“terminalservicesprofilepath“)

if ($VecchioPath -eq $ValoreCorrente)
{
$Modifica.psbase.Invokeset(“terminalservicesprofilepath”,$NuovoPath)
$Modifica.setinfo()
}
}

Terminati questi due passaggi, che è bene vangano eseguiti in rapida successione ogni utente al nuovo login tramite RDS utilizzerà le nuove impostazioni

Riferimenti

Panoramica sulla gestione degli User Profile Disk

Documentazione sul tool Robocopy