Si hay que editar el Esquema se edita, pero editarlo para nada….. (Editando el esquema y creando un Display-Specifier)

Crea y edita tus propiedades personalizadas en el Directorio Activo.


En este artículo aprenderás cosas acerca del esquema y de algunos aspectos del funcionamiento interno del AD, crearemos una nueva propiedad para los usuarios y aprenderemos como extender la administración para poder utilizarla.


Introducción


                Cada objeto que almacenamos en el directorio activo ya sea por ejemplo un usuario o un ordenador tiene una serie de propiedades que son las que nos permiten a nosotros y al Directorio Activo almacenar información relativa al objeto en cuestión, como por ejemplo los grupos a los que pertenece un usuario, la fecha en la que expira la cuenta o en que servidor de Exchange tiene su buzón un usuario.


                Las propiedades que tiene un objeto están definidas en la “Clase”, a las propiedades se las llama atributos.


                Cuando creamos un nuevo usuario en el Directorio Activo, en realidad estamos creando una instancia de la clase “User”, la clase contiene información relativa a todos los atributos que son necesarios para guardar toda la información de un usuarios en el AD, como la contraseña, el nombre, etc, la clase también define que atributos son obligatorios y cuáles no.


                Las clases pueden heredar unas de otras, por ejemplo aunque nos parezca increíble, la clase “Computer” que es la que define a los objetos de los ordenadores que estén en el AD hereda de la clase “User”, cuando una clase hereda automáticamente contiene los mismos atributos y con la misma configuración que la clase de la que hereda, además se pueden añadir nuevos atributos.


                Toda la información sobre las clases y los atributos se encuentra en el esquema que está almacenado en una partición especial del directorio activo.


                Esta partición se replica a todos los controladores de dominio, pero solo puede ser modificada por el controlador de dominio que sostiene el rol de Maestro de esquema o Schema Master.


                Para poder modificar el esquema es necesario pertenecer al grupo de usuarios Enterprise Admins o Schema Admins.


                Modificar el esquema es una operación muy seria y delicada, antes de realizar una modificación en el esquema hay que probarla bien en un entorno de pruebas, yo recomiendo siempre hacer estos cambios con un script ya que podemos ejecutar el mismo script en una maquina de desarrollo y luego en producción si todo va bien.


                Los cambios que hagamos en el esquema no se pueden borrar del todo, aunque es posible deshabilitar clases o borrar atributos.


                Encuentro muy práctico realizar las pruebas con una maquina virtual, ya que se puede configurar esta para que no guarde los cambios cuando se reinicia, de forma que si tienes que repetir algo no tengas que hacer un DC de nuevo o copiar otra máquina virtual.


Explorando el Esquema.


                Para poder ver la definición de las clases necesitamos acceder a la consola de administración del esquema, para hacer esto tenemos que registrar la DLL “schmmgmt.dll”.


Imagen 1, registrando la DLL.



Imagen 2, Mensaje de confirmación del registro de la DLL.



Una vez registrada la DLL lo siguiente será ejecutar la consola, para ello accederemos a la MMC y añadiremos la consola de


Imagen 3, Ejecutando la MMC.



Imagen 4, Añadiendo la consola.


 


Imagen 5, Añadiendo la consola.



Imagen 6, Añadiendo la consola.



Imagen 7, Atributos y clases.



Imagen 8, Clases.



Imagen 9, Atributos.



Imagen 10, Definición de la clase User (Ficha General).



Veis que la clase tiene un atributo llamado OID, por simplificar diré que  este OID es un número único que se usa para identificar las clases, este número se genera con una utilidad llamada oidgen que podéis encontrar en el resource kit de Windows 2000.


Imagen 11, Definición de la clase User (atributos)



En el tab de Attributes podéis ver todas las propiedades que tiene la clase User.


En el Tab de Relationships veréis que clases pueden contener instancias de este objeto.


Imagen 12, Definición de la clase User (atributos).



Imagen 13, Propiedades de un atributo.



A parte del OID del que ya hemos hablado en explicación sobre las clases y que funciona igual en los atributos, nos podemos encontrar con alguna información muy interesante, tal como el tipo de atributo que es este caso es “Unicode String”, cadena de caracteres Unicode y el largo mínimo y máximo que puede tener.


