Bienvenidos sean a este post, en nuestros posts anteriores hemos creado nuestro pequeño «laboratorio» para poder trabajar con los scripts, para nuestro primer caso veremos un script para crear un usuario basico
En este ejemplo completaremos algunos datos, una contraseña, y algunos atributos mas, para comenzar iniciaremos a nuestro servidor e ingresaremos al mismo, una vez dentro crearemos un archivo .vbs con el siguiente codigo:
newuser.vbs
Const Dominio = "dc=laboratorio,dc=local"
Const udominio = "laboratorio.local"
Const titulo = "Alta de usuario v. 1.0"
cuenta = inputbox("Ingresa la cuenta",titulo)
nombre = inputbox("Ingresa el nombre",titulo)
apellido = inputbox("Ingresa lel apellido",titulo)
empresa = inputbox("Ingresa la empresa",titulo)
descrip = inputbox("Ingresa la descripcion",titulo)
pais = inputbox("Ingresa el pais",titulo)
departamento = inputbox("Ingresa el departamento",titulo)
uDisplay = apellido & ", " & nombre
Set oRootLDAP = GetObject("LDAP://rootDSE")
Set oContenedor = GetObject("LDAP://CN=Users," & Dominio)
Set oNuevoUsuario = oContenedor.Create("User","cn=" & chr(34) & uDisplay & chr(34))
oNuevoUsuario.put "sAMAccountName", lcase(cuenta)
oNuevoUsuario.put "givenName", nombre
oNuevoUsuario.put "sn", apellido
oNuevoUsuario.put "UserPrincipalName", lcase(cuenta) & "@" & uDominio
oNuevoUsuario.put "cn", uDisplay
oNuevoUsuario.put "DisplayName", uDisplay
oNuevoUsuario.put "company", empresa
oNuevoUsuario.put "c", pais
oNuevoUsuario.put "department", departamento
oNuevoUsuario.put "Description", descrip
oNuevoUsuario.SetInfo
randomize timer
dim texto
do while a<12
if (a=0) then
caracter = int(rnd * 25) + 90
texto = ucase(chr(caracter))
a = a + 1
else
caracter = int(rnd * 122) + 1
if ((caracter>47 and caracter<58) or (caracter>96 and caracter<123)) then
texto = texto & chr(caracter)
a = a + 1
end if
end if
loop
uPassword = texto
oNuevoUsuario.SetPassword uPassword
oNuevoUsuario.put "userAccountControl", 544
oNuevoUsuario.SetInfo
msgbox "Se creo el usuario y la pass es: " & uPassword
Este va a ser nuestro codigo basico para la creacion de usuarios, a partir de este iremos agregando los detalles para lograr uno mas complejo pero comencemos con lo basico, primero crearemos tres constantes:
- Dominio, tendra el dominio pero de forma que lo pueda interpretar el Active Directory, esto lo explicare mas adelante pero basicamente lo que pasamos es el dominio, en este caso como es laboratorio.local se transforma en dc=laboratorio, dc=local si en cambio tuvieramos un dominio como argentina.laboratorio.tinchicus.com este se transformaria en dc=argentina, dc=laboratorio, dc=tinchicus, dc=com, esto para el caso que hayan elegido otro dominio, tengan esto en cuenta.
- uDominio, contendra el dominio de nuestro Active Directory lo hago asi por un tema de practicidad, en este caso no use la c porque preferi indicar que es el dominio del usuario (u)
- titulo, va a ser el titulo de nuestros inputbox y a medida que mejoremos el programa lo iremos cambiando
El siguiente bloque lo que solicita es el ingreso de los datos para nuestro usuario, como pueden ver es bastante simple y basico, solicitaremos que ingreses un usuario (puede ser cualquiera pero que no coincida con los existentes), luego el nombre, el apellido, la empresa, una descripcion del mismo, el pais y el departamento, todos los datos pueden ser ingresados de la manera que deseen o incluso omitirlos el unico que tiene una nomenclatura especial es pais, porque no acepta el nombre del pais sino que debe usarse su abreviacion, por ejemplo:
- Argentina -> ar
- Colombia -> co
- Chile -> cl
- Paraguay -> py
- Brasil -> br
Si tu pais no figura en este ejemplo te recomiendo averiguar cual es la abreviatura de tu pais, en este pagina:
http://utils.mucattu.com/iso_3166-1.html
Una vez ingresados todos estos datos antes de pasar al siguiente bloque observen como creo una variable que posee el nombre y el apellido concatenados, uDisplay, con esto aclarado pasemos al siguiente bloque:
Set oRootLDAP = GetObject("LDAP://rootDSE")
Set oContenedor = GetObject("LDAP://CN=Users," & Dominio)
Set oNuevoUsuario = oContenedor.Create("User","cn=" & chr(34) & uDisplay & chr(34))
Este bloque es el creador de toda la magia, la primera linea establecera la raiz de nuestro AD, no importa cual sea la almacenara ahi, en este caso puntual no se si la utiliza pero les aconsejo siempre usar esa linea con ese nombre de variable u otro pero almacenen el valor, nuestra siguiente linea se encarga de obtener el contenedor de los usuarios, para este caso puntual vamos a usar el contenedor predeterminado del AD, por medio de GetObject, les pasamos el contenedor (CN=Users) y el dominio para el AD, recuerden la constante separada, nuestro siguiente objeto sera el nuevo usuario, de ahi el nombre, donde usaremos el contenedor antes creado y el metodo Create, le especificamos que es un usuario (User) y le pasamos el nombre canonico que no es otra cosa que los nombres concatenados anteriormente, y observen como usamos el chr con el valor 34 que equivale a las comillas dobles («), con esto explicado pasemos al siguiente bloque:
oNuevoUsuario.put "sAMAccountName", lcase(cuenta)
oNuevoUsuario.put "givenName", nombre
oNuevoUsuario.put "sn", apellido
oNuevoUsuario.put "UserPrincipalName", lcase(cuenta) & "@" & uDominio
oNuevoUsuario.put "cn", uDisplay
oNuevoUsuario.put "DisplayName", uDisplay
oNuevoUsuario.put "company", empresa
oNuevoUsuario.put "c", pais
oNuevoUsuario.put "department", departamento
oNuevoUsuario.put "Description", descrip
oNuevoUsuario.SetInfo
En este bloque pasaremos todos los datos almacenados y generaremos algunos nuevos pero a partir de la informacion que disponemos, nuestro primera propiedad sera la cuenta en si, sAMAccountName, la cual sera el nombre de la cuenta de ingreso para el usuario, el segundo campo sera el nombre del usuario, givenName, el tercero es el apellido, sn, el cuarto campo va a ser el usuario del AD y este posee otro formato que consta de la cuenta seguido de arroba y el dominio, en este caso sera: usuario@dominio, para este caso usamos la constante uDominio que definimos al principio, luego definiremos el «canonical name» (cn) por medio de uDisplay que definimos anteriormente, despues definiremos el nombre que se mostrara en el AD, DisplayName, nuestros siguientes campos son solo de dato descriptivo:
- company, almacena a que empresa pertenece
- c, almacena a que pais pertenece
- department, almacena al sector que pertenece
- Description, almacena una breve descripcion
Salvo el campo c, que solo nos permite almacenar paises abreviados, el resto son solo campos de texto y se puede almacenar cualquier informacion, obviamente estan pensados para un tipo de dato pero en algunas empresas que trabaje se almacenaba informacion personal del empleado para ser utilizado en otros momentos, un ejemplo es el numero interno de empleado, la ultima linea es la que establecera toda la informacion antes ingresada, pasemos al siguiente bloque:
randomize timer
dim texto
do while a<12
if (a=0) then
caracter = int(rnd * 25) + 90
texto = ucase(chr(caracter))
a = a + 1
else
caracter = int(rnd * 122) + 1
if ((caracter>47 and caracter<58) or (caracter>96 and caracter<123)) then
texto = texto & chr(caracter)
a = a + 1
end if
end if
loop
uPassword = texto
oNuevoUsuario.SetPassword uPassword
Este bloque es el encargado de generar una contraseña al azar para ello haremos algo parecido a lo visto en este post pero haremos una pequeña variante, primero usaremos a randomize timer para iniciar el «randomizador» luego definiremos una variable llamada texto, para nuestro siguiente paso usaremos un bucle do…loop que lo hara mientras a sea menor a 12, para este usaremos un condicional que primero verifica si a es igual a 0 si es verdadero genera un caracter de tipo letra pero en Mayuscula, esto es para que cumple las politicas de nuestro dominio, e incremente a la variable a, luego pasara a la parte del else donde generara un caracter a la azar entre 1 y 122 pero solamente si coincide en los rangos pasados procede a guardarlo en la variable texto y despues incrementara en 1 a la variable a, una vez terminado el bucle procederemos a guardar en uPassword el valor generado y almacenado en texto, despues usaremos a la siguiente linea para que establezca esta contraseña al usuario generado.
Nota: En este caso use el numero de 12 para la cantidad de caracteres porque es lo que mi controlador de dominio me solicita como minimo, tengan en cuenta de modificar esto en caso de ser distinto y el tema de la mayuscula como primer caracter fue por la misma razon.
Para continuar analicemos nuestro ultimo bloque:
oNuevoUsuario.put "userAccountControl", 544
oNuevoUsuario.SetInfo
msgbox "Se creo el usuario y la pass es: " & uPassword
En este caso la primera linea sea encarga de activar nuestro usuario, dado que todos los usuarios que generamos mediante scripts son con el estado inactivo por defecto pero de esta forma podremos usarlo, la siguiente linea se encargara de establecer este nuevo estado, por ultimo tenemos una linea que se encargara de notificarnos que el usuario fue creado y cual es la contraseña que se le asigno, veamos la salida final:

En este caso podemos ver cual es la contraseña que se le genero, asi que toman papel y lapiz para informarsela al usuario junto con la cuenta que le asignaron, con esto cubrimos lo basico para generar un usuario funcional en nuestro dominio, con este usuario podrian ingresar al dominio desde el cliente que hicimos en este post pero por ahora no lo vamos a hacer, para nuestro siguiente post mejoraremos notablemente un par de conductas de este script para darle un poco mas de «inteligencia» y utilidad tambien.
En resumen, hoy hemos visto como crear un usuario en el Active Directory, como conectarnos, cuales son algunos de los campos que podemos escribir, como se ingresan y se actualizan, como generar una clave completamente al azar con letras y numeros y la primer letra en mayuscula, como activar el usuario y una forma de notificacion bastante burda pero efectiva, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.
Tambien podes comprar mi libro sobre VBscript en Amazon


Tambien podes donar
Es para mantenimiento del sitio, gracias!
$1.50