Comment identifier les ordinateurs et les utilisateurs inactifs dans Active Directory à l’aide de PowerShell

La gestion des comptes inactifs dans Active Directory est une tâche courante. Les administrateurs doivent régulièrement supprimer les comptes d’utilisateurs ou d’ordinateurs inutilisés afin de maintenir un domaine propre, de réduire les risques de sécurité et d’éviter une surcharge inutile de la base de données AD. Comment identifier les comptes qui ne se sont pas connectés depuis longtemps ? PowerShell est la solution idéale : flexible, il permet le traitement par lots d’un grand nombre d’objets. Cependant, trouver l’attribut ou le filtre adéquat peut parfois s’avérer complexe, notamment parce que l’horodatage de dernière connexion n’est pas mis à jour en temps réel et repose sur la réplication. Il est donc essentiel de trouver une méthode fiable pour identifier les anciens comptes réellement inactifs.

Ce guide explique comment utiliser PowerShell (et quelques commandes spécifiques) pour identifier les comptes utilisateurs et ordinateurs inactifs.À la fin de ce guide, vous disposerez d’une méthode claire pour générer des rapports, que ce soit pour un nettoyage régulier, des audits, ou même pour désactiver ou supprimer les anciens comptes devenus inutiles. Vous obtiendrez une liste de comptes obsolètes avec des informations telles que la date et l’heure de la dernière connexion, et vous pourrez même automatiser une partie du nettoyage si vous le souhaitez. Attention : si vous débutez avec PowerShell ou les modules Active Directory, vous devrez peut-être activer certaines fonctionnalités au préalable (comme RSAT et le module Active Directory).Sur certaines configurations Windows, il est parfois nécessaire d’installer RSAT manuellement ou d’exécuter une commande pour que tout soit opérationnel.

Comment trouver les ordinateurs et les utilisateurs inactifs (anciens) dans Active Directory

Méthode 1 : Recherche d’ordinateurs inactifs à partir de l’horodatage de la dernière connexion

C’est probablement la méthode la plus courante pour repérer les ordinateurs anciens dans Active Directory. L’horodatage de la dernière connexion est répliqué entre les contrôleurs de domaine, mais seulement environ une fois par semaine. Ce n’est pas du temps réel, mais c’est suffisant pour se faire une idée générale. L’astuce consiste à comparer la valeur de l’horodatage de la dernière connexion à une date de référence (par exemple, 180 jours auparavant) et à identifier les ordinateurs restés inactifs pendant cette période.

Voici la liste des commandes dont vous aurez probablement besoin :

$LastLogonDate = (Get-Date).AddDays(-180) Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate} -SearchBase "OU=Computers, OU=Mun, DC=woshub, DC=com" | Sort-Object LastLogonTimeStamp | Format-Table Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_. LastLogonTimeStamp)}} -AutoSize

Cette commande génère une liste des ordinateurs de l’unité d’organisation (UO) spécifiée qui ne se sont pas connectés depuis plus de six mois. Si ce résultat vous convient, il suffit d’ajouter la commande Get-ADComputer avec les filtres appropriés. Vous pouvez l’exporter au format CSV ou même désactiver ces ordinateurs immédiatement.

Get-ADComputer...| Export-Csv C:\ps\inactive_computers.csv -NoTypeInformation

Et si vous vous sentez vraiment proactif, vous pouvez désactiver ces ordinateurs avec :

Get-ADComputer...| Disable-ADAccount

Ou déplacez-les dans un groupe d’organisation comme « Ordinateurs désactivés » :

Get-ADComputer...| Move-ADObject -TargetPath "OU=Disabled Computers, DC=woshub, DC=com"

Il m’est arrivé de constater qu’après l’exécution de ces commandes, les comptes semblaient toujours actifs ou que l’horodatage de la dernière connexion était légèrement obsolète. Car, bien sûr, Windows se doit de compliquer les choses inutilement.

Méthode 2 : Recherche des comptes d’utilisateurs inactifs

Même chose pour les utilisateurs : LastLogonTimeStamp est votre meilleur allié. Vous pouvez créer une commande qui liste les comptes utilisateurs inactifs depuis six mois :

$LastLogonDate = (Get-Date).AddDays(-180) Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate} -SearchBase "OU=Users, OU=Mun, DC=woshub, DC=com" | Where-Object {$_. Enabled -eq $true} | Format-Table Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_. LastLogonTimeStamp)}} -AutoSize

Là encore, vous pouvez désactiver ces comptes inactifs ou exporter la liste pour vérification. Pour cela, utilisez simplement la commande Disable-ADAccount ou Remove-ADUser.

Méthode 3 : Utiliser Search-ADAccount pour tout couvrir

C’est une véritable aubaine ! Au lieu de manipuler manuellement les attributs ou de filtrer, Search-ADAccount est une commande tout-en-un qui permet de trouver en un clin d’œil les objets désactivés, expirés, verrouillés ou inactifs. C’est l’outil indispensable pour le nettoyage d’Active Directory.

Par exemple, pour trouver les comptes d’utilisateurs désactivés, il suffit d’exécuter :

Search-ADAccount -UsersOnly -AccountDisabled

Et si vous souhaitez cibler une unité organisationnelle spécifique :

Search-ADAccount -UsersOnly -AccountDisabled -SearchBase "OU=Admins, OU=Accounts, DC=woshub, DC=com"

Pour afficher davantage de données dans un format plus facile à gérer, utilisez la commande Format-Table :

Search-ADAccount -UsersOnly -AccountDisabled -SearchBase "OU=Admins, OU=Accounts, DC=woshub, DC=com" | Format-Table Name, LastLogonDate, Enabled -AutoSize

Cette cmdlet permet également de trouver les comptes verrouillés ou les comptes inactifs depuis un certain temps, ce qui est extrêmement utile lors d’un nettoyage approfondi ou d’un audit de sécurité.

Il faut parfois faire quelques ajustements, notamment avec les filtres ou la définition des bases de recherche, mais au final, Search-ADAccount simplifie la tâche des professionnels d’Active Directory qui ne veulent pas modifier chaque attribut manuellement. Dans certaines configurations, les résultats peuvent ne pas être parfaitement instantanés, mais ils sont suffisamment précis pour prendre des décisions éclairées.

Résumé

  • Utilisez Get-ADComputerl’option LastLogonTimeStamp pour trouver les machines inutilisées.
  • Utilisez la fonction Get-ADUserLastLogonTimeStamp pour les comptes utilisateurs inactifs.
  • Essayez Search-ADAccountd’effectuer une analyse plus complète des objets AD.
  • Activez la désactivation ou la suppression du compte avec Disable-ADAccount ou Remove-ADUser.

Conclure

En résumé, trouver les comptes inactifs n’est pas sorcier, mais cela nécessite une certaine familiarité avec PowerShell et les attributs Active Directory. Si vous effectuez régulièrement ces vérifications, vous repérerez rapidement les comptes inutiles que vous pourrez désactiver ou supprimer sans risque. Attention, l’attribut lastLogonTimestamp n’est pas une valeur absolue ; il s’agit plutôt d’une approximation. Par conséquent, certains comptes légitimes peuvent apparaître comme inactifs alors qu’ils ne le sont pas, et inversement. Néanmoins, ces méthodes sont suffisamment fiables pour la plupart des tâches de nettoyage. Espérons que cela vous permettra de transformer une corvée apparemment insurmontable en une tâche plus gérable.