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!