Los cambios en el esquema de Active Directory (AD) pueden provocar problemas operativos. En general, el esquema no debería cambiar. Pero si se instala una nueva aplicación que depende de Active Directory, como Microsoft Exchange Server, entonces el esquema debe actualizarse para soportar la aplicación. Para proteger la integridad de AD, vale la pena verificar que solo se realicen cambios aprobados en el esquema.
Usando PowerShell, es fácil generar un informe de los cambios en el esquema de AD. Pero antes de ejecutar el código en este artículo, instale el módulo de PowerShell para Active Directory de Windows Server. El módulo de PowerShell de Active Directory está instalado en controladores de dominio (DC) de forma predeterminada. Pero es una práctica recomendada realizar tareas de administración diaria desde un PC con Windows 10 unido al dominio.
Instale el módulo de PowerShell de Active Directory de Windows Server
El módulo de PowerShell de AD es parte de las Herramientas de Administración del Servidor Remoto (RSAT) para los Servicios de Dominio de Active Directory. Para instalar las herramientas de RSAT AD, abra un símbolo del sistema de PowerShell con privilegios de administrador local y ejecute el siguiente comando:
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online
Una vez que se hayan instalado las herramientas, puede cerrar la ventana de PowerShell elevada. Para ejecutar el resto de los comandos en este artículo, solo necesita haber iniciado sesión en Windows 10 con una cuenta que sea miembro del grupo ‘Usuarios del Dominio’ de Active Directory.
Para obtener más información sobre la instalación de RSAT en Windows 10, consulte Cómo Instalar las Herramientas de Administración del Servidor Remoto en Windows 10 en Petri.
Informar cambios en el esquema de AD utilizando PowerShell
Utilizando el cmdlet Get-ADObject, podemos mostrar cambios en el esquema. Pero primero debemos proporcionar a Get-ADObject una base de búsqueda, o en otras palabras, un área de directorio para buscar. Queremos buscar en el esquema, por lo que necesitamos conocer el contexto de nomenclatura del esquema de nuestro directorio. Afortunadamente, es fácil de recuperar utilizando el cmdlet Get-ADRootDSE. Si ejecuta Get-ADRootDSE sin ningún parámetro, verá el camino para el contexto de nomenclatura del esquema del directorio en la salida.
PowerShell facilita la extracción de cualquier propiedad, como schemaNamingContext, utilizando un punto y paréntesis como se muestra a continuación:
((Get-ADRootDSE).schemanamingcontext)
Podemos usar el código anterior como valor para el parámetro -SearchBase en el cmdlet Get-ADObject. Pero hay un par de otros parámetros que debemos agregar. -SearchScope debe establecerse en OneLevel, que busca los objetos inmediatos hijos del camino proporcionado en el parámetro -SearchBase. Un comodín, *, se usa como valor del parámetro -Filter para devolver todo.
Finalmente, utilizamos el parámetro -Properties para especificar las propiedades que queremos devolver como parte de la salida. Como puede ver, voy a extraer las propiedades objectClass, name, whenChanged, y whenCreated .
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated
Queremos agrupar los datos devueltos por fecha. Para ello, necesitamos la fecha whencreated sin la información de la hora. Podemos utilizar el cmdlet Select-Object y una propiedad calculada para crear un nuevo objeto con los datos que necesitamos en el formato correcto. En el comando ampliado a continuación, puedes ver que he pasado el objeto generado por Get-ADObject al cmdlet Select-Object. @ indica una propiedad calculada, que tiene una etiqueta, ‘Evento’, y una expresión que devuelve solo la fecha de la propiedad whenCreated en formato corto.
$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()}}
A continuación, vamos a pasar el objeto creado por Select-Object al cmdlet Sort-Object. Y hacer que ordene los datos del objeto por la propiedad 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
Finalmente, pasemos el objeto al cmdlet Format-Table. Mostrará las propiedades en una tabla, agrupadas por Evento, que creamos usando el 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
Si ejecutamos todo el código juntos, veremos los cambios de esquema enumerados en la ventana del símbolo del sistema. En mi directorio, se instaló el servidor Exchange, por lo que podemos ver muchos cambios en el esquema.
Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/