TUTOS.EU

Supprimer les clés de registres en .bak des profils temporaires

Supprimer les clés de registres en .bak générées lorsqu'un profil est fermée de façon incorrecte

Vos utilisateurs se plaignent que lors d'une connexion sur un serveur Citrix ou RDS ils ont un profil temporaire avec les paramètres par défaut.
Dans le journal applicatif des erreurs pour trouver le profil avec l'event 1511 sont présentent.

Sous la clé de registre suivante des clés en .BAK sont présentent :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Elles sont générées suite à une mauvaise fermeture de session. Les supprimer règle le problème.

Pour savoir si vous avez des clés temporaires en .bak, vous pouvez utiliser le script suivant :

Reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" "C:\Export_ProfileList.reg"
Lien vers le fichier : cliquez ici

Pour automatiser la tâche le VbScript suivant peut être utilisé et déclenché automatiquement à chaque démarrage du serveur.

'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

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 

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
Lien vers le fichier : cliquez ici