Bienvenidos sean a este post, hoy nos centraremos mas en ver algunas propiedades adicionales donde podemos escribir informacion, esto les sera util para poder almacenar informacion de los usuarios, ya sea la que corresponde como otra mas de tipo administrativo como guardar las modificaciones que se realizaron, veamos la tabla de propiedades y el campo que pertenece:
Propiedad | Campo del usuario |
sAMAccountName | User logon name (pre windows 2000) |
UserPrincipalName | User logon name |
givenName | Nombre en pestaña General |
sn | Apellido en pestaña General |
DisplayName | Display Name en pestaña General |
physicalDeliveryOfficeName | Office en pestaña General |
telephoneNumber | Telephone Number en pestaña General |
homephone | Home en pestaña Telephones |
streetAddress | Street en pestaña Address |
l | City en pestaña Address |
title | Title en pestaña Organization |
postalCode | ZIP/Postal Code en pestaña Address |
pager | Pager en pestaña Telephones |
info | Notes en pestaña Telephones |
scriptpath | Logon script en pestaña Profile |
wwwhomepage | Web Page en pestaña General |
postofficebox | P.O Box en pestaña Address |
Mail en pestaña General | |
facsimileTelephoneNumber | Fax en pestaña Telephones |
mobile | Mobile en pestaña Telephones |
ipphone | IP Phone en pestaña Telephones |
c | Country en pestaña Address |
department | Department en pestaña Organization |
company | Company en pestaña Organization |
distinguishedName | Nos devuelve el path y el domino del usuario en cuestion |
Estos son algunos, o por lo menos los que mas pueden utilizar para dejar una informacion adicional sobre el usuario, pueden usarla desde informacion como el DNI, RUT o como sea la identtificacion en tu pais, hasta el numero del pedido (o ticket) con el que fue solicitado la alta, una modificacion o la baja, en fin queda a vuestra imaginacion para que les puede ser util esta informacion, por otro lado en todos nuestros casos trabajamos sobre el contenedor predeterminado del AD pero que sucede cuando debemos trabajar sobre otro o crear nuestro usuario sobre un OU (Unidad Organizacional por sus siglas en ingles) diferente veamos el siguiente caso
Nota: Los campos anteriormente mostrados tambien permiten obtener la informacion almacenada.

