Adam the Automator

Baza danych Active Directory jest, zdecydowanie, najważniejszym elementem AD. W końcu, bez bazy danych, AD nie byłoby w ogóle dobre. Gdzie jest baza danych Active Directory? Gdzie znajduje się plik ntds.dit? I jak monitorować bazę danych? Odpowiedź na te pytania poznasz w tym poradniku!

Monitorowanie wszystkich aspektów AD jest bardzo ważne, a sama baza danych jest najważniejsza. Dlatego warto poświęcić czas na zbadanie z czego składa się baza danych i jak najlepiej ją monitorować, aby upewnić się, że pozostaje zdrowa.

W tym artykule zbudujemy skrypt PowerShell, który pozwala zobaczyć zapytanie do każdej bazy danych AD w każdym DC w domenie i określić jedną ważną metrykę dotyczącą bazy danych; całkowity rozmiar bazy danych.

Table of Contents

Ntds.dit (The Active Directory Database)

Baza danych AD składa się z pliku zwanego ntds.dit i lokalizacja ntds.dit jest zwykle w C:\Windows\NTDS każdego kontrolera domeny.

Aby upewnić się, że otrzymujemy właściwą ścieżkę, musimy najpierw dowiedzieć się, gdzie jest ścieżka bazy danych. Wartość ta jest przechowywana w kluczu rejestru HKLM:

Finding the AD Database with PowerShell

Zapytajmy wszystkie DC w naszym środowisku o ścieżkę do pliku bazy danych.

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

Gdy znam już ścieżkę do bazy danych Active Directory na każdym DC, mogę teraz odpytać każdy z nich o bieżące rozmiary. Aby to zrobić, użyję pętli foreach i wykonam iterację przez zmienną $dbs, którą utworzyłem powyżej, która zawiera nazwę kontrolera domeny i ścieżkę do pliku bazy danych na każdym z nich.

Monitorowanie rozmiaru bazy danych AD

Aby łatwiej zrozumieć dane wyjściowe, użyję $output hashtable, przypiszę do niej wartości podczas czytania każdego pliku bazy danych, takie jak nazwa kontrolera domeny i rozmiar każdej bazy danych. Następnie przekonwertuję to do niestandardowego obiektu, gdy skończę czytać plik bazy danych. Dzięki temu uzyskam ładniejsze dane wyjściowe niż po prostu PSComputerName, DSA Database File i rozmiar.

$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}

Ten snippet da ci ładne dane wyjściowe DatabaseSizeDB i właściwość DomainController. W moim środowisku demonstracyjnym mam tylko jeden DC. Gdybyś uruchamiał to na produkcji, zobaczyłbyś każdy z kontrolerów domeny
wraz z całkowitym rozmiarem bazy danych w GB obok każdego z nich.

Teraz masz skrypt, który możesz uruchomić w dowolnym momencie, aby uzyskać migawkę w czasie, jak duży jest każdy z plików bazy danych Active Directory!