Les modifications du schéma de l’Active Directory (AD) peuvent entraîner des problèmes opérationnels. En général, le schéma ne doit pas être modifié. Mais si une nouvelle application est installée et qu’elle dépend de l’Active Directory, comme Microsoft Exchange Server, alors le schéma doit être mis à jour pour prendre en charge l’application. Pour protéger l’intégrité de l’AD, il vaut la peine de vérifier que seules les modifications approuvées du schéma sont apportées.
En utilisant PowerShell, il est facile de générer un rapport des modifications du schéma de l’AD. Mais avant d’exécuter le code de cet article, installez le module PowerShell pour l’Active Directory de Windows Server. Le module PowerShell de l’Active Directory est installé par défaut sur les contrôleurs de domaine (DC). Mais il est recommandé de réaliser les tâches d’administration courantes à partir d’un PC Windows 10 joint au domaine.
Installez le module PowerShell pour l’Active Directory de Windows Server
Le module AD PowerShell fait partie des Outils d’administration de serveur distant (RSAT) pour les Services de domaine Active Directory. Pour installer les outils RSAT AD, ouvrez une fenêtre PowerShell avec des privilèges d’administrateur local et exécutez la commande suivante :
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online
Une fois les outils installés, vous pouvez fermer la fenêtre PowerShell élevée. Pour exécuter le reste des commandes de cet article, il suffit d’être connecté à Windows 10 avec un compte membre du groupe des utilisateurs du domaine Active Directory.
Pour plus d’informations sur l’installation de RSAT dans Windows 10, consultez l’article Comment installer les Outils d’administration de serveur distant dans Windows 10 sur Petri.
Rapport des modifications du schéma AD à l’aide de PowerShell
A l’aide du cmdlet Get-ADObject, nous pouvons afficher les modifications du schéma. Mais d’abord, nous devons fournir à Get-ADObject une base de recherche, ou en d’autres termes, une zone du répertoire à rechercher. Nous voulons rechercher le schéma, donc nous devons connaître le contexte de nommage du schéma de notre répertoire. Heureusement, c’est facile à récupérer à l’aide du cmdlet Get-ADRootDSE. Si vous exécutez Get-ADRootDSE sans aucun paramètre, vous verrez le chemin du répertoire schemaNamingContext dans la sortie.
PowerShell facilite l’extraction de n’importe quel attribut, comme schemaNamingContext, en utilisant un point et des parenthèses comme indiqué ci-dessous:
((Get-ADRootDSE).schemanamingcontext)
Nous pouvons utiliser le code ci-dessus comme valeur pour le paramètre -SearchBase dans le cmdlet Get-ADObject. Mais il y a quelques autres paramètres que nous devons ajouter. -SearchScope doit être défini sur OneLevel, qui recherche les objets enfants immédiats du chemin fourni dans le paramètre -SearchBase. Un joker, *, est utilisé comme valeur du paramètre -Filter pour retourner tout.
Enfin, nous utilisons le paramètre -Properties pour spécifier les propriétés que nous voulons retourner dans le cadre de la sortie. Comme vous pouvez le voir, je vais extraire les objectClass, name, whenChanged, et whenCreated propriétés.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated
Nous voulons regrouper les données renvoyées par date. Pour ce faire, nous avons besoin de la date whencreated sans l’heure. Nous pouvons utiliser la cmdlet Select-Object et une propriété calculée pour créer un nouvel objet avec les données dont nous avons besoin dans le bon format. Dans la commande étendue ci-dessous, vous pouvez voir que j’ai accolé l’objet généré par Get-ADObject à la cmdlet Select-Object. @ indique une propriété calculée, qui a pour étiquette « Événement », et une expression qui renvoie seulement la date de la propriété whenCreated sous une forme abrégée.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}
Ensuite, nous allons transmettre l’objet créé par Select-Object à Sort-Object. Et le faire trier les données de l’objet par la propriété whenCreated.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated
Enfin, transmettons l’objet à la cmdlet Format-Table. Cela affichera les propriétés dans un tableau, regroupées par Événement, que nous avons créé en utilisant la cmdlet Select-Object.
$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated $schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Si nous exécutons tout le code ensemble, nous verrons les modifications du schéma répertoriées dans la fenêtre d’invite de commandes. Dans mon répertoire, le serveur Exchange a été installé, donc nous pouvons voir de nombreuses modifications du schéma.
Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/