En este caso tenemos una OU por fuera del predeterminado donde estara la compañia, por un lado los usuarios, por otro las PCs, por otro las Notebooks, por otro los grupos y uno para los Servidores, a su vez dentro de Usuarios tendremos el Pais (Argentina) y la oficina (IT), vamos a suponer que tenemos un usuario, si miramos dentro de sus propiedades y en la pestaña Object, en la opcion de Canonical Name veriamos esto:
laboratorio.local/Tinchicus/Usuarios/Argentina/IT/Apellido1, Nombre1
En este caso la ubicacion de nuestro objeto en realidad seria esta:
laboratorio.local/Tinchicus/Usuarios/Argentina/IT
Pero con este formato no podremos usarlo en nuestro scripts porque nos devolveria un error, la unica opcion es convertirlo a un formato valido para ello deberan leerlo de derecha a izquierda y convertirlo de esta forma:
ou=IT,ou=Argentina,ou=Usuarios,ou=Tinchicus,dc=laboratorio,dc=local
Se ve complicado pero no lo es, si comprenden el patron podran transformar cualquier ou en un formato valido, vamos a tomar el script de creacion de usuarios (no masivo) y lo vamos a modificar de la siguiente forma:
Const ADS_PROPERTY_APPEND = 3
Const ADS_PORPERTY_UPDATE = 2
Const Dominio = "dc=laboratorio,dc=local"
Const udominio = "laboratorio.local"
Const titulo = "Alta de usuario v. 1.0"
Dim objFSOut, objStreamout, fileout,textolog
cuenta = inputbox("Ingresa la cuenta",titulo)
nombre = inputbox("Ingresa el nombre",titulo)
apellido = inputbox("Ingresa el apellido",titulo)
uDisplay = apellido & ", " & nombre
chequeo = FindUser(cuenta,uDisplay,ucase(Dominio))
if (chequeo="Not Found") then
empresa = inputbox("Ingresa la empresa",titulo)
descrip = inputbox("Ingresa la descripcion",titulo)
pais = inputbox("Ingresa el pais",titulo)
departamento = inputbox("Ingresa el departamento",titulo)
ou = inputbox("Ingresa la ubicacion del objeto (ou)",titulo)
if (ou="") then ou="cn=Users"
Set oRootLDAP = GetObject("LDAP://rootDSE")
Set oContenedor = GetObject("LDAP://" & ou & "," & 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) + 65
texto = 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
'msgbox uPassword
oNuevoUsuario.SetPassword uPassword
oNuevoUsuario.Put "pwdLastSet", 0
oNuevoUsuario.put "userAccountControl", 544
oNuevoUsuario.SetInfo
fileout = cuenta & ".log"
textolog = "Se creo la cuenta: " & cuenta & vbCrLf
textolog = textolog & "El nombre completo: " & uDisplay & vbCrLf
textolog = textolog & "La contraseña es: " & uPassword
Set objFSOut = CreateObject("Scripting.FileSystemObject")
Set objStreamout = objFSOut.CreateTextFile(fileout, 1, false)
objStreamout.Write textolog
objStreamout.close()
Set objStreamout = nothing
Set objFSOut = nothing
msgbox "Se creo el usuario correctamente"
else
msgbox "Se encontro el siguiente objeto: " & chequeo,,titulo
end if
Function FindUser(Byval UserName, ByVal CanonName, Byval Domain)
set cn = createobject("ADODB.Connection")
set cmd = createobject("ADODB.Command")
set rs = createobject("ADODB.Recordset")
cn.open "Provider=ADsDSOObject;"
cmd.activeconnection=cn
cmd.commandtext="SELECT ADsPath FROM 'GC://" & Domain & _
"' WHERE sAMAccountName = '" & UserName & "'"
set rs = cmd.execute
if err<>0 then
FindUser="Error conectandose a la base del AD:" & err.description
else
if not rs.BOF and not rs.EOF then
FindUser=UserName
else
cmd.commandtext="SELECT ADsPath FROM 'GC://" & Domain & _
"' WHERE cn = '" & CanonName & "'"
set rs = cmd.execute
if not rs.BOF and not rs.EOF then
FindUser=CanonName
else
FindUser = "Not Found"
end if
end if
end if
cn.close
end function
El codigo es exactamente el mismo al que estudiamos en su momento en este post pero la unica diferencia va a estar en estas dos partes:
ou = inputbox("Ingresa la ubicacion del objeto (ou)",titulo)
if (ou="") then ou="cn=Users"
Donde pediremos que ingresando la direccion completa tal como indicamos antes pero sin el dominio (dc=laboratorio, dc=local) porque este dato lo tenemos en Dominio, en caso de que no lo pasemos porque lo dejamos en blanco le asignara a ou el valor de «cn=Users» para que no genere error, nuestra siguiente modificacion sera esta:
Set oContenedor = GetObject("LDAP://" & ou & "," & Dominio)
Donde en lugar de usar cn=Users directamente usaremos el valor de ou adicionado con el dominio, si lo probamos se vera algo asi:

Despues creara el usuario como siempre pero la ubicacion que le informamos, esto es util para cuando necesitamos organizar nuestros objetos dentro del AD, especialmente cuando son empresas muy grandes con distintas sucursales ya sean en el interior de un pais como en el exterior, en fin espero que esto les sea de utilidad.
En resumen, hoy hemos visto cuales son las propiedades que podemos modificar y tener informacion visualmente a mano, tanto sea para almacenar informacion como para auditorias, tambien hemos visto como trabajar con las OU para organizar nuestra informacion dentro del AD, 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