Un de mes amis devait faire un grand ménage dans les utilisateurs de l'Active Directory de sa société et supprimer chacun de ceux qui ne s'étaient pas connectés dans un délai imparti... bref, supprimer ces vieux fantômes de comptes qui ne se sont pas utilisés, ni marqués désactivés et "polluent" l'AD... Toute société, à un moment ou un autre est confrontée à cela, et de temps à autres, du ménage doit être fait!
Les prérequis pour lister les comptes fantômes sont simples :
Tout d'abord, il faut ajouter les outils de gestion Powershell pour Active Directory.
La commande est simple : import-module activedirectory
Nous récupérons ensuite l'intégralité des comptes utilisateurs à l'aide d'une des nouvelles commandes ajoutées par le module activedirectory. La commande nommée Get-ADUser permet de récupérer des informations sur l'utilisateur donné, ou les utilisateurs correspondant au filtre donné (grâce au paramètre -Filter ). Le paramètre -Properties, quand à lui, sélectionne le niveau de détails de la réponse. Par défaut, voici ce qu'une requête renvoie :
Get-ADUser [utilisateur] avec les proprietés de base 10 propriétés, seulement. Maintenant, je lance la commande, en comptant le nombre de propriétés qui nous sont renvoyées lorsque j'ajoute le paramètre -Properties *
La même commande... voila : 118 propriétés. Rien que ça!Comme vous le voyez, nous avons beaucoup plus de propriétés disponibles sur un simple renseignement de compte! Dans notre cas, voici ce qui nous intéresse :
Afin de pouvoir "jouer" avec ce script, nous sélectionnerons toutes les propriétés des comptes. Pour choisir tous les comptes, il suffit simplement de donner un filtre englobant l'ensemble des utilisateurs avec la méthode -filter et pour sélectionner toutes les propriétés la méthode -properties
Maintenant que nous pouvons lister les comptes, et que nous savons que la propriété Lastlogondate est celle qui nous intéresse, comment pouvons-nous comparer la date actuelle avec la date de référence d'un compte?
Deux possibilités s'offrent à nous :
Vous trouverez plus d'informations sur la gestion du temps dans un de mes anciens articles disponible ici.
Vous pouvez télécharger ce script sur mon dépot git personnel
import-module activedirectory
$utilisateurs = Get-ADUser -Filter * -Properties *
$actifs = $utilisateurs | Where-Object {$_.enabled -eq $true}
$date = Get-Date
$connectes = $actifs | Where-Object {($_.lastlogondate -lt $date.AddMonths(-6)) -and ($_.lastlogondate -ne $null)}
$tableau = @()
foreach ($user in $connectes)
{
$ajout = New-Object Psobject
$ajout | Add-Member -Name "Nom" -MemberType Noteproperty -value $user.name
$ajout | Add-Member -Name "Logon" -MemberType Noteproperty -value $user.Lastlogondate
$ajout | Add-Member -Name "S.I.D" -MemberType Noteproperty -value $user.sid.value
$tableau += $ajout
}
$tableau