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!