Adam the Automator
De Active Directory database is, verreweg, het belangrijkste onderdeel van AD. Immers, zonder de database, zou AD niet veel voorstellen. Waar is de Active Directory database? Waar is de ntds.dit locatie? En hoe bewaak je de database? Het antwoord op deze vragen leer je in deze tutorial!
Het is belangrijk om alle aspecten van AD te monitoren en de database zelf is van het grootste belang. Daarom is het de moeite waard om te onderzoeken waar de database uit bestaat en hoe je deze het beste kunt monitoren om ervoor te zorgen dat deze gezond blijft.
In dit artikel gaan we een PowerShell-script bouwen waarmee je elke AD-database op elke DC in je domein kunt bekijken en een belangrijke metric over de database kunt bepalen; de totale databasegrootte.
Inhoudsopgave
Ntds.dit (De Active Directory Database)
Een AD-database bestaat uit een bestand met de naam ntds.dit en de locatie ntds.dit bevindt zich meestal in C:WindowsWindowsNTDS van elke domeincontroller.
Om er zeker van te zijn dat we het juiste pad krijgen, moeten we eerst achterhalen waar het databasepad zich bevindt. Deze waarde is opgeslagen in de registersleutel HKLM:\SystemCurrentControlSet\Services\NTDS\Parameters.
Vinden van de AD Database met PowerShell
Laten we alle DCs in onze omgeving vragen naar het database bestandspad.
$dcs = (Get-ADDomainController).Name$dbs = Invoke-Command -ComputerName $dcs -ScriptBlock { Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\NTDS\Parameters} | Select PSComputerName,'DSA Database File'
Nu ik het pad naar de Active Directory database op elke DC weet, kan ik nu elke DC van de huidige groottes vragen. Om dit te doen, zal ik een foreach lus gebruiken en itereren door de $dbs
variabele die ik hierboven heb gemaakt en die de domein controller naam bevat en het pad naar het database bestand op elk.
Monitoring the Size of the AD Database
Om de output beter te begrijpen, ga ik een $output
hashtable gebruiken, en er waarden aan toewijzen terwijl ik elk database bestand lees, zoals de domein controller naam en de grootte van elke database. Dan converteer ik dit naar een aangepast object als ik klaar ben met het lezen van het database bestand. Dit zal een mooiere uitvoer laten zien dan alleen PSComputerName, DSA Database File en de grootte.
$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}
Deze snippet zal je een mooie uitvoer geven van DatabaseSizeDB
en een DomainController
eigenschap. In mijn demo omgeving, heb ik maar een enkele DC. Als je dit in productie zou draaien, zou je naast elk van je domeincontrollers
zien, samen met de totale databasegrootte in GB.
Nu heb je een script dat je op elk gewenst moment kunt draaien om een momentopname te krijgen van hoe groot elk van je Active Directory databasebestanden is geworden.