Adam the Automator

Il database di Active Directory è, di gran lunga, il pezzo più importante di AD. Dopo tutto, senza il database, AD non servirebbe a molto. Dov’è il database di Active Directory? Dov’è la posizione ntds.dit? E come monitorare il database? Imparerai la risposta a queste domande in questo tutorial!

È importante monitorare tutti gli aspetti di AD e il database stesso è della massima importanza. Questo è il motivo per cui vale la pena di indagare su cosa consiste il database e su come monitorarlo al meglio per assicurarsi che rimanga in salute.

In questo articolo, costruiremo uno script PowerShell che ti permette di vedere una query per ogni database AD su ogni DC nel tuo dominio e determinare una metrica importante sul database; la dimensione complessiva del database.

Tabella dei contenuti

Ntds.dit (Il database di Active Directory)

Un database AD consiste in un file chiamato ntds.dit e la posizione ntds.dit è solitamente in C:\Windows\NTDS di ogni controller di dominio.

Per assicurarci di ottenere il percorso corretto, dobbiamo prima capire dov’è il percorso del database. Questo valore è memorizzato nella chiave di registro HKLM:\System\CurrentControlSet\Services\NTDS\Parameters.

Trovare il database AD con PowerShell

Interroghiamo tutti i DC nel nostro ambiente per il percorso del file di database.

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

Ora che conosco il percorso del database Active Directory su ogni DC, posso ora interrogare ognuno delle dimensioni attuali. Per fare questo, userò un ciclo foreach e itererò attraverso la variabile $dbs che ho creato sopra e che contiene il nome del controller di dominio e il percorso del file di database su ciascuno.

Monitoraggio della dimensione del database AD

Per comprendere più facilmente l’output, userò una hashtable $output, assegnerò dei valori ad essa mentre leggo ogni file di database come il nome del controller di dominio e la dimensione di ogni database. Lo convertirò poi in un oggetto personalizzato quando avrò finito di leggere il file di database. Questo mostrerà un output più bello che semplicemente PSComputerName, DSA Database File e la dimensione.

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

Questo snippet vi darà un bel output di DatabaseSizeDB e una proprietà DomainController. Nel mio ambiente demo, ho solo un singolo DC. Se lo stessi eseguendo in produzione, vedresti ciascuno dei tuoi controller di dominio
insieme alla dimensione totale del database in GB accanto a ciascuno di essi.

Ora hai uno script che puoi eseguire in qualsiasi momento per ottenere un’istantanea point-in-time di quanto grande sia cresciuto ciascuno dei tuoi file di database di Active Directory!