Como sabéis el catalogo global no contiene todos los atributos de los objetos, solo contiene los atributos más usados, a este grupo de atributos se le llama PAS (partial attribute set), el catalogo global contiene estos atributos pero de todos los dominios, por esa razón en las empresas en las que hay varios dominios, es común que se realicen búsquedas sobre los GC, si queremos que un atributo especifico este replicado en los GC, tendremos que activar el check “Replicate tis attribute to the Global Catalog”


Hay que ser conservador a la hora de añadir atributos a la PAS pues si añadimos muchos afectaremos a la replicación, aunque esta consideración solo tiene sentido si tenemos grandes volúmenes de usuarios y también hay que analizar la capacidad de las líneas de comunicaciones, el numero de cambios que se hagan al día, las ventanas de replicación, etc.


Alguno de los otros checks como por ejemplo el de búsquedas ANR nos permiten modificar la forma en la que se indexara este atributo en las diferentes tipos de búsquedas.


¿Quién es el Schema Master?


Podemos saber quién es el schema master de varias maneras.


La primera es desde la consola de administración del esquema.


Imagen 14, Averiguando quien es el Schema Master.



Imagen 15, Viendo el Schema Master.



Fijaros que desde aquí también es posible especificar que servidor es el schama master, pudiéndolo cambiar en cualquier momento.


También podemos modificar quien es el Schema Master desde el comando NTDSutil.


Imagen 16, NTDSutil.



Modificando el esquema del AD.


                Como ejemplo vamos a añadir una nueva propiedad a la clase user, esta nueva propiedad la usaremos para almacenar el Nº del documento nacional de identidad del usuario.


                Es importante que antes de modificar el esquema para añadir un atributo a una clase, investiguéis bien la clase por si hay algún atributo que os valga, por ejemplo los objetos de tipo user tienen un atributo denominado EmployeeID que vale para poner el numero de empleado en recursos humanos de la empresa, si no usáis este campo para esa función, os puede valer para guardar el DNI.


                El primer paso será generar un OID valido con la herramienta OIDGen del Resource Kit, en nuestro caso será: 1.2.840.113556.1.4.7000.233.28688.28684.8.416449.1243815.479696.960415


Imagen 17, Creando el nuevo atributo.



Imagen 18, Aviso.



Imagen 19, Creando el atributo.



Los atributos marcados como multivalue son en realidad Arrays unidimensionales, por ejemplo el campo de direcciones de correo de un usuario es multivalue.


Imagen 20, Atributo DNI ya creado.



El paso siguiente será modificar la clase User para que contenga este atributo.


Imagen 21, Añadiendo el DNI a la clase User.



Imagen 22, Añadiendo el DNI a la clase User.



Imagen 23, Añadiendo el DNI a la clase User.



 Comprobando que hemos añadido la propiedad correctamente.


Desgraciadamente cuando añadimos un atributo a una clase, este atributo no está disponible desde la administración común de estos objetos.


Por lo tanto aunque hemos añadido el DNI a la clase user, si editamos un usuario desde la consola de usuarios y computadoras, no veremos dicho atributo, al final de este artículo os mostrare una sencilla solución a este problema.


Lo que sí es posible es usar la consola de edición del Directorio Activo (adsiedit.msc) para ver y editar las propiedades de un usuario, para poder usar esta consola tendréis que instalar las support tools de Windows 2003.


Yo siempre recomiendo que las support tools y el resource kit vayan instaladas en todos los servidores, pero eso es parte de otro artículo que algún día hare, podeis bajar las support tools de:


http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en


Imagen 24, Añadiremos la consola como hemos aprendido antes.



Imagen 25, Conectándonos al AD desde el ADSI Edit.



Imagen 26, Conectándonos al AD desde el ADSI Edit.



Imagen 27, Refrescando el cache del esquema tras conectarnos.



Imagen 28, Viendo las propiedades de un usuario.



Imagen 29, Editando el DNI del usuario.



Imagen 30, Editando el DNI del usuario.



El secreto de los Display Specifiers.


Bien, por supuesto, este proceso de edición no es demasiado rápido y no sería muy práctico que los operadores tuvieran que usar ADSIEdit para mantener el directorio por esa razón, vamos a usar un pequeño truco del Directorio Activo para facilitar el proceso de edición.


Vamos a modificar el menú contextual del objeto user dentro de la consola de usuarios y computadoras para que incluya una opción que nos permita editar el DNI del usuario.


El primer paso será crear un script que nos permita editar el DNI.


Si tuviéramos más atributos o quisiéramos poner combos para elegir los valores o un interfaz más rico podríamos usar un script HTA.


