Identifier les modifications du schéma Active Directory

Envoyer

Sommaire

 

 

Introduction

Analyser les données de votre schéma Active Directory peut être très instructif. Cela permettra de mieux connaitre l’histoire de votre annuaire et évaluer les différentes mises à jour réalisées. Nous allons donc voir à travers cet article comment collecter et traiter les données nécessaires à notre analyse du schéma Active Directory.

Nous nous sommes inspiré de l’article « How to find active directory schema update history by using powershell » disponible sur le blog de Hey Scripting Guy.

 


Identifier les versions actuelles de votre schéma

Certains produits exigent que le schéma Active Directory soit mis à jour. Chaque nouvelle version de ces produits va également nécessiter possiblement une nouvelle mise à jour du schéma introduisant la notion de version.

Les produits les plus connus nécessitant une modification du schéma sont Microsoft Exchange Server, Microsoft Lync Server et bien évidement Active Directory.

Il est donc possible d’identifier rapidement, au sein du schéma, si un de ces produits a été déployé et quelle en est la dernière version. Pour cela, nous décrivons comment procéder en vous reportant à nos articles proposés ci-dessous :

 

Vous pouvez également utiliser le script PowerShell proposé par Ashley McGlone de Microsoft est disponible ICI.

Actuellement et à notre connaissance, aucun autre produit que ceux cités ci-dessus ne peut être identifié de manière analogue. Il faudra donc réaliser nécessairement une analyse plus approfondie.

 

 

A la découverte des grandes dates de l'histoire de votre schéma

Le schéma est en ensemble de classes et d’attributs permettant de construire des objets dans l’Active Directory. Il est donc rare que la modification du schéma soit réalisée régulièrement. En réalité, le schéma est modifié soit pour des besoins spécifiques (ajout d’un ou plusieurs attributs sur une classe d’objet), soit, et en général c’est la grande majorité des cas, pour des montées de version des produits Microsoft (Active Directory, Exchange, Lync, SCCM…). Ces montées de version entrainent la création de lot d’attributs et/ou de classes qui peuvent être rapidement identifiés depuis les diverses publications officielles de Microsoft. Concernant les modifications spécifiques, elles sont peut recommandées, extrêmement rares et très limitées donc également facilement différentiables.

Remarque : pour plus d’information sur la notion de schéma Active Directory, nous vous invitons à consulter notre article sur le sujet « Les versions de schéma et les niveaux fonctionnels Active Directory ».

La première étape consiste à récupérer tous les objets de la partition de schéma ainsi que leur date de création. Comme une mise à jour de schéma induit la création de plusieurs nouvelles classes ou attributs, en regroupant les objets du schéma par date de création, nous aurons rapidement une vue globale sur les différentes mises à jour effectuées.

Pour cela, nous avons utilisé le code PowerShell ci-dessous, retournant le nombre d’objets dans le schéma Active Directory regroupés par date de création  et par date de modification.

$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()

$ADSearcher = New-Object System.DirectoryServices.DirectorySearcher
$ADSearcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry($forest.Schema.GetDirectoryEntry().Path)
$ADSearcher.PageSize = 10000
$ADSearcher.SearchScope = "Subtree"

$SchemaProperties = @("objectclass","name","whenchanged","whencreated")

$ADSearcher.PropertiesToLoad.Clear()
$ADSearcher.PropertiesToLoad.AddRange(@($SchemaProperties))

$ADSchema = $ADSearcher.FindAll()

$selectedProperties = $SchemaProperties | ForEach-Object {@{name="$_";expression=$ExecutionContext.InvokeCommand.NewScriptBlock("`$_['$_']")}}
$FilteredResult = @()

foreach ( $object in $ADSchema )
{
 $FilteredResult += $Object.Properties | Select-Object -Property $selectedProperties | Select-Object "objectClass","name",@{Name="whenChanged";Expression={($_.whenChanged).Date.ToShortDateString()}},@{Name="WhenCreated";Expression={($_.WhenCreated).Date.ToShortDateString()}}
}

Write-Host "Schema objects grouped by creation date:" -foreground green
$FilteredResult | group-object WhenCreated | ft Count,Name -autosize

