05/12/2025

EntrepriseLogiciel - OS

Une vue d’ensemble de votre annuaire en un clin d’œil avec Modern Active Directory

Cet article présente le module PowerShell "Modern Active Directory" qui a pour objectif de vous offrir une vue d'ensemble de votre annuaire Active Directory, sans passer par les consoles habituelles. Grâce à lui, les requêtes sont simplifiées même lorsqu'il y a plusieurs critères à prendre en compte.

Mon confrère Microsoft MVP, Mehdi Dakhama, qui est l'auteur de ce module, est parti d'un constat simple : les consoles d'administration de l'Active Directory, à savoir "Utilisateurs et ordinateurs Active Directory" et "Centre d'administration Active Directory" sont limitées lorsque l'on souhaite rechercher des objets selon certains critères ou effectuer du reporting de son Active Directory.

Pour contourner cette contrainte, la solution est de passer par des commandes et des scripts PowerShell. Là, on peut effectuer des requêtes diverses et variées, plus ou moins complexes. Ce qu'il propose avec son module Modern Active Directory, c'est de vous permettre de faire des requêtes complexes à partir d'une page Web, sans avoir à écrire vous-même les commandes PowerShell.

Par exemple, vous pouvez rechercher les comptes utilisateurs créés à partir de telle date, ou créés sur une période, voire même les utilisateurs qui se sont connectés sur une période précise.

Après avoir installé ce module PowerShell, une seule commande vous permet de générer un rapport de votre annuaire Active Directory. La suite se passe dans le navigateur à partir d'un tableau de bord représentatif de l'état actuel de l'annuaire.

Modern Active Directory - Dashboard

Ce dashboard donne accès à plusieurs informations et métriques :

  • Contrôleurs de domaine avec les rôles FSMO
  • Etat de la fonctionnalité "Corbeille Active Directory"
  • Nombre d'utilisateurs désactivés
  • Nombre d'utilisateurs qui ne se sont pas connectés sur les 90 derniers jours
  • Nombre de GPO existante, mais non utilisée (sans liaison)
  • Liste des utilisateurs dans l'OU par défaut de l'annuaire
  • Liste des objets dans la Corbeille AD
  • Graphe indiquant le nombre de nouveaux utilisateurs et ordinateurs sur les 30 derniers jours
  • Etc...

Ensuite, il y a des sections spécifiques pour les utilisateurs, les ordinateurs, les unités d'organisation, les groupes et les stratégies de groupe. La section dédiée aux utilisateurs affiche la liste de vos utilisateurs avec plusieurs attributs comme l'UPN, l'état du compte, la date de dernière connexion, la date de création, etc... Tout en sachant que les colonnes sont personnalisables.

Comme je le disais en introduction, cet outil permet d'effectuer des recherches précises sur certains attributs à partir d'une page Web. Sur l'exemple ci-dessous, on voit que l'on recherche les utilisateurs qui ont ouvert une session sur une période précise.

Modern Active Directory - Recherche avancée

Dans le même esprit, la section dédiée aux ordinateurs affichera des informations sur les machines intégrées à votre domaine. Pour ce qui est des postes de travail, le rapport vous indique si certaines de vos machines utilisent une version obsolète de Windows 10 (version plus sous support).

Comment tester Modern Active Directory ?

Pour tester ce module PowerShell, et comme le précise Mehdi sur le GitHub du projet, il faut installer le module à partir de la ligne de commande :

Install-Module -Name ModernActiveDirectory

Puis, une fois que c'est fait, la commande ci-dessous permettra de générer un rapport à l'instant t :

Get-ADModernReport

Il est important de préciser que ce module agit en lecture seule sur l'annuaire Active Directory. À aucun moment, des objets ne seront créés, modifiés ou supprimés.

ModernAD - Computers

Pour finir, voici deux liens utiles :

Maintenant, à vous de tester ce module s'il vous intéresse ! Et si vous avez des suggestions pour que de nouvelles fonctionnalités soient intégrées, pensez à laisser un commentaire sur cet article ! J'ai déjà fait quelques remontées à Mehdi. 😉

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

