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 ?