Write-Host "Schema objects grouped by modification date:" -foreground green
$FilteredResult | group-object WhenChanged | ft Count,Name –autosize
$FilteredResult | Export-Csv –Path "Export-SchemaObjects.csv" –delimiter ";" –NotypeInformation

 

Nous l’avons ensuite exécuté dans un environnement de test où nous avons réalisé les opérations suivantes :

  • Création de la forêt le 19 décembre 2012 sous Windows 2000.
  • Mise à jour du schéma le 27 décembre 2012 vers Windows 2003.
  • Mise à jour du schéma le 3 Janvier 2013 vers Windows 2003 R2.
  • Mise à jour du schéma le 10 Janvier 2013 vers Windows 2008.

 

Lors de l’exécution du script dans ce même environnement de test, nous avons obtenu le résultat suivant :

 

Nous constatons que la date de création est un très bon indicateur et reflète bien les différentes mises à jour réalisées. La seule singularité du résultat retourné par le script est cette date du  21/10/1630. Elle provient en fait de la base de données modèle qui est utilisé par Active Directory lors de la promotion du premier contrôleur de domaine de la forêt. Dans notre exemple cette date provient du modèle fourni avec Windows Server 2000. Nous ne pouvons donc pas nous baser sur cette date pour connaître la date de création de la forêt. Par contre, nous pouvons nous base sur la date de création de la partition de schéma qui est le fameux « Count » égal à 1 dans notre exemple et qui nous permet donc de dire que tous les objets affichant une date de création en date du 21/10/1630 ont été créés le 19/12/2012.

La date de modification est par contre difficilement exploitable. En effet, un attribut ou une classe peut être modifié à plusieurs reprises. Une mise à jour du schéma peut également entrainer la modification de nombreux objets (comme par exemple la mise à jour de Windows 2008 qui met à jour de nombreux attributs pour la fonctionnalité FAS de RODC).

 

 

Identifier la nature des différentes mises à jour

Une fois que nous avons identifié clairement les différentes dates de mises à jour de notre schéma, il faut maintenant identifier à quel type de mise à jour elles sont associées.

Nous savons déjà que certains produits Microsoft sont responsables de la création de classes et d’attributs à chaque nouvelle version  (Il même d’ailleurs fort probable que la quasi-totalité des mises à jour est été faites par un de ces produits):

  • Microsoft Windows Server et Active Directory
  • Microsoft Exchange Server
  • Microsoft Lync Server
  • Microsoft System Center Configuration Manager

 

Il ne restait donc plus qu’à associer les noms des différents attributs ou classes du schéma en se basant sur diverses sources :

 

Afin d’exploiter au mieux cette information, nous avons tenté de consolider dans un fichier CSV l’ensemble des attributs et classes du schéma associé aux différentes versions des produits Microsoft. Le fichier est disponible en téléchargement ICI. Il vous suffira de rechercher le nom d’un attribut pour obtenir la version du produit Microsoft et d’y associer une date de création.

 

 

Facilitez-vous la vie !

Afin de réaliser toutes ces opérations de manière automatique, nous avons créé le script PowerShell « Active Directory Schema Discover 1.0 » disposant d’une interface graphique afin de faciliter la consultation des informations relatives au schéma.

 

 

 

 

 

 

 

 


Le script est disponible en téléchargement ICI.

 

 

 

Aller plus loin

Nous avons vu premièrement comment identifier les différentes dates de mises à jour de votre schéma. Ensuite, nous avons montré comment associer ces dates de mises à jour aux différents produits. Le cas échéant, les possibles personnalisations de votre schéma peuvent apparaitre au grand jour et ouvrir le pas à de nouvelles investigations.

Mais l’analyse de notre schéma n’est pas faite en profondeur. Les possibles modifications d’attributs existants n’apparaitront pas dans le cadre de ces opérations. Il faudra donc, si nécessaire, pousser l’analyse et utiliser des outils tel que « AD DS / LDS Schema Analyzer » de Microsoft que nous vous présenterons dans un prochain article.

 

 


How to Find Active Directory Schema Update History by Using PowerShell

Mise à jour le Vendredi, 11 Janvier 2013 09:15