Advanced Active Directory Replication and Topology Management Using Windows PowerShell (Level 200)
En este tema se explican más detalladamente los cmdlets de administración de la topología y la replicación de AD DS y se incluyen más ejemplos relacionados. Para ver una introducción, consulta Administración de la replicación y la topología de Active Directory con Windows PowerShell (nivel 100).
Introducción
En la siguiente tabla se recogen los cmdlets de topología y replicación que se han agregado al módulo de Windows PowerShell para Active Directory:
Cmdlet | Explicación |
---|---|
Get-ADReplicationAttributeMetadata | Devuelve los metadatos de replicación de atributo de un objeto. |
Get-ADReplicationConnection | Devuelve los detalles de objeto de conexión del controlador de dominio. |
Get-ADReplicationFailure | Devuelve el error de replicación más reciente de un controlador de dominio. |
Get-ADReplicationPartnerMetadata | Devuelve la configuración de replicación de un controlador de dominio. |
Get-ADReplicationQueueOperation | Devuelve el trabajo pendiente de cola de replicación actual. |
Get-ADReplicationSite | Devuelve información del sitio. |
Get-ADReplicationSiteLink | Devuelve información del vínculo del sitio. |
Get-ADReplicationSiteLinkBridge | Devuelve información del puente de vínculos a sitios. |
Get-ADReplicationSubnet | Devuelve información de subred de AD. |
Get-ADReplicationUpToDatenessVectorTable | Devuelve el vector UTD de un controlador de dominio. |
Get-ADTrust | Devuelve información sobre una confianza entre dominios o entre bosques. |
New-ADReplicationSite | Crea un sitio. |
New-ADReplicationSiteLink | Crea un vínculo de sitio. |
New-ADReplicationSiteLinkBridge | Crea un puente de vínculos a sitios. |
New-ADReplicationSubnet | Crea una subred de AD. |
Remove-ADReplicationSite | Elimina un sitio. |
Remove-ADReplicationSiteLink | Elimina un vínculo de sitio. |
Remove-ADReplicationSiteLinkBridge | Elimina un puente de vínculos a sitios. |
Remove-ADReplicationSubnet | Elimina una subred de AD. |
Set-ADReplicationConnection | Modifica una conexión. |
Set-ADReplicationSite | Modifica un sitio. |
Set-ADReplicationSiteLink | Modifica un vínculo de sitio. |
Set-ADReplicationSiteLinkBridge | Modifica un puente de vínculos a sitios. |
Set-ADReplicationSubnet | Modifica una subred de AD. |
Sync-ADObject | Fuerza la replicación de un único objeto. |
La mayoría de estos cmdlets se basa en Repadmin.exe. Otros cmdlets (que no figuran aquí) controlan características como el control de acceso dinámico y las cuentas de servicio administradas de grupo.
Ejecuta lo siguiente para ver una lista con todos los cmdlets de Windows PowerShell para Active Directory:
Get-Command -module ActiveDirectory
Consulta la ayuda para ver una lista con todos los argumentos de cmdlet de Windows PowerShell para Active Directory. Por ejemplo:
Get-Help New-ADReplicationSite
Usa el cmdlet Update-Help
para descargar e instalar archivos de ayuda.
Replicación y metadatos
Repadmin.exe valida el estado y la coherencia de la replicación de Active Directory. Repadmin.exe ofrece opciones de manipulación de datos muy sencillas (algunos argumentos, por ejemplo, admiten salidas CSV), cuando la automatización normalmente requería el análisis mediante salidas de archivo de texto. El módulo de Active Directory para Windows PowerShell es el primer intento por ofrecer una opción que permita ejercer un control real de los datos devueltos; antes de esto, había que crear scripts o usar herramientas de terceros.
Además, los siguientes cmdlets implementan un nuevo conjunto de parámetros de Target, Scope y EnumerationServer:
Get-ADReplicationFailure
Get-ADReplicationPartnerMetadata
Get-ADReplicationUpToDatenessVectorTable
El argumento Target acepta una lista separada por comas de cadenas con las que se distinguen los servidores, sitios, dominios o bosques de destino especificados mediante el argumento Scope. Se puede usar un asterisco (*), que indica que se incluyen todos los servidores del ámbito especificado. Si no se ha especificado ningún ámbito, se referirá a todos los servidores del bosque del usuario actual. El argumento Scope especifica la latitud de la búsqueda. Los valores que se aceptan son Server, Site, Domain y Forest. El argumento EnumerationServer especifica el servidor que enumera la lista de controladores de dominio señalados por los argumentos Target y Scope. Funciona igual que el argumento Server y requiere que el servidor especificado ejecute el Servicio web de Active Directory.
Para presentarle los cmdlets, incluimos aquí algunos escenarios de ejemplo en los que se muestran funciones que son imposibles de conseguir con repadmin.exe (estas ilustraciones dejan claras las posibilidades administrativas). Repasa la ayuda de los cmdlets para conocer los requisitos de uso específicos.
Get-ADReplicationAttributeMetadata
Este cmdlet es similar a repadmin.exe /showobjmeta. Permite obtener metadatos de replicación, como cuándo ha cambiado un atributo, el controlador de dominio de origen, la versión e información de USN y los datos de atributo. Este cmdlet resulta útil a la hora de auditar dónde y cuándo se ha producido un cambio.
Al contrario que Repadmin, Windows PowerShell proporciona búsquedas flexibles y control de la salida. Por ejemplo, puedes obtener una salida de los metadatos del objeto Admins. del dominio ordenados como una lista legible:
Get-ADReplicationAttributeMetadata -object "cn=domain admins,cn=users,dc=corp,dc=contoso,dc=com" -server dc1.corp.contoso.com -showalllinkedvalues | format-list
También puedes ordenar los datos de forma que tengan la apariencia de repadmin, en una tabla:
Get-ADReplicationAttributeMetadata -object "cn=domain admins,cn=users,dc=corp,dc=contoso,dc=com" -server dc1.corp.contoso.com -showalllinkedvalues | format-table -wrap
O, si quieres, puedes obtener los metadatos de una clase de objetos entera; para ello, debes canalizar el cmdlet Get-Adobject con un filtro (como, por ejemplo, todos los grupos) y, luego, combinarlo con una fecha concreta. La canalización es un canal que se utiliza entre varios cmdlets para pasar datos. Para ver todos los grupos que se han modificado de algún modo el 13 de enero de 2012:
Get-ADObject -filter 'objectclass -eq "group"' | Get-ADReplicationAttributeMetadata -server dc1.corp.contoso.com | where-object {$_.lastoriginatingchangetime -like "*1/13/2012*" -and $_.attributename -eq "name"} | format-table object
Para obtener más información sobre las operaciones de Windows PowerShell con canalizaciones, consulta Canalizar y la canalización de Windows PowerShell.
También puedes averiguar de qué grupos es miembro Tony Wang y cuándo se modificó el grupo por última vez:
Get-ADObject -filter 'objectclass -eq "group"' | Get-ADReplicationAttributeMetadata -server dc1.corp.contoso.com -showalllinkedvalues | where-object {$_.attributevalue -like "*tony wang*"} | format-table object,LastOriginatingChangeTime,version -auto
Asimismo, para encontrar todos los objetos que se han restaurado autoritariamente mediante una copia de seguridad de estado del sistema en el dominio, según su versión posterior artificial:
Get-ADObject -filter 'objectclass -like "*"' | Get-ADReplicationAttributeMetadata -server dc1.corp.contoso.com | where-object {$_.version -gt "100000" -and $_.attributename -eq "name"} | format-table object,LastOriginatingChangeTime
O, también, puedes enviar todos los metadatos de usuario a un archivo CSV para examinarlo más adelante en Microsoft Excel:
Get-ADObject -filter 'objectclass -eq "user"' | Get-ADReplicationAttributeMetadata -server dc1.corp.contoso.com -showalllinkedvalues | export-csv allgroupmetadata.csv
Get-ADReplicationPartnerMetadata
Este cmdlet devuelve información sobre la configuración y el estado de la replicación de un controlador de dominio, lo que permite realizar tareas de supervisión, inventario o solución de problemas. Al contrario que Repadmin.exe, el uso de Windows PowerShell hace que solamente se vean los datos que sean importantes y en el formato deseado.
Por ejemplo, el estado de replicación legible de un solo controlador de dominio:
Get-ADReplicationPartnerMetadata -target dc1.corp.contoso.com
O, también, la última vez que un controlador de dominio realizó una replicación de entrada y de sus asociados, en formato tabular:
Get-ADReplicationPartnerMetadata -target dc1.corp.contoso.com | format-table lastreplicationattempt,lastreplicationresult,partner -auto
O, asimismo, puedes ponerte en contacto con todos los controladores de dominio del bosque y mostrar aquellos en los que el último intento de replicación no se realizó por algún motivo:
Get-ADReplicationPartnerMetadata -target * -scope server | where {$_.lastreplicationresult -ne "0"} | ft server,lastreplicationattempt,lastreplicationresult,partner -auto
Get-ADReplicationFailure
Este cmdlet sirve para devolver información sobre los errores de replicación más recientes. Se parece a Repadmin.exe /showreplsum, si bien, de nuevo, el control es mucho mayor gracias a Windows PowerShell.
Así, por ejemplo, puede obtener los errores más recientes del controlador de dominio y los asociados con los que no se pudo establecer el contacto:
Get-ADReplicationFailure dc1.corp.contoso.com
También puedes obtener una vista de tabla con todos los servidores de un sitio lógico de AD específico, ordenados de forma que se vean con mayor facilidad y con únicamente los datos más importantes:
Get-ADReplicationFailure -scope site -target default-first-site-name | format-table server,firstfailuretime,failurecount,lasterror,partner -auto
Get-ADReplicationQueueOperation y Get-ADReplicationUpToDatenessVectorTable
Estos dos cmdlets devuelven más aspectos del controlador de dominio y su nivel de actualización, lo que engloba información sobre la replicación pendiente y el vector de versión.
Sync-ADObject
Este cmdlet es similar a ejecutar Repadmin.exe /replsingleobject. Es muy práctico cuando se realizan cambios que requieren replicación fuera de banda, especialmente cuando se quiere solucionar un problema.
Si, por ejemplo, alguien elimina la cuenta de usuario del consejero delegado y la recupera después de la Papelera de reciclaje de Active Directory, seguramente quieras que se replique de inmediato en todos los controladores de dominio. Asimismo, lo más probable es que prefieras que esto suceda sin forzar la replicación de todos los demás cambios de objeto que hayan tenido lugar. Al fin y al cabo, para eso están las programaciones de replicaciones: para evitar una sobrecarga de los vínculos WAN.
Get-ADDomainController -filter * | foreach {Sync-ADObject -object "cn=tony wang,cn=users,dc=corp,dc=contoso,dc=com" -source dc1 -destination $_.hostname}
Topología
Si bien Repadmin.exe es adecuado para obtener determinados datos de la topología de replicación (como los sitios, los vínculos de sitio, los puentes de vínculos a sitios y las conexiones), carece de un conjunto completo de argumentos para realizar cambios. De hecho, nunca ha habido una utilidad de Windows incluida de forma predeterminada y que admita scripts que se haya diseñado expresamente para que los administradores puedan crear y modificar la topología de AD DS. A medida que Active Directory ha ido evolucionando en millones de entornos de clientes, ha surgido la clara necesidad de modificar la información lógica de Active Directory de arriba a abajo.
Por ejemplo, tras una rápida expansión de nuevas sucursales, a lo que se suma la consolidación de las ya existentes, probablemente tengas un centenar de cambios de sitios que realizar según las ubicaciones físicas, los cambios de red y los nuevos requisitos de capacidad. En lugar de usar Dssites.msc y Adsiedit.msc para efectuar tales cambios, puedes automatizarlos. Esto resulta especialmente interesante cuando comienzas con una hoja de cálculo de datos que te han proporcionado los equipos de red y de instalaciones.
Los cmdlets Get-Adreplication\* devuelven información sobre la topología de replicación y son útiles a la hora de canalizar a cmdlets Set-Adreplication\* de forma masiva. Los cmdlets Get no alteran datos, sino que únicamente los muestran o crean objetos de sesión de Windows PowerShell que se pueden canalizar a cmdlets Set-Adreplication\*. Los cmdlets New y Remove son de utilidad para crear o quitar objetos de topología de Active Directory.
Por ejemplo, se pueden crear sitios mediante un archivo CSV:
Import-Csv -path C:\newsites.csv | new-adreplicationsite
También puedes crear un vínculo entre dos sitios con un intervalo de replicación y costo de sitio personalizados:
New-ADReplicationSiteLink -name "chicago<-->waukegan" -sitesincluded chicago,waukegan -cost 50 -replicationfrequencyinminutes 15
O, si lo deseas, puedes buscar todos los sitios del bosque y reemplazar sus atributos Options por la marca que permite la notificación de cambios entre sitios y, así, poder replicar a la máxima velocidad con compresión:
Get-ADReplicationSiteLink -filter * | set-adobject -replace @{options=$($_.options -bor 1)}
Importante
Establece -bor 5 para deshabilitar la compresión también en esos vínculos de sitio.
Opcionalmente, puedes buscar todos los sitios en los que faltan asignaciones de subred y, de este modo, poder conciliar la lista con las subredes reales de esas ubicaciones:
Get-ADReplicationSite -filter * -property subnets | where-object {!$_.subnets -eq "*"} | format-table name