Active Directory : récupérer la liste des utilisateurs créés à une date précise

I. Présentation

Une fois de plus, je vous propose de parler Active Directory et PowerShell, pour répondre à la question suivante : comment récupérer la liste des utilisateurs créés à une date précise ? Il peut y avoir tout un tas de raison de vouloir faire cette requête, surement au sein d'un script beaucoup plus global, mais cela dépendra de vos besoins. L'intérêt est de vous proposer un snippet prêt à l'emploi 😉

Personnellement, je l'ai utilisé pour regarder combien il y avait eu de comptes créés dans l'Active Directory à une date précise, une date qui peut-être le jour même.

II. PowerShell - Récupérer la liste

Pour le script, nous allons appliquer le principe suivant :

1 - Récupérer la date du jour

2 - Stocker dans une variable la date et heure de début de journée, c'est-à-dire à minuit 00:00

3 - Stocker dans une variable la date et heure de fin de journée, c'est-à-dire à 23:59

4 - Rechercher dans l'Active Directory les comptes qui ont une date de création "plus grande" que la date de début de journée et "plus petite" que la date de fin de journée

Si l'on veut récupérer les comptes créés à une date précise, autre que la date du jour, il faudra agir sur la variable $Date avec la méthode AddDays pour calculer la date souhaitée, ou, directement l'indiquer en chaîne de caractères dans la variable $Date en conservant le type [datetime].

Pour récupérer la date du jour, cela donne :

[datetime]$Date = Get-Date -Format "MM/dd/yyyy"

Par contre, si l'on veut une date précise, on peut l'indiquer comme ça (exemple :19 octobre 2019) :

[datetime]$Date = "10/19/2019"

Nous pouvons aussi calculer la date en soustrayant un nombre de jours, par exemple pour avoir la date de la veille :

$Date = ($Date).AddDays(-1)

Maintenant, nous allons créer deux variables : $DateOn et $DateOff pour avoir la date et l'heure de début de journée et celle de fin de journée. Nous allons utiliser les méthodes AddHours, AddMinutes et AddSeconds pour définir l'heure.

Pour définir l'heure de début à 00:00:00, cela donne :

$DateOn = $Date.AddHours(00).AddMinutes(00).AddSeconds(00)

Ensuite, pour l'heure de fin à 23:59:59 :

$DateOff = $Date.AddHours(23).AddMinutes(59).AddSeconds(59)

Maintenant que nous avons notre plage de recherche, il ne reste plus qu'à envoyer la requête sur l'annuaire Active Directory. Chaque utilisateur dispose d'un attribut natif nommé "WhenCreated" et qui contient la date de création de l'objet ?

Donc, pour lister les utilisateurs nous allons utiliser Get-ADUser (commande du module Active Directory de PowerShell) et réaliser un filtre sur l'attribut WhenCreated, ce qui donne :

Get-ADUser -Filter 'whenCreated -ge $DateOn -and whenCreated -lt $DateOff' -Properties whenCreated

Au lieu de lister les utilisateurs, nous pouvons aussi les compter :

$Nb = (Get-ADUser -Filter 'whenCreated -ge $DateOn -and whenCreated -lt $DateOff' -Properties whenCreated | Measure-Object).count

Ce qui au final nous donne le bout de code PowerShell suivant :

[datetime]$Date = Get-Date -Format "MM/dd/yyyy"
$Date = ($Date).AddDays(-1)
$DateOn = $Date.AddHours(00).AddMinutes(00).AddSeconds(00)
$DateOff = $Date.AddHours(23).AddMinutes(59).AddSeconds(59)

Get-ADUser -Filter 'whenCreated -ge $DateOn -and whenCreated -lt $DateOff' -Properties whenCreated

Voilà, il ne reste plus qu'à utiliser ces quelques lignes dans votre script, vous pouvez en faire une fonction également ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5471.Voir tous les posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.