Contexte : erreur de profil de temporaire à l’ouverture de session
Pour des raisons multiples et souvent inconnus, les utilisateurs se retrouvent connectés à leur session sur un profil temporaire.
L’utilisateur ne retrouve pas ses paramètres et notamment le profil Outlook.
Tout ce qui est stocké dans le dossier C:\Users\TEMP
n’est pas sauvegardé à leur fermeture de session.
Si vous appliquez une GPO de redirection de dossier (bureau/documents…), les fichiers et dossiers modifiés dedans seront par contre sauvegardés.
Solution pour résoudre le problème de profil temporaire
La solution est de supprimer les clefs de registre en .BAK à l’emplacement suivant : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Sur une ferme RDS 2012R2, j’avais régulièrement le problème avec 3 utilisateurs et j’ai donc cherché un moyen de faire ce nettoyage automatiquement par script à l’aide d’une tâche planifiée.
' Repo : https://git.rdr-it.com/root/scripts/-/blob/master/VBS/RDS-temporary-profile-cleaning.vbs
Const ForAppending = 8
Const HKEY_LOCAL_MACHINE = &H80000002
Dim CheminScriptActuel, ScriptFileName, Position, CheminLog
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
CheminLog = CheminScriptActuel & "" & ScriptFileName & "_Log.txt"
strComputer = "."
'On Error Resume Next
Set objRegistry=GetObject("winmgmts:\" & strComputer & "rootdefault:StdRegProv")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (CheminLog, ForAppending, True)
objTextFile.WriteLine("-------------------------------")
objTextFile.WriteLine("Debut de la suppression des profils temporaires : " & now)
objTextFile.WriteLine("-------------------------------")
strKeyPath = "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList"
objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys
For Each objSubkey In arrSubkeys
If Instr(UCase(objSubkey),".BAK") Then
'wscript.echo objsubkey
'wscript.echo strkeypath & "" & objSubkey
objTextFile.WriteLine(now & " clé a supprimer détectée : " & strKeyPath & "" & objSubkey)
Call DeleteRegEntry(HKEY_LOCAL_MACHINE, strKeyPath & "" & objSubkey)
End if
Next
objTextFile.WriteLine("Fin de la suppression des profils temporaires : " & now)
objTextFile.WriteLine("")
objTextFile.Close 'Fermeture du fichier
Set objTextFile = Nothing
wscript.quit
Function DeleteRegEntry(sHive, sEnumPath)
' Attempt to delete key. If it fails, start the subkey
' enumration process.
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
'wscript.echo sHive
'wscript.echo sEnumPath
' The deletion failed, start deleting subkeys.
If (lRC <> 0) Then
' Subkey Enumerator
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_LOCAL_MACHINE, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
'wscript.echo sHive, sEnumPath & "" & sKeyName
lRC = DeleteRegEntry(sHive, sEnumPath & "" & sKeyName)
objTextFile.WriteLine(now & " Suppression de la sous clé : " & sEnumPath & "" & sKeyName)
Next
On Error Goto 0
' At this point we should have looped through all subkeys, trying
' to delete the registry key again.
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
Copier le script ci-dessus dans un fichier avec une extension vbs et faite une tache planifiée qui s’exécute toutes les nuits sur chaque hôte de session Bureau à distance.
Le script génère un fichier de log avec les clefs de registres supprimées.
PI : les erreurs de profil temporaire peuvent être dû au client RDP de Windows XP qui ne supporte le balancement automatique avec le service Broker.
Merci à www.tuto.eu pour le script.