2020-05-13 10:47:32 +00:00
|
|
|
####################################################################################################################################
|
|
|
|
#### 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
|
2020-05-13 10:51:58 +00:00
|
|
|
$profiles_path = "\\nas.ykn.local\profils$";
|
2020-05-13 10:47:32 +00:00
|
|
|
|
|
|
|
## 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";
|
|
|
|
}
|
|
|
|
}
|