El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script Para Cambiar El Nombre De Los Usuarios A Su Nombre Para Mostrar

Posted by urpiano en Miércoles 15 \15\UTC noviembre \15\UTC 2006

Este script permite cambiar el nombre de los usuarios del dominio "midominio", para que sea igual al nombre para mostrar. Obviamente, podríamos modificarlo para que cumpliera otro patrón . El script utiliza llamadas a DSMOVE.EXE, ya que no se puede renombrar un usuario cambiando una propiedad, si no que hay que mover su cuenta.

'Este script cambia el nombre de los usuarios del dominio para que
'sea igual al nombre para mostrar; obviamente se podría hacer que
'se estableciera este nombre en función a otro patrón modificando
'la línea:

'str_MoverUsuario = "dsmove """ & str_LdapDN & """ -newname """ & _
' obj_Usuario_LDAP.displayName & """"

'La finalidad es que los usuario se muestren con la descripción como nombre
'en "Usuarios y Equipos de Active Directory". Nació al llegar a un dominio
'en el que se mostraban con un nombre igual al sAMAccountName, cosa que me
'incomodaba a la hora de identificar a las personas.

'El Script utiliza el proveedor WinNT ya que es el más cómodo a la hora de
'listar todos los usuatrios de un dominio. Una vez creado el objeto usuario
'con el proveedor WinNT utilizamos un objeto NameTranslate, que nos permite
'obtener la ruta LDAP del usuario WinNT, para poder así crear un objeto usuario
'con el proveedor LDAP. Esto es necesario para poder establecer el nombre
'ya que el proveedor WinNT es más limitado que el proveedor LDAP a la hora
'de manejar cuentas de usuario (accede a menos propiedades).

'El script desecha aquellos usuarios que no tienen nombre para mostrar
'(displayName), caso en el que están el administrador del dominio, por ejemplo.
'Tambien se deben excluir aquellas cuentas administrativas que no deseemos
'que cambien de nombre.

'Para el cambio de nombre se utilizan llamadas a DSMOVE.EXE, ya que
'el cambio de nombre de un usuario no se puede hacer estableciendo el
'nuevo nombre en su propiedad Name, pues este cambio será ignorado;
'esto es debido a que no existe la capacidad de renombrar en sí, pues
'lo que realmente se hace es mover la cuenta a un nuevo nombre.

'© Noviembre de 2006 Fernando Reyes [MS MVP]

On Error Resume Next

'Declaración de constantes para su uso con el objeto NameTranslate
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
Const ADS_NAME_INITTYPE_DOMAIN = 1

'Declaración de variables de tipo objeto
Dim obj_Trans              'Será un objeto NameTranslate
Dim obj_Dominio            'Será un objeto Dominio
Dim obj_Nombre_Usuario     'Será un objeto usuario del array
Dim obj_Usuario_A_Cambiar  'Será un objeto usuario WinNT
Dim obj_Usuario_LDAP       'Será un objeto usuario LDAP

'Declaración de variables de tipo cadena
Dim str_LdapDN             'Ruta LDAP del usuario
Dim str_Nombre             'Nombre del usuario
Dim str_MoverUsuario       'Será la instrucción DSMOVE
                           'a ejecutar con el método Run
                           'de un objeto Shell

'Creamos un objeto de tipo dominio, abriendo el dominio midominio
Set obj_Dominio = GetObject("WinNT://nombredominio,Domain")

'Aplicamos un filtro al dominio para obtener los usuarios en un array
obj_Dominio.Filter = Array("User")

