1
0
vrac/clean_roaming_profiles.ps1

59 lines
2.5 KiB
PowerShell

####################################################################################################################################
#### 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";
}
}