Appuyer sur "Entrée" pour passer au contenu

Résoudre les problèmes de profil temporaire sur les bureaux à distance RDS/TSE

0

Pour des raisons multiples et souvent inconnus, les utilisateurs se retrouvent connecter à leur session sur un profil temporaire.

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.

La solution est de supprimer les clefs de registre en .BAK à l’emplacement suivant : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Registre clef profil temporaire

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.

'Script de nettoyage des clés de registre des profils temporaires
'Le script va dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
'ensuite il efface les clés qui se terminent par .BAK
'Script à déclencher par GPO, script de démarrage dans une stratégie Ordinateur, tous les soirs

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 & "\root\default: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 = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
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.
Fichier de log

Merci à www.tuto.eu pour le script.

Laisser un commentaire