'Una vez tenemos el array de usuarios lo recorremos uno a uno
For Each obj_Nombre_Usuario in obj_Dominio

    'Creamos un objeto usuario WinNT (el anterior sólo es un nombre)
    'con el que trabajaremos
    Set obj_Usuario_A_Cambiar = GetObject("WinNT://nombredominio/" & _
    obj_Nombre_Usuario.Name & ",User")

    'Creamos un objeto NameTranslate, que nos servirá para obtener la ruta
    'LDAP del usuario a partir del nombre del objeto usuarioWinNT
    Set obj_Trans = CreateObject("NameTranslate")
    obj_Trans.Init ADS_NAME_INITTYPE_DOMAIN, "nombredominio"
    obj_Trans.Set ADS_NAME_TYPE_NT4, "nombredominio" & obj_Usuario_A_Cambiar.Name
    str_LdapDN = obj_Trans.Get( ADS_NAME_INITTYPE_DOMAIN)

    'Creamos el objeto usuario con el proveedor LDAP a partir de su ruta
    'LDAP
    Set obj_Usuario_LDAP = GetObject("LDAP://" & str_LdapDN)

    'Controlamos que el nombre sea distinto al nombre a mostrar (displayName)
    'añadiendo a éste el prefijo "CN=" que lleva todo el nombre (Name)
    'Utilizamos Ucase en ambos lados para más seguridad. La claúsula And nos
    'permite evitar aquellos usuarios que no tienen nombre a mostrar (displayName)
    If Ucase(obj_Usuario_LDAP.Name) <> Ucase(("CN=" & obj_Usuario_LDAP.displayName)) _
    And obj_Usuario_LDAP.displayName <> "" Then

        str_Nombre = Right(obj_Usuario_LDAP.Name,Len(obj_Usuario_LDAP.Name)-3)

        Select Case str_Nombre

            'En este caso colocamos aquellos usuarios que no deseamos que se
            'procesen, como pueden ser los usuarios de IIS o el de soporte.
            'Cada uno deberá poner los nombres que desee y según sus propios datos
            Case "IUSR_NOMBREDC","IWAM_NOMBREDC","SUPPORT_XXXXXXX"

                WScript.Echo "El usuario " & str_Nombre & " no será cambiado"
                WScript.Echo

            Case Else

                'Mostramos lo que se va a hacer
                WScript.Echo "El usuario " & str_Nombre & " pasará a ser " & _
                obj_Usuario_LDAP.displayName

                'Creamos un objeto Shell que usaremos para ejecutar DSMOVE
                Set WshShell = WScript.CreateObject("WScript.Shell")

                'Establecemos la sentencia DSMOVE que ejecutaremos
                str_MoverUsuario = "dsmove """ & str_LdapDN & _
                                    """ -newname """ & _
                                    obj_Usuario_LDAP.displayName & """"

                'Ejecutamos la sentencia
                WshShell.Run str_MoverUsuario, 0, True

                'Mostramos el resultado
                WScript.Echo "El cambio a " & obj_Usuario_LDAP.Name & _
                             " se realizó con éxito."
                WScript.Echo

        End Select

    End If

Next

10 comentarios to “Script Para Cambiar El Nombre De Los Usuarios A Su Nombre Para Mostrar”

  1. Hola, muy buen Blog. Como haces para que el wordpress no te haga pelota las comillas simples?

    Saludos desde argentina. Carlos

  2. urpiano said

    ¡¡¡Ufff, menudas faenas hace WordPress, con los adornos de texto, a la hora de publicar código!!! Yo lo que hago es no usar el editor gráfico, desmarcando la opción de su uso en “Usuarios”, pulso “Editar” en mi usuario, voy a la pestaña “Perfil” y desmarco la casilla “Utilizar el editor visual para escribir”. Esto lo hago porque en cuanto guardas lo escrito en el editor de código se muestra el resultado en el editor visual y al pasar al escrito ¡transforma el código, no deja el que habías puesto! Para editar las páginas lo mejor es usar otro editor externo que te permita hacer XHTML. Lo mejor, para los scripts, es que los tengas en notepad, sustituyas todas las comillas simples por “&#39;”, que es el código de la comilla simple, y sustituyas todas las comillas dobles por “&#34;” o por “&quot;” que son los códigos de las comillas dobles (cualquiera de los dos hace lo mismo); para el sangrado debes sustituir tantos espacios como haya al principio de línea por tantos &nbsp; que es el código de espacio. Una vez echo esto, copias el script en el editor de XHTML en la parte de código, no en la visual y A MANO le pones las etiquetas que quieras que establezcan el formato (huye de pasar al editor visual, pues cuando vuelvas al de código te habrá descolocado todo) y terminas cada línea del script con salto de línea “<br />”;. Otra cosa que debes tener en cuenta es que WordPress te va a convertir los saltos de línea del texto en el código, en saltos de línea reales, lo cual te estropea el formato del texto, así que debes preocuparte que en el código las líneas de texto terminen en “<br />” o “</p>”, es decir, que un párrafo interminable se convierta en un churro interminable; esto último te lo advierto pues muchos editores WYSIWYG auto formatean el código después de haber pasado por el editor visual y ponen saltos de línea en el texto que luego no deberían ser renderizados por el navegador, pero que WordPress los convierte en reales.

    WordPress debería tener la opción de no retocar código XHTML ni sustituir caracteres como las comillas simples y dobles….

    Saludos desde España, Fernando

  3. Muchísimas Gracias !!!

  4. urpiano said

    Revisando el código de este script he visto que hay un problema añadido, que son los signos "<" y ">" cuando están juntos haciendo un "distinto que", pues WordPress debe interpretar que es una etiqueta vacía y los borra; por tanto, es necesario sustituirlos por &lt; (para "<") y &gt; (para ">"). Acabo de corregirlo donde lo he visto.

  5. La verdad es que es bastante trabajo postear un código … Encima también te rompe los adjuntos de texto …

  6. urpiano said

    ¡¡¡¡Tengo una buena noticia!!!! A partir de ahora trabajaré menos. Se puede evitar la “textualización” (así es como se llama la puñetita) usando los tags <pre><code>dentro de estos tags pegas el código tal cual es (si es un VBScript lo puedes copiar desde el propio bloc de notas), con sus propios saltos de línea carateres, etc., y cierras el código con </code></pre>
    Esto lo he estrenado en esta entrada:
    Dos Scripts Que Permiten Ver La ACL De Un Árbol De Directorios
    Haz click derecho en este artículo, “Ver código fuente” y mira cómo la parte de script está encerrada entre esos tags y además está escrita en el código XHTML tal cual se pega desde notepad :-)
     
    Espero que te sirva

  7. Perfecto!!!!

    Muchas Gracias!! Me lo “machetearé” en el blog

  8. […] La solución desde España, por Urpiano […]

  9. urpiano said

    Una última cosa:

    He comprobado que ha pesar de usar los tagas pre y code, hay tres caracteres que siguen dando problemas:

    – > (mayor qué): Debemos sustituirlo por &gt;
    – < (menor qué): Debemos sustituirlo por &lt;
    – \ (slash invertido): debemos ponerle doble (Ejemplo: c:\Listado deberemos ponerlo como c:\\Listado)

  10. urpiano said

    ¡¡Ultima hora!!

    WordPress a modificado la textualización, y ahora no elimina el backslash (“\”). Ahora ya no es necesario ponerlos dobles.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: