Adam the Automator

Databasen i Active Directory er langt den vigtigste del af AD. Uden databasen ville AD trods alt ikke være meget værd overhovedet. Hvor er Active Directory-databasen? Hvor er ntds.dit placeret? Og hvordan kan du overvåge databasen? Du får svaret på disse spørgsmål i denne vejledning!

Det er vigtigt at overvåge alle aspekter af AD, og selve databasen er af største betydning. Derfor er det værd at bruge tid på at undersøge, hvad databasen består af, og hvordan du bedst overvåger den for at sikre, at den forbliver sund.

I denne artikel vil vi bygge et PowerShell-script, der giver dig mulighed for at se en forespørgsel på hver AD-database på hver DC i dit domæne og bestemme en vigtig metrik om databasen; den samlede databasestørrelse.

Indholdsfortegnelse

Ntds.dit (Active Directory-databasen)

En AD-database består af en fil kaldet ntds.dit, og placeringen af ntds.dit er normalt i C:\Windows\NTDS på hver domænecontroller.

For at sikre, at vi får den korrekte sti, skal vi først finde ud af, hvor databasestien er. Denne værdi er gemt i registreringsdatabasenøglen HKLM:\System\CurrentControlSet\Services\NTDS\NTDS\Parameters.

Find AD-databasen med PowerShell

Lad os spørge alle DC’er i vores miljø om stien til databasefilen.

$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, hvor jeg kender stien til Active Directory-databasen på hver DC, kan jeg nu spørge hver enkelt af de aktuelle størrelser. For at gøre dette vil jeg bruge en foreach-loop og iterere gennem den $dbs-variabel, jeg oprettede ovenfor, som indeholder domænecontrollernavnet og stien til databasefilen på hver.

Overvågning af AD-databasens størrelse

For lettere at forstå output vil jeg bruge en $output hashtabel, tildele værdier til den, mens jeg læser hver databasefil som domænecontrollernavnet og størrelsen af hver database. Jeg vil derefter konvertere dette til et brugerdefineret objekt, når jeg er færdig med at læse databasefilen. Dette vil vise et pænere output end blot PSComputerName, DSA Database File og størrelsen.

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

Dette uddrag vil give dig et pænt output på DatabaseSizeDB og en DomainController-egenskab. I mit demomiljø har jeg kun en enkelt DC. Hvis du kørte dette i produktionen, ville du se hver af dine domænecontrollere
samt den samlede databasestørrelse i GB ved siden af hver enkelt.

Nu har du et script, du kan køre når som helst for at få et øjebliksbillede af, hvor stor hver af dine Active Directory-databasefiler er vokset til!