none
Problema con Script de creación de usuarios RRS feed

  • Pregunta

  • Buenos días, tengo un problemilla curioso con un script que estaba haciendo para la creación de usuarios. El problema es que el usuario lo crea correctamente, dentro de donde lo tiene que crear, etc... pero luego desde un equipo del dominio no deja iniciar sesión. Si creo a mano el usuario funciona correctamente, pero los que están creados por el script no, no funcionan.

    ¿Le véis algo raro? Lo uso para crear alumnos, le dices cuantos alumnos quieres, como se van a llamar y te los crea correlativos, le pone una contraseña y le obliga a cambiarla la primera vez que inicia sesión.

    ' Solicitamos los datos
    NumAlumnos=inputbox("¿Cuántos alumnos creamos?")
    OU=inputbox("¿En qué unidad organizativa?")
    ' Localizamos la unidad organizativa donde queremos crear los alumnos
    Set objRootDSE = GetObject("LDAP://rootDSE")
    Set objContainer = GetObject("LDAP://" & "ou=" & OU & ", ou=Students," & _
        objRootDSE.Get("defaultNamingContext"))
    For i = 1 To 9
        Set objLeaf = objContainer.Create("User", "cn=" & OU & "0" & i)
        objLeaf.Put "sAMAccountName", OU & "0" & i
        objLeaf.SetInfo
    Next
    For i = 10 To NumAlumnos
        Set objLeaf = objContainer.Create("User", "cn=" & OU & i)
        objLeaf.Put "sAMAccountName", OU & i
        objLeaf.SetInfo
    Next
    ' Ahora le ponemos a todos la contraseña en provisional y les obligamos a cambiarla
    strPassword = "provisonal"
    intAccValue = 512 ' Para activar la cuenta 512 para desactivarla 514
    intPwdValue = 0 ' Para obligar a cambiar la contraseña 0, por defecto está en -1
    set objOU =GetObject("LDAP://" & "ou=" & OU & ", ou=Students, " & _
    		   objRootDSE.Get("defaultNamingContext"))
    For each objUser in objOU
       If objUser.class="user" then
          objUser.SetPassword strPassword
          objUser.Put "userAccountControl", intAccValue
          objUser.Put "PwdLastSet", intPwdValue
          objUser.SetInfo
       End If
    Next
     
    WScript.Echo "Se han creado " & NumAlumnos & " alumnos en la OU " & OU & _ 
    			 " con contraseña " & strPassword & "."

    Si me pudiárais echar una mano os lo agradecería.

    Un saludo


    Eclat2K | www.2ksystems.com | @2ksystems
    Colobora con el foro: Si la respuesta es de utilidad para resolver tu duda/problema, usa la opción "Marcar como repuesta". Otros usuarios con dudas similares -en un futuro- lo agradecerán.


    • Editado Eclat2k martes, 18 de septiembre de 2012 8:39
    martes, 18 de septiembre de 2012 8:17

Respuestas

  • Ok pues, ahora tiene mas sentido para mi... Es poco ortodoxo, pero totalmente válido para lo que necesitas.

    Respecto a los campos, con samaccountname y UAC = 512 debería ir.

    Cuando ejecute el script recibí un error en el método setinfo ya que el password "provisional" no cumplía las políticas de complejidad de mi entorno.

    ¿Estas seguro que se te está ejecutando correctamente? ¿Cuando lo ejecutas te salta el msgbox de finalizado?

    No creo que sobre W2003 reporte algún problema específico, pero tampoco lo he probado. A mi me ha funcionado correctamente sobre W2008r2


    martes, 18 de septiembre de 2012 11:58
  • Hola,

    De entrada, comentarte que no acabo de entender la lógica de bucles for/next al inicio del script, ya que el valor de la variable NumAlumnos no es tomada en consideración si es <10...

    En fin, lo he testeado sin problemas, y puedo hacer logon con lo que entiendo que si la ejecución es correcta en tu caso debe tratarse de algun setting de seguridad para evitar el logon. Puede ser que la máquina tenga restringido el logon a determinados usuarios por ejemplo. Todo esto, dando por hecho que se te ejecuta el script al 100% y te muestra el msgbox final de usuarios creados como en mi caso.

    En cualquier caso, el script sólo crea el objeto + samaccountname y hay un gran vacío de atributos que pueden afectar negativamente a los servicios de directorio. Te recomiendo que uses el "New User Creation Tool" script de MSDN que va de maravilla.

    http://gallery.technet.microsoft.com/scriptcenter/New-User-Creation-tool-14fa73cd

    Saludos

    Julio Rosua

    martes, 18 de septiembre de 2012 9:17

