Adam o Automador

A base de dados do Active Directory é, de longe, a peça mais importante do AD. Afinal, sem a base de dados, o AD não seria muito bom de todo. Onde está a base de dados do Active Directory? Onde está a localização do ntds.dit? E como você monitora a base de dados? Você aprenderá a resposta a estas perguntas neste tutorial!

É importante monitorar todos os aspectos do AD e a própria base de dados é da maior importância. É por isso que vale bem a pena o tempo para investigar em que consiste a base de dados e como melhor monitorizá-la para garantir que se mantém saudável.

Neste artigo, vamos construir um script PowerShell que lhe permite ver uma consulta a cada base de dados de AD em cada CD do seu domínio e determinar uma métrica importante sobre a base de dados; o tamanho geral da base de dados.

Tabela de Conteúdos

Ntds.dit (The Active Directory Database)

Uma base de dados AD consiste num ficheiro chamado ntds.dit e a localização ntds.dit é normalmente em C:\NTDS de cada controlador de domínio.

Para garantir que obtemos o caminho adequado, vamos precisar primeiro de descobrir onde está o caminho da base de dados. Este valor é armazenado na chave de registo HKLM:\System\CurrentControlSet\Services\NTDS\Parameters.

Finding the AD Database with PowerShell

Vamos consultar todos os CDs do nosso ambiente para o caminho do ficheiro da base de dados.

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

Agora eu sei o caminho para a base de dados Active Directory em cada CD, posso agora consultar cada um dos tamanhos actuais. Para fazer isso, vou usar um loop foreach e iterar através da variável $dbs que criei acima, que contém o nome do controlador de domínio e o caminho para o arquivo da base de dados em cada.

Monitorando o tamanho da base de dados AD

Para entender mais facilmente a saída, vou usar um hashtable $output, atribuir valores a ele, pois estou lendo cada arquivo da base de dados como o nome do controlador de domínio e o tamanho de cada base de dados. Vou então converter isto para um objecto personalizado quando acabar de ler o ficheiro de base de dados. Isto irá mostrar uma saída mais agradável do que simplesmente PSComputerName, DSA Database File e o tamanho.

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

Este snippet irá dar-lhe uma boa saída de DatabaseSizeDB e uma propriedade DomainController. No meu ambiente de demonstração, eu só tenho um único DC. Se você estivesse rodando isso em produção, você veria cada um dos seus controladores de domínio
along com o tamanho total da base de dados em GB ao lado de cada um.

Agora você tem um script que você pode rodar a qualquer momento para obter um instantâneo do tamanho de cada um dos seus arquivos de base de dados Active Directory!