45 commentaires sur “Une vue d’ensemble de votre annuaire en un clin d’œil avec Modern Active Directory

  • Le lien github redirige vers powershell gallery.

    Répondre
    • Bonjour,
      Il y a un paramètre pour bypasser cette limite activée par défaut :
      Get-ADModernReport -illimitedsearch

      Répondre
  • Bonjour,

    Je ne vois que 300 utilisateurs seulement

    Répondre
    • Bonjour,
      Il y a un paramètre pour bypasser cette limite activée par défaut :
      Get-ADModernReport -illimitedsearch

      Répondre
  • Top comme outil.Par contre est ce qu’il y a une option qui permet de voir les utilisateurs et leurs groupes d’apartenance meme les groupes hérités par les utilisateurs?

    Répondre
    • Salut Koami,
      les utilisateurs membre d’un groupe peuvent être listés au niveau de la vue groupes en faisant un filtre sur le nom d’utilisateur.
      Par contre la récursivité n’est pas évidente, imagines t’as 1000 utilisateurs qui font parties chacun d’une dizaine de groupe hérités dans d’autres groupes, on se retrouvera avec beaucoup d’informations et la requête risque d’être très très longue, cela ralentira l’outil.

      Répondre
  • Bonjour, je n’ai pas encore pu tester ce module mais j’ai une question qui peut être une requête. Est-ce qu’il permet d’identifier quels utilisateurs avec quels rôles sont dans les équipes Teams ou pour un utilisateur, quelles sont toutes les équipes auxquelles il appartient avec ses rôles (y compris pour les utilisateurs externes) ? Je sais le faire avec des lignes de commandes dans Power Shell mais c’est pas franchement pratique.
    En tous les cas merci pour tout ces articles.

    Répondre
    • Bonjour Colaslar,
      l’outil est totalement ouvert et modifiable, vous pouvez ajouter ce que vous souhaitez, à la limite si vous avez les commandes vous pouvez poser la question sur Github et on vous montrera la ligne à éditer.

      Répondre
    • Bonjour Colaslar,
      l’outil est totalement ouvert et peut être modifié à votre guise, si vous possédez la commande posez la question dans Github et on vous indiquera la ligne à changer.

      Répondre
  • Bonjour,

    Info très intéressante merci. Y a t’il une version de serveur ou niveau fonctionnel minimum?

    Répondre
  • Bonjour 🙂 J’ai testé l’outil qui est vraiment bien fait et précis. Dans le cadre de mon boulot ça peut surtout nous être utile pour faire du ménage sur des comptes utilisateurs pas utilisés par exemple.

    Le fait d’avoir des graphiques est intéressant. Par contre, serait-il possible d’ajouter le fait que lorsque l’on clique sur le pourcentage, le résultat s’affiche ? Exemple : Lorsqu’on clique sur le pourcentage des utilisateurs au statut désactivé, on obtiens la liste des utilisateurs en question sur le tableau concerné.

    Merci encore pour tout ce travail

    Répondre
    • Bonjour Benjy,
      l’idée et l’usage intéressant sera de faire tourner l’outil sur un serveur IIS et de déclencher une tache planifié les heures de travail une/deux fois par heures, et de n’autoriser l’accès à URL qu’aux membres concernés.

      Tu réduiras ainsi les informations exposées et tu pourras traquer ceux qui envoient des requêtes directs vers l’AD puisqu’ils ne seront plus censé le faire cela pourra augmenter la sécurité et la vigilance au niveau des entreprises, j’écrirai un article pour expliquer cette stratégie.

      Répondre
  • Bonjour,

    Merci pour ce partage je trouve cet outil très intéressant.
    Y’a t il une option permettant d’auditer une forêt multi domaine?

    Merci d’avance,

    Répondre
    • Bonjour,
      quelle est la relation entre les domaines ? domaines enfants ou approbation ?

      Merci,

      Répondre
      • Bonjour Dans mon contexte les deux, j’ai des forêts multi domaine, ainsi que des relations d’approbation unilatéral entre plusieurs forêts.

        Merci d’avance

        Répondre
  • Bonjour

    Dans une forêt multidomaine, est-il possible de limiter le scan à seulement certains domaines (afin de ne pas scanner la forêt entière) ?

    Cordialement

    Répondre
    • Bonjour,
      est ce qu’il s’agit d’un multi domaine relation d’approbation ? ou domaine parent-enfant ?
      au niveau des requêtes il sera possible de cibler un serveur en particulier en ajoutant -computername ou de limiter au niveau d’un domaine, comme ceci.
      Get-ADUser -LDAPFilter $filterusers -computername …
      je travaillerai sur cette option prochainement.

      Répondre
      • J’ai oublié, il faut ajouter -searchbase à la commande, pour délimiter à un domaine en particulier.

        Répondre
      • Bonjour
        Merci pour votre retour
        Tous les domaines sont des domaines enfants et sont au même niveau
        Mais compte tenu qu’on a plus de 20 domaines (au même niveau donc), j’ai pas forcement envie que le script aille scanner les domaines de nos BUs ^^

        Effectivement il serait bien de pouvoir ajouter un filtre pour choisir le domaine à scanner

        Cordialement

        Répondre
        • Bein là faudra trouver un compromis un utilisateur un peu plus haut demande d’auditer un multi-domaine et vous limiter le scanne à un sous domaine 😀 c’est sur que par défaut soit la première option est faite soit la deuxième.
          je devrai ajouter cela prochainement.
          n’hésitez pas à poser la question au niveau du Github, les autres contributeurs pourront participer ainsi.
          Cordialement,

          Répondre
  • Bonjour,

    L’ outil est très intéressent, merci pour ce partage. J’ai une requête particulière dans le cadre de mon travail. J’ai besoin de lister les horaires d’accès de mes comptes AD. Est-il possible d’afficher des colonnes supplémentaires dans la listes des users et de faire un export.

    Je vous remercie par avance pour votre retour.

    Répondre
    • Bonjour Jerome,
      nous allons ajouter une rubrique de comment personnaliser et ajouter vos propres colonnes, que veux tu dire par l’horaire d’accès ?
      l’ouverture de session ou la restriction horaire ? as tu une idée de la commande ou du script ? si c’est le cas tu pourras le partager ici en masquant les infos personnels ou dans le Github et on te montrera comment l’insérer.

      Cordialement,

      Répondre
  • Bonjour,
    Je constate qu’après la génération du rapport, celui-ci ne s’affiche pas correctement dans le navigateur d’un « VRAI » poste d’administration –> Vlan d’admin, pas d’accès Internet, car il boucle sur des tentatives de récupération de ressources sur le web (fonts google et autres cdn.datatables.net…). Dommage…
    Bonne journée.

    Répondre
    • Bonjour,
      le rapport peut être généré en un seul format en utilisant -htmlonpage et le récupérer par mail ça sera plus simple de l’ouvrir, ou sinon ajouter les fonts manquants (effectivement quelque fonts comme les icones sont disponibles sur le net).
      tu pourras aussi le partager sur une machine qui a accés à internet, le rapport n’a rien de confidentiel puisque tous les utilisateurs sans avoir recours au Vrai poste d’administration pourront récupérer les infos s’ils ont accès à l’AD.

      Répondre
  • Bonjour,

    Quand je veux généré le rapport « Get-ADModernReport » j’ai un retour de edge fichier introuvable c:/users/xxx/AppData/Local/Temp/ADModern.html

    Répondre
    • Bonjour,
      Faut juste attendre un peu le temps que le rapport soit généré, sinon il se trouve quelque chose dans la destination ? ou au pire redirige le vers un dossier avec le parametre -Savepath C:\tondossier
      la commande devient :
      Get-ADModernReport -illimitedsearch -SavePath C:\MyFolder

      Répondre
  • Bonjour Mehdi,

    Il s’agit des horaires d’accès que l’on peut paramétrer en interface graphique dans propriété du compte AD, onglet compte puis dans Horaire d’accès.

    Nous utilisons le script suivant pour extraire les données :

    $users = Get-ADUser -filter * -properties LogonHours

    foreach ($user in $users)
    {
    $username = $user.Name
    $logonhours = $user.LogonHours
    $output = [System.Console]::WriteLine([String]::Format(« $username, $logonhours »))
    $output = [String]::Format(« {0},{1} »,$username,$logonhours)
    }

    Il y a peu être plus simple… Le résultat est sous la forme suivante :

    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 (ici l’utilisateur peut se connecter du lundi au dimanche de 00:00 à 00:00

    0 0 0 192 255 7 192 255 7 192 255 7 192 255 7 192 255 7 0 0 0 (ici l’utilisateur peut se connecter de 7h00 à 20h00 du lundi au vendredi).

    Je te remercie par avance pour ton aide.

    Bien cordialement,

    Répondre
    • Salut Jerome,

      c’est facile du coup à faire, je te ferai un retour ces jours à venir.

      Répondre
    • Rebonjour Jerome,

      Alors comme je t’avais promis c’est assez simple ModernAD donne une force de bien gérer l’inventaire de son AD. tout d’adobord ouvre le fichier moderactivedirectory.pms1 présent dans C:\… powershell\modules avec ISE en mode admin.

      Au niveau de la ligne 529 dans la variable $Alluserpropert@( : ajoute tout simplement ‘Logonhours’ au niveau qui te plais, moi je l’ai mis au dessous de ‘description’

      puis 728 pour remplir ton tableau PSCustom tu rajoutes une ligne au dessous de ‘Email Adress’ comme suivant :

      ‘Horaire’ = ([String]::Format($_.logonhours))

      puis tu enregistre ton fichier pms1, lances powershell : import-Module modernactivedirectory -force

      puis c’est bon.

      cette astuce est valable pour ajouter/supprimer tout attributs, j’écrirai un article sur la personnalisation.
      Tiens nous au courant.

      PS : je te conseille de faire un : update-module ModernActivedirectory
      avant de faire tes manip, car j’ai ajouter des améliorations.

      Répondre
  • Hi Mehdi i tried to do configure this report but getting error while running get command and also i dont have internet so want install oflline module but unable to do that could you help me where am i doing mistake.
    Error.
    PS C:\Program Files\WindowsPowerShell\Modules\ModernActiveDirectory> import-module -name ModernActiveDirectory
    import-module : The required module ‘PSSharedGoods’ is not loaded. Load the module or remove the module from
    ‘RequiredModules’ in the file ‘C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWriteHTML\PSWriteHTML.psd1’.
    At line:1 char:1
    + import-module -name ModernActiveDirectory
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ResourceUnavailable: (C:\Windows\syst…SWriteHTML.psd1:String) [Import-Module], Missing
    MemberException
    + FullyQualifiedErrorId : Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand

    PS C:\Program Files\WindowsPowerShell\Modules\ModernActiveDirectory> Get-ADModernReport
    Get-ADModernReport : The ‘Get-ADModernReport’ command was found in the module ‘ModernActiveDirectory’, but the module
    could not be loaded. For more information, run ‘Import-Module ModernActiveDirectory’.
    At line:1 char:1
    + Get-ADModernReport
    + ~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (Get-ADModernReport:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CouldNotAutoloadMatchingModule

    PS C:\Program Files\WindowsPowerShell\Modules\ModernActiveDirectory> import-module ModernActiveDirectory
    import-module : The required module ‘PSSharedGoods’ is not loaded. Load the module or remove the module from
    ‘RequiredModules’ in the file ‘C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWriteHTML\PSWriteHTML.psd1’.
    At line:1 char:1
    + import-module ModernActiveDirectory
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ResourceUnavailable: (C:\Windows\syst…SWriteHTML.psd1:String) [Import-Module], Missing
    MemberException
    + FullyQualifiedErrorId : Modules_InvalidManifest,Microsoft.PowerShell.Commands.ImportModuleCommand

    Répondre
  • Hi Mehdi Thanks your support after import and run commnad report is genating but no Graph preparing and also domain and other tabs are hide when move there curser.

    Répondre
  • Bonjour,

    Je ne sais pas si d’autre personne constate la même chose que moi, j’ai l’impression que les paramètres permettant de pointer vers un autre logo ne fonctionnent pas. J’ai testé pas mal de chose avec différentes extensions, la même résolution que le logo par défaut, différent point de stockage, etc.. Mais rien ne semble fonctionné.

    Si quelqu’un a une idée, je suis preneur 🙂 ! Merci d’avance !

    Répondre
    • Bonjour Ukan,

      Si tu ouvres ton fichier ADModern.html avec un éditeur texte et tu cherches le mot suivant : PSWriteHtml Logo.
      Tu trouveras le chemin a coté de src= assures toi que le logo est accessible ou mets le dans la meme destination du dossier.
      as tu générer le rapport avec l’argument -comapnylogo en indiquant un chemin accessible.

      Répondre
  • Bonjour,

    Avant de l’utiliser, je voulais savoir si en installant les modules , l’installation sera faite sur l’AD ou juste sur ma machine. Aussi, un utilisateur lambda peut avec ses droits (simples) avoir accès à tous ses rapports?

    Merci

    Répondre
    • Bonjour Arsène,

      tu pourras installer le module sur n’importe qu’elle machine du parc windows 10/11 ou un serveur de préférence. t’as pas besoin de l’installer sur l’AD ni d’avoir les droits admins. nous partagerons bientôt un article pour montrer comment faire cela sur un serveur tier et n’autoriser l’accès qu’au groupe de ton choix après authentification bien sûr.

      Répondre
  • Bonjour,
    J’ai cette erreur lors du lancement de la commande « Get-ADModernReport -illimitedsearch -SavePath C:\inetpub\wwwroot »

    Get-ADComputer : The server has returned the following error: invalid enumeration context.
    At C:\Program Files\WindowsPowerShell\Modules\ModernActiveDirectory\1.4.1\ModernActiveDirectory.psm1:918 char:1
    + Get-ADComputer -LDAPFilter « (!(userAccountControl:1.2.840.113556.1.4. …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Get-ADComputer], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

    Savez vous d’ou cela peut venir ?

    Répondre
  • Bonjour,
    Les métriques peuvent être collectées à partir des infrastructures VMWare ?

    Répondre

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 la façon dont les données de vos commentaires sont traitées.