Todas las respuestas

  • Hola,

    De entrada, comentarte que no acabo de entender la lógica de bucles for/next al inicio del script, ya que el valor de la variable NumAlumnos no es tomada en consideración si es <10...

    En fin, lo he testeado sin problemas, y puedo hacer logon con lo que entiendo que si la ejecución es correcta en tu caso debe tratarse de algun setting de seguridad para evitar el logon. Puede ser que la máquina tenga restringido el logon a determinados usuarios por ejemplo. Todo esto, dando por hecho que se te ejecuta el script al 100% y te muestra el msgbox final de usuarios creados como en mi caso.

    En cualquier caso, el script sólo crea el objeto + samaccountname y hay un gran vacío de atributos que pueden afectar negativamente a los servicios de directorio. Te recomiendo que uses el "New User Creation Tool" script de MSDN que va de maravilla.

    http://gallery.technet.microsoft.com/scriptcenter/New-User-Creation-tool-14fa73cd

    Saludos

    Julio Rosua

    martes, 18 de septiembre de 2012 9:17
  • Buenas Julio, gracias por la respuesta.

    El bucle, sí, es un poco especial, lo reconozco. Lo hice rápido, es simplemente para que a los 9 primeros alumnos le ponga un 0 antes del número en el nombre, así quedan Alumno01, Alumno02.... y luego ya siguen normal Alumno10, Alumno11, etc... Siempre son clases de más de 30 alumnos.

    Yo también lo había probado y en mi máquina virtual funcionaba correctamente... por eso me resulta tan... curioso.

    Con respecto a los campos que comentas que faltan, sí, es cierto que faltan muchos, pero realmente esos serían los necesarios para iniciar sesión, que es lo que pretendo con estos usuarios (luego se lanzan scripts de logon para conectar impresoras y unidades de red, etc...). No obstante, te agradezco cualquier comentario al respecto sobre que otros campos crees que serían interesante cubrir siempre.

    Otro detallito que no he comentado (y que es de principiante, lo siento...) es que lo estoy ejecutando en un Windows 2003 Standar (no R2).


    Eclat2K | www.2ksystems.com | @2ksystems
    Colobora con el foro: Si la respuesta es de utilidad para resolver tu duda/problema, usa la opción "Marcar como repuesta". Otros usuarios con dudas similares -en un futuro- lo agradecerán.

    martes, 18 de septiembre de 2012 9:36
  • Ok pues, ahora tiene mas sentido para mi... Es poco ortodoxo, pero totalmente válido para lo que necesitas.

    Respecto a los campos, con samaccountname y UAC = 512 debería ir.

    Cuando ejecute el script recibí un error en el método setinfo ya que el password "provisional" no cumplía las políticas de complejidad de mi entorno.

    ¿Estas seguro que se te está ejecutando correctamente? ¿Cuando lo ejecutas te salta el msgbox de finalizado?

    No creo que sobre W2003 reporte algún problema específico, pero tampoco lo he probado. A mi me ha funcionado correctamente sobre W2008r2


    martes, 18 de septiembre de 2012 11:58
  • Sí, sí, ejecutar se ejecuta porque crea todos los usuarios en la OU correspondiente. Con respecto a la contraseña no tienen configurado los requisitos de complejidad (a pesar de mi insistencia...), y llega correctamente al final diciéndome que se han creado X usuarios en la OU X con password Y.

    La verdad es que me resulta bastante extraño que no funcione, pero cuando intentas iniciar sesión salta el siguiente mensaje:

    - No se puede iniciar su sesión. Asegúrese de que su nombre de usuario y dominio sean correctos, después vuelva a escribir su contraseña. Asegúrese, bla, bla, bla...

    A mí no se me ocurre que más mirar... :(


    Eclat2K | www.2ksystems.com | @2ksystems
    Colobora con el foro: Si la respuesta es de utilidad para resolver tu duda/problema, usa la opción "Marcar como repuesta". Otros usuarios con dudas similares -en un futuro- lo agradecerán.

    martes, 18 de septiembre de 2012 12:21
  • Esto es de traca... si soy más inútil no nazco... Si no hay como explicar las cosas para ver el error...

    El error está efectivamente en la password ¡LA ESCRIBI MAL!. Si te fijas en el script puse provisonal en lugar de provisional, por eso cuando tú cambiaste las password te funcionó (esto fue lo que me dio la pista...).

    En fin... mil gracias por la ayuda Julio, al final, como muchas veces, la respuesta es de lo más sencillo, pero cuando te obcecas...

    Lo dicho, muchas gracias.


    Eclat2K | www.2ksystems.com | @2ksystems
    Colobora con el foro: Si la respuesta es de utilidad para resolver tu duda/problema, usa la opción "Marcar como repuesta". Otros usuarios con dudas similares -en un futuro- lo agradecerán.

    martes, 18 de septiembre de 2012 12:26
  • jejeje

    Algo así me temía... no pasa nada.

    Shit happens!

    No pierdas la oportunidad de probar el tool de creación de la MSDN, es una joya :-)

    Saludos.

    martes, 18 de septiembre de 2012 12:32