Los scripts HTA son scripts normales VBS pero que exponen un interfaz Windows, este interfaz se diseña usando HTML, otro día pondré un articulo enseñando como se haría este mismo script pero con PowerShell, pero es más complicado porque en vez de usar HTML hay que poner los controles a mano usando el espacio de nombres de Windows Forms de .Net.


El script que usaremos será muy sencillo:


‘***************************************************************************************


On Error resume next


Dim oemployeeID


Dim oUser


Dim temp


Set StrArgs = Wscript.Arguments


Set oUser = GetObject(StrArgs(0))


temp = InputBox(“DNI: ” & oUser.DNI & vbCRLF & vbCRLF & “Si quieres introducir un nuevo DNI o modificar el existente, introduce el nuevo número en la caja de texto.”)


if temp <> “” then oUser.Put “DNI”,temp


oUser.SetInfo


Set oUser = Nothing


Set StrArgs = Nothing


Set temp = Nothing


WScript.Quit


‘***************************************************************************************


En este ejemplo guardare el script con el nombre DS_DNI.vbs en una carpeta llamada c:scripts.


El siguiente paso será conectarnos con AdsiEdit pero esta vez en vez de a la partición de Dominio nos conectaremos a la partición de configuración.


Imagen 31, Conectando AdsiEdit a la partición de configuración.



Una vez conectados a la partición de configuración veremos una unidad organizativa llamada “Display Specifiers”, entraremos en ella y veremos una OU por cada idioma, tenemos que modificar los Display Specifiers del idioma en el que este la consola de Usuarios y Computadoras que vallamos a usar, como normalmente todos instalamos los sistemas en ingles, usare la 409 que es la de este idioma.


Dentro de la OU 409 editaremos las propiedades del objeto User-Display


Imagen 32, Editando el objeto User-Display.



El objeto User-Display controla los menús contextuales y otras comportamientos gráficos de las instancias de la clase User a lo largo de todo Windows, la propiedad “adminContextMenu” se encarga del menú contextual de administración que es el que nos aparece en la cosa de usuarios y computadaros.


Tendremos que editar esa propiedad “adminContextMenu“y añadir una nueva línea que apunte a nuestro script.


Imagen 33, Editando la propiedad “adminContextMenu“.



Cada línea tiene que tener un numero identificador, luego pondremos el nombre que queremos que salga en el menú precedido de “&” y finalmente la ruta del script.


Imagen 34, Viendo el menú contextual de cualquier usuario.



Imagen 35, Script corriendo tras pulsar en DNI.



Imagen 36, Script corriendo por segunda vez.



Conclusión


En este articulo habéis visto como extender el schema y crear un Display Specifier para ayudaros a resolver una necesidad de administración, algo tan simple como guardar el DNI de los usuarios es un aspecto clave dentro de toda administración evolucionada.


Pensar que un usuario del que no sabéis su DNI no es nadie, es solo un nombre, mientras que con el DNI es posible una integración con el sistema de nominas, lo cual tras varias iteraciones de automatización puede llegar a sinergias tan importantes como las bajas y altas automáticas o el control de errores, pero eso otro artículo.


 

