Contexte : supprimer en masse des profils d'utilisateurs de domaine (clés de registre ProfileList et dossiers de profil), via une GPO ou un paquet de déploiement GLPI / FusionInventory · Testé sur : postes Windows membres d'un domaine, Windows PowerShell · Dernière vérification : contenu de 2023 non revérifié
Supprimer, sur un ensemble de postes, les clés de registre de profils appartenant à des utilisateurs du domaine et, si besoin, leurs dossiers de profil. C'est utile par exemple pour réinitialiser un profil corrompu, pour lequel Windows a créé une clé en .bak et ouvre une session temporaire.
Le script se déploie par une GPO (script de démarrage) ou par un paquet FusionInventory de GLPI (voir Installer GLPI (avec FusionInventory)).
C:\Users.Ce script supprime définitivement des clés de registre et des dossiers utilisateur, avec leurs fichiers. Testez-le d'abord sur un poste, et sauvegardez les données utiles avant tout déploiement.
Chaque profil est enregistré sous HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, dans une clé nommée d'après le SID de l'utilisateur. Pour un compte de domaine, ce SID est composé du SID du domaine (<SID_DOMAINE>, de la forme S-1-5-21-…) suivi du numéro de l'utilisateur. Listez les profils d'un poste et le dossier associé à chacun :
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { '{0} {1}' -f $_.PSChildName, (Get-ItemProperty $_.PSPath).ProfileImagePath }
Avant un premier essai, exportez la clé pour pouvoir la restaurer :
New-Item -ItemType Directory -Path C:\Temp -Force
reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" C:\Temp\ProfileList.reg
Le script combine deux actions, utilisables séparément :
$usersToDelete par ceux des dossiers de C:\Users à supprimer. Quand un profil local du même nom existe déjà, Windows nomme le dossier utilisateur.DOMAINE.$keysToDelete par les SID des profils à supprimer, avec leur éventuelle variante .bak.$ErrorActionPreference = "SilentlyContinue"
# Supprimer les profils utilisateur
$usersToDelete = @(
"utilisateur",
"utilisateur.DOMAINE"
)
foreach ($user in $usersToDelete) {
$profilePath = "C:\Users\$user"
if (Test-Path $profilePath) {
Remove-Item -LiteralPath $profilePath -Force -Recurse -ErrorAction SilentlyContinue
Write-Host "Le dossier utilisateur '$user' a été supprimé avec succès."
} else {
Write-Host "Le dossier utilisateur '$user' n'a pas été trouvé."
}
}
# Supprimer les clés de registre
$keysToDelete = @(
"<SID_DOMAINE>-1170.bak",
"<SID_DOMAINE>-1510",
"<SID_DOMAINE>-1170",
"<SID_DOMAINE>-1510.bak"
)
$regKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
foreach ($keyToDelete in $keysToDelete) {
$fullPath = Join-Path -Path $regKeyPath -ChildPath $keyToDelete
try {
Remove-Item -Path $fullPath -Force -Recurse -ErrorAction Stop
Write-Host "La clé de registre $keyToDelete a été supprimée avec succès."
} catch {
# Ignorer les erreurs liées à la suppression de clés de registre
}
}
Dans la liste
$keysToDelete, remplacez<SID_DOMAINE>par le SID réel de votre domaine et1170,1510par les numéros des utilisateurs concernés. Ne publiez jamais les SID réels de votre domaine dans une documentation.
Enregistrez le script dans un fichier .ps1, puis déployez-le :
ProfileList.C:\Users.SilentlyContinue et bloc catch vide). Exécutez-le manuellement dans une console PowerShell lancée en administrateur, puis retirez temporairement ces protections pour afficher les erreurs.