Adam the Automator

La base de données Active Directory est, de loin, la pièce la plus importante d’AD. Après tout, sans la base de données, AD ne serait pas grand-chose du tout. Où est la base de données Active Directory ? Où se trouve le fichier ntds.dit ? Et comment surveiller la base de données ? Vous apprendrez la réponse à ces questions dans ce tutoriel !

Il est important de surveiller tous les aspects d’AD et la base de données elle-même est de la plus haute importance. C’est pourquoi il vaut la peine de prendre le temps d’enquêter sur ce en quoi consiste la base de données et la meilleure façon de la surveiller pour s’assurer qu’elle reste en bonne santé.

Dans cet article, nous allons construire un script PowerShell qui vous permet de voir une requête chaque base de données AD sur chaque DC de votre domaine et de déterminer une métrique importante sur la base de données ; la taille globale de la base de données.

Table des matières

Ntds.dit (La base de données Active Directory)

Une base de données AD se compose d’un fichier appelé ntds.dit et l’emplacement de ntds.dit est généralement dans C:\Windows\NTDS de chaque contrôleur de domaine.

Pour nous assurer que nous obtenons le chemin approprié, nous devrons d’abord déterminer où se trouve le chemin de la base de données. Cette valeur est stockée dans la clé de registre HKLM:\System\CurrentControlSet\Services\NTDS\Parameters.

Recherche de la base de données AD avec PowerShell

Interrogeons tous les DC de notre environnement pour connaître le chemin du fichier de la base de données.

$dcs = (Get-ADDomainController).Name$dbs = Invoke-Command -ComputerName $dcs -ScriptBlock { Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\NTDS\Parameters} | Select PSComputerName,'DSA Database File'

Maintenant que je connais le chemin de la base de données Active Directory sur chaque DC, je peux maintenant interroger chacun des tailles actuelles. Pour ce faire, je vais utiliser une boucle foreach et itérer à travers la variable $dbs que j’ai créée ci-dessus et qui contient le nom du contrôleur de domaine et le chemin d’accès au fichier de base de données sur chacun.

Surveiller la taille de la base de données AD

Pour comprendre plus facilement la sortie, je vais utiliser une table de hachage $output, lui attribuer des valeurs au fur et à mesure que je lis chaque fichier de base de données comme le nom du contrôleur de domaine et la taille de chaque base de données. Je vais ensuite convertir cela en un objet personnalisé lorsque j’ai fini de lire le fichier de base de données. Cela montrera une sortie plus jolie que simplement PSComputerName, DSA Database File et la taille.

$dbs | foreach { $output = @{} $path = $_.'DSA Database File' $output.Add('DomainController', $_.PSComputerName) $size = Invoke-Command -ComputerName $_.PSComputerName -ScriptBlock { (Get-ItemProperty -Path $using:path).Length /1GB } $output.Add('DatabaseSizeDB', $size) $output}

Ce snippet vous donnera une belle sortie de DatabaseSizeDB et une propriété DomainController. Dans mon environnement de démonstration, je n’ai qu’un seul DC. Si vous exécutez ceci en production, vous verrez chacun de vos contrôleurs de domaine
ainsi que la taille totale de la base de données en Go à côté de chacun.

Vous avez maintenant un script que vous pouvez exécuter à tout moment pour obtenir un instantané ponctuel de la taille de chacun de vos fichiers de base de données Active Directory!