38 comentarios en “Si hay que editar el Esquema se edita, pero editarlo para nada….. (Editando el esquema y creando un Display-Specifier)”

  1. Justamente esta semana he estado trabajando con ello. Y habia hecho lo mismo, pero quedado en el adsa edit y yo modifica las propiedades a través de la librería de LADP de.NET. Pero lo que explicas de mostra la propiedades del objecto en el menu es genial.
    Una pregunta si creamos una clase podemos conseguir de alguna manera que se muestre en la gestion de active directory.

  2. No te digo que no, pero no lo haria 😉
    Siempre que he creado clases he creado tambien una utilidad para administrarla, pero probare una idea que tengo y te digo algo.

  3. Gracias Ernesto.

    Oidgen es una herramienta del kit de recursos de windows 2000, pero solo esta disponible en la versión de pago 🙁 y ya es dificil de encontrar, puedes pedir OIDs en una web de Microsoft y son gratis, comprarlos es muy caro en torno a 3.000€, otro truco es instalar algun software que actualice el esquema y que estes seguro que nunca usaras y usar esos OIDs.

  4. El articulo es genial pero quisiera saber: en w2003 español en la imagen 19 “Create a New Attriute” cual es la correspondencia de “Case Insensitive String” ya que la traduccion no dice nata util. y, otra cosa en Display Specifiers cual corresponde al idioma español. Muchas gracias

  5. Gracias, Daniel.
    Nosotros tenemos el dni como identificador de los usuarios, y quisieramos que los usuarios pudieran ver ese dato junto con los otros asociados al usuario que ya se ven en la herramienta de los clientes “Buscar personas en active directoy”.
    ¿Sabes como podría hacer que ese dato se mostrara en esa ventana?.
    Yo he visto que al utilizar esa herrmienta, se invoca el ejecutable de la libreta de direccione (WAB.EXE), pero no tengo idea de como afrontar ese cambio.
    Gracias de nuevo.

  6. Oye, encuentro muy bueno este articulo, muy detallado y claro para el nunca se habia adentrado en el esquema de AD. Muy util para los administradores. Felicitaciones y que sigan con la misma intención.

    Otra cosa: yo quiero hacer una consulta personalizada en el AD para pedir las cuentas que estan bloqueadas, lo estoy haciendo con el parametro lockoutTime=1 pero no me muestra nada, aun sabiendo que tengo un usuario con la cuenta bloqueada. Pueden darme una idea??

  7. Estimado esta super bueno el tema sin embargo al realizar las pruebas cuando trato de actualizar el dns esto es lo que consigo.

    there is no editor registered to handle this attribute type

    ese error ya lo busque por todos lados no consegui una respuesta que me ayudara, tendras alguna solucion???

    Saludos.

  8. Corrigiendo:
    Estimado esta super bueno el tema sin embargo al realizar las pruebas cuando trato de actualizar el Schema esto es lo que consigo.

    there is no editor registered to handle this attribute type

    ese error ya lo busque por todos lados no consegui una respuesta que me ayudara, tendras alguna solucion???

  9. Estimado Daniel Matey, eh aprendido mucho con tu aportacion, ahora mismo la estoy probando en una maquina virtual.
    Por otro lado, me gustaria consultarte lo siguiente:
    Necesito agregar 2 atributos a mis usuarios en AD. son solo 2 numeros enteros, con relacion “uno a muchos”, Esto con la finalidad que los desarrolladores de mi compañia hagan una validacion via LDAP a nuestros diferentes softwares, donde el 1er campo seria el ID del sw, y el 2do los permisos (r,w,m,c) Tengo varias ideas despues de revisar tu articulo, Pero Tu que me recomendarias?? Gracias!!!!!!!!!!!

  10. El OIDGen es una aplicación de W2000 exclusivamente? En W2003 no está ni para descargar (o yo no la encuentro). Puedo crear un atributo son un OID aleatorio o hay que hacerlo mediante esta herramienta?

    GRACIAS!!

  11. Como hago para modificar un atributo ya existente, ejemplo: quiero usar el atributo Pager de la clase User para editarlo y cambiarlos a Extension.

    saludos

  12. You have a writing an essay task and don’t really know the correct way to begging? Do not be frustrated, because the research paper writing service would aid you with your online essays very abruptly. So why not to use this kind of help?

  13. Buenas, Daniel eres un crack, todo perfectamente explicado, ahora valor y a probarlo, sobre este campo en concreto (DNI) existe a parte de la longitud (minimo-maximo) alguna manera de poner una mascara, tipo acces o excel y que te genere o simplemente te compruebe la letra del DNI.
    Gracias de nuevo por el aporte.

  14. At present, a lot of people are sure that the do my paper service would be the good point to purchase comparison contrast essay at. Furthermore, this is really perfect way to save valuable time!

  15. This is one of the most truthful blogs I have ever browsed. Nothing beats good first hand knowledge on subjects. You are appreciated for being sincere about this.

  16. Hello my friend! I want to say that this article is awesome, nice written and include almost all vital infos. I would like to see more posts like this .

  17. Woah! I’m really enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s very difficult to get that “perfect balance” between usability and visual appeal. I must say you have done a excellent job with this. Also, the blog loads extremely quick for me on Chrome. Outstanding Blog!

  18. Do you understand that articles you submit to directories should be original, just because that reflects on you website’s ranking! Opt for high quality article submission services. Article distribution issues provided by our professionals are of high standards. So, you will surely get higher PR.

  19. Do you strive to get academic success, nonetheless, don’t have a passion of researching process? Then, buy essays online and dismiss you troubles.

  20. There’re no helpless cases! Even when you stuck with you papers writing you have not to give in! You usually have a choice to order online papers. It’s a great selection.

  21. Si hay que editar el Esquema se edita, pero editarlo para nada….. (Editando el esquema y creando un Display-Specifier) – Be Geek My Friend

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *