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 dar suporte à aplicação. Para proteger a integridade do AD, vale a pena verificar se apenas alterações aprovadas no esquema estão sendo 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 do 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. Mas é 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.
Instale o módulo do PowerShell do Active Directory do Windows Server
O módulo do PowerShell do AD 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, veja Como Instalar as Ferramentas de Administração do Servidor Remoto no Windows 10 no Petri.
Relatório de alterações no esquema do 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 nomenclatura do esquema do nosso diretório. Felizmente, isso é fácil de recuperar usando o cmdlet Get-ADRootDSE. Se você executar Get-ADRootDSE sem parâmetros, verá o caminho para o contexto de nomenclatura do esquema do diretório no resultado.
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 filhos imediatos do caminho fornecido no parâmetro -SearchBase. Um curinga, *, é 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 .
$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 a informação de tempo. 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 encadeei 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 de forma resumida.
$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 encadear o objeto criado pelo Select-Object para Sort-Object. E fazê-lo classificar 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 encadear 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
$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. No meu diretório, o Exchange Server estava instalado, então podemos ver muitas alterações no esquema.
Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/