08/09/2024

Obtenir la liste des ordinateurs récemment intégrés à l’Active Directory

I. Présentation

Dans ce chapitre, nous allons apprendre à obtenir la liste des machines intégrées récemment à l'Active Directory. Ainsi, vous serez en mesure de détecter les ordinateurs intégrés à l'Active Directory sur les 30 derniers jours, les dernières 24 heures, ou encore sur la dernière heure : vous êtes libre de choisir l'intervalle de temps de votre choix.

Ceci est pratique pour surveiller l'activité d'un domaine Active Directory : cette information peut-être exploitée à des fins différentes. Par exemple : recevoir un e-mail ou une notification dans un canal Teams à chaque fois qu'une nouvelle machine est ajoutée à l'annuaire Active Directory.

II. L'attribut whenCreated

Dans l'annuaire Active Directory, chaque objet appartenant à la class "computer" hérite d'un attribut nommé "whenCreated" qui contient la date de création de l'objet. De ce fait, lorsqu'il s'agit d'un objet ordinateur, que ce soit un poste de travail ou un serveur, ceci correspond à la date et l'heure à laquelle la machine a intégré le domaine Active Directory.

Ci-dessous, un exemple pour une machine nommée "PC-03" à partir de la console "Utilisateurs et ordinateurs Active Directory".

Active Directory - Computer - whenCreated

Avec PowerShell, nous allons utiliser le cmdlet Get-ADComputer et récupérer la propriété "whenCreated" afin d'obtenir cette information. Ce qui donne la commande suivante :

Get-ADComputer -Filter * -Properties whenCreated | Sort-Object -Property whenCreated -Descending | Format-Table Name, whenCreated

Cette commande retourne la liste de tous les objets ordinateurs de l'Active Directory avec le nom et la valeur de l'attribut whenCreated, du plus récent au plus ancien. Voici un exemple :

Active Directory - Date ajout machines au domaine avec PowerShell

III. Obtenir la liste des ordinateurs intégrés récemment à l'Active Directory

Désormais, nous allons affiner la commande précédente de façon à filtrer les résultats.

Tout d'abord, nous allons chercher à obtenir la liste des ordinateurs intégrés à l'Active Directory sur les 30 derniers jours. Nous devons "calculer" cette date, 30 jours en arrière, en prenant la date d'aujourd'hui comme référence. Nous devons définir une variable de type [DateTime]. Nous avons deux possibilités :

$DateRef = [DateTime]::Today.AddDays(-30)
# ou :
$DateRef = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-30)

Cette information est stockée dans la variable "$DateRef". Ici, l'exemple est donné pour 30 jours d'où la valeur "-30" dans la méthode AddDays() pour soustraire des jours, mais vous pouvez utiliser la valeur de votre choix.

La prochaine étape consiste à ajuster le filtre de la commande Get-ADComputer pour récupérer uniquement les machines ajoutées à l'Active Directory il y a moins de 30 jours.

Get-ADComputer -Filter 'WhenCreated -ge $DateRef' -Properties whenCreated | Format-Table Name,distinguishedName,whenCreated

Si la commande ne retourne aucune valeur, c'est qu'il n'y a pas eu de machines ajoutées à votre domaine Active Directory lors des 30 derniers jours (ou alors l'objet a été supprimé).

Pour soustraire des heures, vous devez utiliser la méthode AddHours() sur le même principe. Ceci serait utile pour récupérer la liste des machines intégrées à l'Active Directory il y a moins d'une heure. Dans ce cas, la variable $DateRef doit être déclarée de cette façon (vous pouvez ajuster le nombre d'heures) :

$DateRef = (Get-Date).AddHours(-1)

Pour aller plus loin, il serait judicieux d'envoyer la liste par e-mail, dans un canal Teams, etc... Nous pouvons imaginer des scénarios de notifications divers et variés. De façon très simple, nous pouvons envoyer un e-mail pour

Get-ADComputer -Filter 'WhenCreated -ge $DateRef' -Properties whenCreated | Foreach{

    $EmailSubject = "AD - Nouvel ordinateur : $($_.Name)"
    $EmailBody = "<p>Bonjour,</p>
                  <p>Un nouvel ordinateur nommé <strong>$($_.Name)</strong> a été intégré au domaine Active Directory</p>
                  <p>- DistinguishedName de l'objet : <strong>$($_.DistinguishedName)</strong></p>
                  <p>- Date et heure : <strong>$($_.whenCreated)</strong></p>"

    Send-MailKitMessage -SMTPServer $SMTPServer -Port $SMTPPort -From $SMTPSender -RecipientList $SMTPRecipientList `
                        -Subject $EmailSubject -HTMLBody $EmailBody -Credential $SMTPCreds -UseSecureConnectionIfAvailable
}

Si vous avez besoin d'aide pour envoyer un e-mail via cette méthode, référez-vous à cet article :

Ci-dessous, un exemple lorsque l'ordinateur "PC-05" a été joint au domaine Active Directory :

Exemple notification par e-mail nouvel ordinateur intégré à Active Directory

Pour que ce soit automatique, vous pouvez exécuter ce script PowerShell au travers d'une tâche planifiée, à intervalle régulier (une fois par jour, toutes les heures, etc...) en fonction de vos besoins.

IV. Conclusion

Cette commande est relativement simple, mais grâce à elle nous pouvons obtenir une information précieuse et être informés dès qu'une machine est intégrée au domaine Active Directory.

Une alternative consisterait à s'intéresser à l'Observateur d'événements, car à chaque fois qu'une machine est intégrée au domaine Active Directory, un événement de sécurité avec l'ID 4741 est généré (voir cette page). L'avantage, c'est que nous avons le nom du compte utilisateur qui a intégré la machine au domaine Active Directory. Dans ce cas, il faudrait détecter une action sur événement (exécuter un script pour recevoir une notification par e-mail, par exemple). Ce type d'événement pourra être intéressant à analyser avec une solution de type SIEM. Voici un exemple :

Event Viewer ID 4741 - Nouvel ordinateur AD

Rendez-vous au prochain chapitre !

author avatar
Florian BURNEL Co-founder of IT-Connect
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.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

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.