#################################################################################################################################### #### Script : clean_roaming_profiles.ps1 #### Description : Script de suppression des dossiers de profils itinérants #### Exécution : Doit être lancé en administrateur du domaine #################################################################################################################################### ## Définir l'emplacement des dossiers de profils $profiles_path = "\\nas.ykn.local\profils$"; ## Définir le temps de rétention (en jours) $rentention = 30; #################################################################################################################################### ## Parcourir les dossiers en supprimant ceux dont l'utilisateur n'existe plus après la période de rétention #################################################################################################################################### Get-ChildItem -Path $profiles_path | Foreach-Object { ## Stocker le chemin complet du répertoire enfant $profile_path = $_.FullName; ## Stocker du nom de l'utilsateur (basé sur le nom du dossier) $user = $_.Name.Split(".")[0]; ## Déduire la période d'attente à partir de la date de dernier accès $last_access = $_.LastAccessTime; ## Vérifier si l'utilisateur existe toujours $deleted_user = !(Get-ADUser -Filter {SamAccountName -eq $user}); ## Vérifier que le dossier à dépasser la période de rétention $expiry = ($last_access.AddDays($rentention) -lt $(Get-Date)); ## Vérification que la période d'attente est dépassée if ($deleted_user -AND $expiry) { ## Stocker l'administrateur (basé sur l'utilisateur lançant le script) $admin = [System.Security.Principal.NTAccount](whoami); ## Changer le propriétaire du dossier $acl = Get-Acl $profile_path; $acl.SetOwner($admin) Set-Acl $profile_path $acl; ## Ajouter tous les droits au groupe Admin du domaine $acl = Get-Acl $profile_path; $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule($admin, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))); Set-Acl $profile_path $acl; ## Suppression du dossier Remove-Item -Path $profile_path -Force -Recurse; ## INFO Write-Host "$user : profile deleted" } elseif ($deleted_user) { Write-Host "$user : not found in AD" } elseif ($expiry) { Write-Host "$user : profile expired since $last_access"; } }