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!


Conception du script

Les prérequis pour lister les comptes fantômes sont simples :

  • Le compte doit être activé (les comptes service système sont désactivés par défaut)
  • La date de dernier logon ne doit pas être vide (car un compte qui n'est pas encore utilisé n'a pas à de date de dernière connexion)

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 :

exemple_retour_get_aduser

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 *

exemple_retour_get_aduser_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 :

  • Name : L'ensemble nom et prénom
  • Lastlogondate : La date de dernière ouverture du compte
  • SID : l'identifiant unique du compte

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 :

  1. Créer une variable "fixe" de ce format : [DateTime]$date = "12/29/2001" . C'est un format de date américain, comme vous pouvez le constater. Cela ne sera cependant pas pratique car avant chaque lancement du script, vous serez amené à modifier préalablement la date seuil. Il est également possible de faire un Read-Host pour pouvoir entrer une date seuil à chaque lancement, mais cela implique d'autres fonctions, dont notamment -is et -as sur lesquelles je reviendrai dans un autre article.
  2. Poser un temps par rapport à la date actuelle. Pour ce faire, il faut se servir d'une des méthodes nommées AddMonths. En mettant un chiffre négatif, on arrive à obtenir une date inférieure à la date actuelle.

Vous trouverez plus d'informations sur la gestion du temps dans un de mes anciens articles disponible ici.


Script final

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

Ajouter un commentaire

Article précédent Article suivant