Adam the Automator

Active Directory-databasen är den överlägset viktigaste delen av AD. Utan databasen skulle AD trots allt inte vara särskilt bra alls. Var finns Active Directory-databasen? Var finns ntds.dit? Och hur övervakar du databasen? Du får svaret på dessa frågor i den här handledningen!

Det är viktigt att övervaka alla aspekter av AD och själva databasen är av yttersta vikt. Därför är det väl värt tiden att undersöka vad databasen består av och hur man bäst övervakar den för att se till att den håller sig frisk.

I den här artikeln kommer vi att bygga ett PowerShell-skript som gör att du kan se en fråga varje AD-databas på varje DC i din domän och bestämma ett viktigt mått om databasen; den totala databasstorleken.

Innehållsförteckning

Ntds.dit (Active Directory-databasen)

En AD-databas består av en fil som heter ntds.dit och platsen för ntds.dit ligger vanligen i C:\Windows\NTDS på varje domänkontrollant.

För att se till att vi får rätt sökväg måste vi först ta reda på var sökvägen till databasen ligger. Det här värdet lagras i registernyckeln HKLM:\System\CurrentControlSet\Services\NTDS\Parameters.

Hitta AD-databasen med PowerShell

Låt oss fråga alla DC:er i vår miljö efter sökvägen till databasfilen.

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

När jag nu känner till sökvägen till Active Directory-databasen på varje DC, kan jag nu fråga alla aktuella storlekar. För att göra detta använder jag en foreach-slinga och itererar genom $dbs-variabeln som jag skapade ovan och som innehåller domänkontrollantens namn och sökvägen till databasfilen på varje.

Övervakning av AD-databasens storlek

För att lättare förstå utmatningen kommer jag att använda en $output-hashtabell, tilldela värden till den när jag läser varje databasfil som domänkontrollantens namn och storleken på varje databas. Jag konverterar sedan detta till ett anpassat objekt när jag är klar med att läsa databasfilen. Detta kommer att visa en trevligare utdata än bara PSComputerName, DSA Database File och storleken.

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

Detta utdrag ger dig en trevlig utdata på DatabaseSizeDB och en DomainController egenskap. I min demomiljö har jag bara en enda DC. Om du körde detta i produktionen skulle du se var och en av dina domänkontrollanter
tillsammans med den totala databasstorleken i GB bredvid var och en.

Nu har du ett skript som du kan köra när som helst för att få en ögonblicksbild av hur stor var och en av dina Active Directory-databasfiler har vuxit till!