Como Relatar Alterações no Esquema do Active Directory Usando o PowerShell

Alterações no esquema do Active Directory (AD) podem resultar em problemas operacionais. Em geral, o esquema não deve ser alterado. Mas se for instalada uma nova aplicação que depende do Active Directory, como o Microsoft Exchange Server, então o esquema deve ser atualizado para suportar a aplicação. Para proteger a integridade do AD, vale a pena verificar se apenas alterações aprovadas no esquema são feitas.

Usando o PowerShell, é fácil gerar um relatório de alterações no esquema do AD. Mas antes de executar o código neste artigo, instale o módulo PowerShell para o Active Directory do Windows Server. O módulo PowerShell do Active Directory é instalado nos controladores de domínio (DC) por padrão. No entanto, é uma boa prática realizar tarefas de administração do dia a dia a partir de um PC com Windows 10 associado ao domínio.

Publicidade

Instale o módulo PowerShell do Active Directory do Windows Server

O módulo AD PowerShell faz parte das Ferramentas de Administração do Servidor Remoto (RSAT) para os Serviços de Domínio do Active Directory. Para instalar as ferramentas RSAT AD, abra um prompt do PowerShell com privilégios de administrador local e execute o seguinte comando:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online

Depois que as ferramentas forem instaladas, você pode fechar a janela elevada do PowerShell. Para executar o restante dos comandos neste artigo, você só precisa estar logado no Windows 10 com uma conta que seja membro do grupo ‘Usuários do Domínio’ do Active Directory.

Para mais informações sobre como instalar o RSAT no Windows 10, consulte Como Instalar as Ferramentas de Administração do Servidor Remoto no Windows 10 no Petri.

Relatório de alterações no esquema AD usando o PowerShell

Usando o cmdlet Get-ADObject, podemos exibir alterações no esquema. Mas primeiro precisamos fornecer ao Get-ADObject uma base de pesquisa, ou seja, uma área do diretório para pesquisar. Queremos pesquisar o esquema, então precisamos saber o contexto de nomeação do esquema do nosso diretório. Felizmente, isso é fácil de recuperar usando o cmdlet Get-ADRootDSE. Se você executar Get-ADRootDSE sem quaisquer parâmetros, verá o caminho para o schemaNamingContext do diretório na saída.

Anúncio

Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)

 

O PowerShell facilita a extração de qualquer propriedade, como schemaNamingContext, usando um ponto e parênteses, conforme mostrado abaixo:

((Get-ADRootDSE).schemanamingcontext)

Podemos usar o código acima como o valor para o parâmetro -SearchBase no cmdlet Get-ADObject. Mas há mais alguns parâmetros que precisamos adicionar. -SearchScope deve ser definido como OneLevel, que pesquisa os objetos imediatos filhos do caminho fornecido no parâmetro -SearchBase. Um asterisco, *, é usado como o valor do parâmetro -Filter para retornar tudo.

Finalmente, usamos o parâmetro -Properties para especificar as propriedades que queremos retornar como parte da saída. Como você pode ver, vou extrair as propriedades objectClass, name, whenChanged, e whenCreated.

Anúncio

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated

Queremos agrupar os dados retornados por data. Para fazer isso, precisamos da data whencreated sem as informações de horário. Podemos usar o cmdlet Select-Object e uma propriedade calculada para criar um novo objeto com os dados que precisamos no formato correto. No comando expandido abaixo, você pode ver que encaminhei o objeto gerado pelo Get-ADObject para o cmdlet Select-Object. @ indica uma propriedade calculada, que tem um rótulo ‘Evento’ e uma expressão que retorna apenas a data da propriedade whenCreated em formato abreviado.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}

Em seguida, vamos encaminhar o objeto criado pelo Select-Object para Sort-Object. E fazer com que ordene os dados do objeto pela propriedade whenCreated.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

Por fim, vamos encaminhar o objeto para o cmdlet Format-Table. Ele exibirá as propriedades em uma tabela, agrupadas por Evento, que criamos usando o cmdlet Select-Object.

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize

Se executarmos todo o código juntos, veremos alterações de esquema listadas na janela do prompt de comando. Em meu diretório, o Exchange Server foi instalado, então podemos ver muitas alterações no esquema. 

 

Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/