Bienvenidos sean a este post, hasta el post anterior hemos visto como gestionar distintas acciones sobre nuestro AD por medio de VBScript.
Hoy nos centraremos en algunos de esos scripts y modificaremos algunos para efectuar acciones masivas para poder ahorrar mucho tiempo y esfuerzo, para ello necesitamos no solamente modificar nuestro codigo sino tambien generar un archivo donde almacenaremos la informacion y despues con el codigo recuperaremos dicha informacion para poder enviarla al objeto que estemos creando o modificando, para el archivo les recomiendo:
- Usen un archivo de texto simple como por ejemplo de extension .CSV
- Este formato de archivos puede ser generado por ejemplo con Excel
- La ventaja de esto es que tendremos cada campo separado y nos sera facil cargarlo
- Les recomiendo usar el separador de listas con punto y coma (;) para que no se les confunda con el separador decimal
- Tambien nos permitira usar comas dentro de los campos sin inconvenientes
- Esto pueden modificarlo en las configuraciones regionales del equipo
Con esto establecido vamos a ver el primer script que vamos a modificar como es el alta de usuarios.
Alta masiva de usuarios
Para este caso veamos primero el archivo que vamos a generar, en la primera linea estableceremos los campos y luego los datos que enviaremos, veamos como queda:
cuenta;nombre;apellido;empresa;descrip;pais;departamentoUsuario1;Nombre1;Apellido1;Tinchicus;Primer Usuario;ar;ITUsuario2;Nombre2;Apellido2;Tinchicus;Segundo Usuario;br;RRHHUsuario3;Nombre3;Apellido3;Tinchicus;Tercer Usuario;cl;Comercio ExteriorUsuario4;Nombre4;Apellido4;Tinchicus;Cuarto Usuario;ar;VendorsUsuario5;Nombre5;Apellido5;Tinchicus;Quinto Usuario;py;RRHHUsuario6;Nombre6;Apellido6;Tinchicus;Sexto Usuario;us;ITUsuario7;Nombre7;Apellido7;Tinchicus;Septimo Usuario;ar;VentasUsuario8;Nombre8;Apellido8;Tinchicus;Octavo Usuario;co;Call CenterUsuario9;Nombre9;Apellido9;Tinchicus;Novemos Usuario;uy;Call CenterUsuario10;Nombre10;Apellido10;Tinchicus;Decimo Usuario;ar;Call Center
En este caso vemos como la primer linea equivaldra al campo que preguntamos y abajo tendremos los valores que corresponden a cada usuario, observen como cada campo esta separado por el punto y coma (;), pasemos ahora ver nuestro «nuevo» codigo:
newuserfromcsv.vbs
Const Dominio = "dc=laboratorio,dc=local"Const udominio = "laboratorio.local"Const titulo = "Alta de usuario v. 1.0"Const filein = "usuarios.csv"ahora = nowano = datepart("yyyy",ahora)mes = datepart("m",ahora)dia = datepart("d",ahora)hora = datepart("h",ahora)minuto = datepart("n",ahora)segundo = datepart("s",ahora)ahora = ano & mes & dia & hora & minuto & segundofileout = "Creados -" & ahora & ".log"Dim objFSOut, objStreamout, fileout,textologDim objFSO, objStream, linea, vueltaSet objFSO = CreateObject("Scripting.FileSystemObject")Set objStream = objFSO.OpenTextFile(filein, 1, false)Set objFSOut = CreateObject("Scripting.FileSystemObject")Set objStreamout = objFSOut.CreateTextFile(fileout, 1, false)objStreamout.WriteLine("Inicio: " & date() & " " & time())do while objStream.AtEndOfStream <> true linea = objStream.readline if vuelta > 0 then CrearUsuario(linea) vuelta = vuelta + 1loopobjStreamout.write "Final: " & date() & " " & time()objStreamout.close()Set objStreamout = nothingSet objFSOut = nothingobjStream.close()Set objStream = nothingSet objFSO = nothingmsgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"sub CrearUsuario(datos)d = split(datos,";")cuenta = d(0)nombre = d(1)apellido = d(2)uDisplay = apellido & ", " & nombrechequeo = FindUser(cuenta,uDisplay,ucase(Dominio))if (chequeo="Not Found") thenempresa = d(3)descrip = d(4)pais = d(5)departamento = d(6)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", nombreoNuevoUsuario.put "sn", apellidooNuevoUsuario.put "UserPrincipalName", lcase(cuenta) & "@" & uDominiooNuevoUsuario.put "cn", uDisplayoNuevoUsuario.put "DisplayName", uDisplayoNuevoUsuario.put "company", empresaoNuevoUsuario.put "c", paisoNuevoUsuario.put "department", departamentooNuevoUsuario.put "Description", descripoNuevoUsuario.SetInforandomize timerdim textodo while a<12 if (a=0) then caracter = int(rnd * 24) + 65 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 loopuPassword = textooNuevoUsuario.SetPassword uPasswordoNuevoUsuario.Put "pwdLastSet", 0oNuevoUsuario.put "userAccountControl", 544oNuevoUsuario.SetInfotextolog = "Se creo la cuenta: " & cuenta & vbCrLftextolog = textolog & "El nombre completo: " & uDisplay & vbCrLftextolog = textolog & "La contraseña es: " & uPassword & vbCrLftextolog = textolog & "========================================" & vbCrLfobjStreamout.Write textologelsetextolog = "Se encontro el siguiente objeto: " & chequeo &vbCrLftextolog = textolog & "========================================" & vbCrLfobjStreamout.Write textologend ifend subFunction 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.closeend function
Basicamente es muy parecido a lo que vimos en este post y en este otro pero con unas sutiles diferencias, veamos las primeras:
Const filein = "usuarios.csv"ahora = nowano = datepart("yyyy",ahora)mes = datepart("m",ahora)dia = datepart("d",ahora)hora = datepart("h",ahora)minuto = datepart("n",ahora)segundo = datepart("s",ahora)ahora = ano & mes & dia & hora & minuto & segundofileout = "Creados -" & ahora & ".log"Dim objFSOut, objStreamout, fileout,textologDim objFSO, objStream, linea, vuelta
Nuestra primer linea definiremos cual va a ser nuestro archivo donde estara la informacion, se puede reemplazar por un inputbox pero les recomiendo usarlo asi, luego crearemos una variable llamada ahora a la cual le asignaremos el valor de now y lo separaremos por medio de datepart y lo volveremos a ensamblar en ahora pero en el siguiente orden:
- año
- mes
- dia
- hora
- minutos
- segundos
Nuestro siguiente paso sera crear una variable llamada fileout, la cual sera el nombre de nuestro archivo de salida, a la cual le asignaremos el nombre «Creados» junto al valor generado en ahora y lo finalizamos con el .log, despues agregaremos una nueva linea para declarar las variables nuevas (objStream, linea, vuelta), pasemos a analizar el siguiente bloque:
Set objFSO = CreateObject("Scripting.FileSystemObject")Set objStream = objFSO.OpenTextFile(filein, 1, false)Set objFSOut = CreateObject("Scripting.FileSystemObject")Set objStreamout = objFSOut.CreateTextFile(fileout, 1, false)objStreamout.WriteLine("Inicio: " & date() & " " & time())do while objStream.AtEndOfStream <> true linea = objStream.readline if vuelta > 0 then CrearUsuario(linea) vuelta = vuelta + 1loop
Las primera linea nos creara un objeto para poder acceder a los objetos del sistema como un archivo, la segunda creara otro objeto en base al anterior para abrir el archivo informado en filein y podamos leerlo, las siguientes lineas hacen exactamente lo mismo pero para escribir en nuestro archivo informado en fileout, nuestra siguiente linea escribira en el archivo de salida (fileout) el inicio de la operacion, luego usaremos un bucle con do que se hara mientras exista una linea en el archivo, en el cuerpo del bucle primero leeremos la linea y la asignaremos a la variable llamada linea, luego tendremos un condicional donde verifica que vuelta sea mayor a 0 si es verdad llama a CrearUsuario pasando como parametro el valor de linea, por ultimo incrementamos a vuelta, esto lo hacemos para que omita la primera linea del archivo que es la descripcion de cada columna, si no tienes esta linea puedes quitar el condicional y que trabaje directamente, pasemos a nuestro siguiente bloque:
Nota: Como pueden observar hemos quitado la creacion del archivo de salida del ejemplo anterior porque ahora debemos agregar mas lineas a las anteriores y hemos puesto a fileout al principio.
sub CrearUsuario(datos)d = split(datos,";")cuenta = d(0)nombre = d(1)apellido = d(2)uDisplay = apellido & ", " & nombrechequeo = FindUser(cuenta,uDisplay,ucase(Dominio))if (chequeo="Not Found") thenempresa = d(3)descrip = d(4)pais = d(5)departamento = d(6)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", nombreoNuevoUsuario.put "sn", apellidooNuevoUsuario.put "UserPrincipalName", lcase(cuenta) & "@" & uDominiooNuevoUsuario.put "cn", uDisplayoNuevoUsuario.put "DisplayName", uDisplayoNuevoUsuario.put "company", empresaoNuevoUsuario.put "c", paisoNuevoUsuario.put "department", departamentooNuevoUsuario.put "Description", descripoNuevoUsuario.SetInforandomize timerdim textodo 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 loopuPassword = textooNuevoUsuario.SetPassword uPasswordoNuevoUsuario.Put "pwdLastSet", 0oNuevoUsuario.put "userAccountControl", 544oNuevoUsuario.SetInfotextolog = "Se creo la cuenta: " & cuenta & vbCrLftextolog = textolog & "El nombre completo: " & uDisplay & vbCrLftextolog = textolog & "La contraseña es: " & uPassword & vbCrLftextolog = textolog & "========================================" & vbCrLfobjStreamout.Write textologelsetextolog = "Se encontro el siguiente objeto: " & chequeo &vbCrLftextolog = textolog & "========================================" & vbCrLfobjStreamout.Write textologend if
En este caso todo lo que teniamos en nuestro script para generar usuarios lo transformamos en un sub llamada CrearUsuario y como atributo recibe la linea leida del archivo, a diferencia de antes esta vez no pediremos los datos sino que tomaremos el dato recibido y por medio de split lo separaremos, lo asignremos a la variable d, despues a cada uno de los campos le asignaremos el valor de d en su respectiva posicion pero al igual que antes primero asignaremos la cuenta, el nombre y el apellido, generamos a uDisplay y lo chequeamos por FindUser y si no lo encuentra procede a crear el usuario igual que antes con la creacion de la notificacion y una vez finalizado lo agrega al archivo de salida (fileout), en esto no cambio nada (salvo el hecho de que obtenemos los datos en lugar de pedirlos) y en caso de haberlo encontrado crea un mensaje de que objeto encontrado y lo agrega al archivo de salida, esto lo hara por cada linea que encuentre, una vez que termine el bucle procedera a este bloque:
objStreamout.write "Final: " & date() & " " & time()objStreamout.close()Set objStreamout = nothingSet objFSOut = nothingobjStream.close()Set objStream = nothingSet objFSO = nothingmsgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"
En este bloque agregamos la ultima linea de nuestro archivo de salida para notificar cuando finaliza y luego procedemos a cerrar ambos archivos y por ultimo mostramos la notificacion de finalizado nuestro script, veamos este script en accion
Como pueden ver en el ejemplo es la utilidad mas practica para trabajar con nuestro AD porque realmente nos ahorra nuestro trabajo, aca les comparto como se genero nuestro archivo:
Creados -20201411378.log
Inicio: 04/01/2020 11:37:08 a.m.Se creo la cuenta: Usuario1El nombre completo: Apellido1, Nombre1La contraseña es: Spr5nnnudacv========================================Se creo la cuenta: Usuario2El nombre completo: Apellido2, Nombre2La contraseña es: Pcybm4vxhaan========================================Se encontro el siguiente objeto: Usuario3========================================Se encontro el siguiente objeto: Usuario4========================================Se creo la cuenta: Usuario5El nombre completo: Apellido5, Nombre5La contraseña es: Vyxwbon9rgxt========================================Se creo la cuenta: Usuario6El nombre completo: Apellido6, Nombre6La contraseña es: Dsls72tr16ja========================================Se creo la cuenta: Usuario7El nombre completo: Apellido7, Nombre7La contraseña es: C9lttk7v4zhl========================================Se creo la cuenta: Usuario8El nombre completo: Apellido8, Nombre8La contraseña es: L63iclyki90e========================================Se creo la cuenta: Usuario9El nombre completo: Apellido9, Nombre9La contraseña es: Lvx7xma4nduf========================================Se creo la cuenta: Usuario10El nombre completo: Apellido10, Nombre10La contraseña es: Es2f4i8m3hfj========================================Final: 04/01/2020 11:37:08 a.m.
En este caso como fueron pocos usuarios se hace realmente muy rapido pero con mas usuarios puede incrementar esta demora, con esto hemos cubierto como hacer una alta masiva de usuarios, pasemos al siguiente tema.
Bloqueo masivo de usuarios
En este caso veremos como bloquear masivamente usuarios para ello usaremos el mismo metodo que anteriormente por medio de un archivo con extension .CSV aca les paso un ejemplo del arhivo:
usuarios.csv
cuenta;motivoUsuario1;DesvinculadoUsuario2;RenuncioUsuario3;Sospechado de roboUsuario4;DevinculadoUsuario5;RenuncioUsuario6;RenuncioUsuario7;Sospechado de hackeoUsuario8;RenuncioUsuario9;DespedidoUsuario10;Despedido
Para poder realizar la accion del titulo debemos usar el siguiente codigo:
bloqueofromcsv.vbs
Const ADS_UF_ACCOUNTDISABLE = 2Const uDominio = "dc=laboratorio, dc=local"Const titulo = "Bloqueo de usuarios v. 1.0"Const filein = "usuarios.csv"ahora = nowano = datepart("yyyy",ahora)mes = datepart("m",ahora)dia = datepart("d",ahora)hora = datepart("h",ahora)minuto = datepart("n",ahora)segundo = datepart("s",ahora)ahora = ano & mes & dia & hora & minuto & segundofileout = "Bloqueados -" & ahora & ".log"Dim objFSOut, objStreamout, fileout,textologDim objFSO, objStream, linea, vueltaSet objFSO = CreateObject("Scripting.FileSystemObject")Set objStream = objFSO.OpenTextFile(filein, 1, false)Set objFSOut = CreateObject("Scripting.FileSystemObject")Set objStreamout = objFSOut.CreateTextFile(fileout, 1, false)objStreamout.WriteLine("Inicio: " & date() & " " & time())do while objStream.AtEndOfStream <> true linea = objStream.readline if vuelta > 0 then BloquearUsuario(linea) vuelta = vuelta + 1loopobjStreamout.write "Final: " & date() & " " & time()objStreamout.close()Set objStreamout = nothingSet objFSOut = nothingobjStream.close()Set objStream = nothingSet objFSO = nothingmsgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"sub BloquearUsuario(usuario)d = split(usuario,";")cuenta = d(0)motivo = d(1)chequeo = FindUser(cuenta, uDominio)if chequeo <> "Not found" then ahora = monthname(mes) & ", " & dia & " de " & ano fecha = (dateserial(ano, mes, dia)) + 1 Set objUser = GetObject(chequeo) objUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE objUser.SetInfo objUser.AccountExpirationDate = fecha objUser.SetInfo cuenta = "B-" & cuenta objUser.put "sAMAccountName", lcase(cuenta) objUser.put "UserPrincipalName", lcase(cuenta & "@laboratorio.local") objUser.put "Description", motivo & " el " & ahora objUser.SetInfo textolog = "Se bloqueo el usuario: " & cuenta &vbCrLf textolog = textolog & "==============================" & vbCrLfelse textolog = "Usuario no encontrado: " & cuenta & vbCrLf textolog = textolog & "==============================" & vbCrLfend ifobjStreamout.Write textologend subFunction FindUser(Byval UserName, Byval Domain) dim vUsuario 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 rs.MoveFirst vUsuario = Replace(rs(0),"GC://","LDAP://") FindUser=vUsuario else FindUser = "Not Found" end if end if cn.closeend function
La primera parte trabaja de la misma forma que vimos antes pero la unica diferencia es que en lugar de llamar al archivo Creados lo llama Bloqueados, inclusive la forma de leer el archivo de origen es similar y llama al metodo BloquearUsuario, veamos este metodo:
sub BloquearUsuario(usuario)d = split(usuario,";")cuenta = d(0)motivo = d(1)chequeo = FindUser(cuenta, uDominio)if chequeo <> "Not found" then ahora = monthname(mes) & ", " & dia & " de " & ano fecha = (dateserial(ano, mes, dia)) + 1 Set objUser = GetObject(chequeo) objUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE objUser.SetInfo objUser.AccountExpirationDate = fecha objUser.SetInfo cuenta = "B-" & cuenta objUser.put "sAMAccountName", lcase(cuenta) objUser.put "UserPrincipalName", lcase(cuenta & "@laboratorio.local") objUser.put "Description", motivo & " el " & ahora objUser.SetInfo textolog = "Se bloqueo el usuario: " & cuenta &vbCrLf textolog = textolog & "==============================" & vbCrLfelse textolog = "Usuario no encontrado: " & cuenta & vbCrLf textolog = textolog & "==============================" & vbCrLfend ifobjStreamout.Write textologend sub
Recibe la linea del archivo, la dividimos y luego los asignamos a las variables de cuenta y motivo, en lugar de pedirlas, despues trabaja de la misma forma que antes, esto lo vimos en este post, si lo encuentra lo modifica completamente pero en lugar de mostrar una notificacion creamos un texto que lo agregaremos al archivo de salida (fileout) para notificar que usuario se bloquea, en caso de no encontrarlo tambien nos notifica en el archivo, y al igual que antes una vez terminada la lectura del archivo cierra todo y nos notifica que finalizo, veamos como trabaja
Como pueden ver obtuvimos un accion sobre muchos usuarios en muy poco tiempo con todas las modificaciones que necesitamos, veamos el archivo de salida:
Bloqueados -202014121545.log
Inicio: 04/01/2020 12:15:45 p.m.Se bloqueo el usuario: B-Usuario1==============================Se bloqueo el usuario: B-Usuario2==============================Se bloqueo el usuario: B-Usuario3==============================Se bloqueo el usuario: B-Usuario4==============================Se bloqueo el usuario: B-Usuario5==============================Se bloqueo el usuario: B-Usuario6==============================Se bloqueo el usuario: B-Usuario7==============================Se bloqueo el usuario: B-Usuario8==============================Se bloqueo el usuario: B-Usuario9==============================Se bloqueo el usuario: B-Usuario10==============================Final: 04/01/2020 12:15:45 p.m.
Ahora hablaremos sobre el ultimo tema como es la eliminacion de usuarios.
Eliminacion masiva de usuarios
Este va a ser nuestro ultimo paso, con este podremos limpiar el AD de forma segura y crearemos un pequeño log para ver cuales fueron eliminados, el archivo solamente debe tener las cuentas sin ninguna descripcion como los casos anteriores, les muestro un ejemplo:
usuarios.csv
B-Usuario1B-Usuario2B-Usuario3B-Usuario4B-Usuario5B-Usuario6B-Usuario7B-Usuario8B-Usuario9B-Usuario10
Nuestro codigo sera el siguiente:
deletefromcsv.vbs
const uDominio = "dc=laboratorio, dc=local"Const titulo = "Eliminacion de usuarios v. 1.0"Const filein = "usuarios.csv"ahora = nowano = datepart("yyyy",ahora)mes = datepart("m",ahora)dia = datepart("d",ahora)hora = datepart("h",ahora)minuto = datepart("n",ahora)segundo = datepart("s",ahora)ahora = ano & mes & dia & hora & minuto & segundofileout = "Eliminados -" & ahora & ".log"Dim objFSOut, objStreamout, fileout,textologDim objFSO, objStream, linea, vueltaSet objFSO = CreateObject("Scripting.FileSystemObject")Set objStream = objFSO.OpenTextFile(filein, 1, false)Set objFSO = CreateObject("Scripting.FileSystemObject")Set objStream = objFSO.OpenTextFile(filein, 1, false)Set objFSOut = CreateObject("Scripting.FileSystemObject")Set objStreamout = objFSOut.CreateTextFile(fileout, 1, false)objStreamout.WriteLine("Inicio: " & date() & " " & time())do while objStream.AtEndOfStream <> true linea = objStream.readline BorrarUsuario(linea)loopobjStreamout.write "Final: " & date() & " " & time()objStreamout.close()Set objStreamout = nothingSet objFSOut = nothingobjStream.close()Set objStream = nothingSet objFSO = nothingmsgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"sub BorrarUsuario(cuenta)chequeo = FindUser(cuenta, uDominio)if chequeo <> "Not Found" thend = split(chequeo, ",")c = d(0) & "," & d(1)cuenta = replace(c,"\","")cuenta = mid(cuenta,1,3) & chr(34) & mid(cuenta,4,len(cuenta)) & chr(34)for a=2 to ubound(d) ou = ou & "," & d(a)nextou = lcase(mid(ou,2,len(ou)))Set objOU = GetObject("LDAP://" & ou)objOU.Delete "user", cuentatextolog = "El usuario " & linea & " fue eliminado del AD." & vbCrLftextolog = textolog & "========================================" & vbCrLfelsetextolog = "El usuario " & linea & " no fue encontrado." & vbCrLftextolog = textolog & "========================================" & vbCrLfend ifobjStreamout.Write textologend subFunction FindUser(Byval UserName, Byval Domain) dim vUsuario 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 rs.MoveFirst vUsuario = Replace(rs(0),"GC://","") FindUser=vUsuario else FindUser = "Not Found" end if end if cn.closeend function
Al igual que en los casos anteriores utilizaremos las rutinas para leer el archivo y para escribir un log, las lineas encargadas de eliminar el usuario se transforman en la sub BorrarUsuario pero en este caso no necesitamos un split sino que recibe directamente el usuario lo busca de la misma forma que lo explicamos en este post y procede a borrarlo si lo encuentra pero la diferencia esta que lo escribe en el archivo de salida, el ciclo es igual al de los casos anteriores, veamos su trabajo
Lo malo de esto es que no podemos volver atras nuestra accion y una vez eliminado se elimino completamente, el archivo de salida quedara de la siguiente forma:
Eliminados -202014123618.log
Inicio: 04/01/2020 12:36:18 p.m.El usuario B-Usuario1 fue eliminado del AD.========================================El usuario B-Usuario2 fue eliminado del AD.========================================El usuario B-Usuario3 fue eliminado del AD.========================================El usuario B-Usuario4 fue eliminado del AD.========================================El usuario B-Usuario5 fue eliminado del AD.========================================El usuario B-Usuario6 fue eliminado del AD.========================================El usuario B-Usuario7 fue eliminado del AD.========================================El usuario B-Usuario8 fue eliminado del AD.========================================El usuario B-Usuario9 fue eliminado del AD.========================================El usuario B-Usuario10 fue eliminado del AD.========================================Final: 04/01/2020 12:36:19 p.m.
Nota: Tecnicamente se puede volver a recuperar el usuario eliminado pero es una tarea tan engorrosa y se necesita una herramienta especial que igualmente no recupera al usuario completamente que es mas facil volver a solicitar la informcion y generarlo nuevamente.
Con esto hicimos tres scripts basicos para poder hacer un simple mantenimiento de un Active Directory en forma masiva ya sea para ingresar nuevos usuarios, bloquearlos o directamente eliminarlos, esto es simplemente una base practica de aqui en mas se puede mejorar y agregar mas opciones, si captaron el concepto de lectura de archivos esto mismo pueden hacer tanto para el desbloqueo de usuarios como para los grupos que vimos en posts anteriores.
En resumen, hoy hemos visto como hacer el alta masiva de usuarios, como poder hacer un log y retener los datos que debemos enviar, hemos visto como desactivar usuarios de forma masiva, y como eliminarlos de forma masiva, hemos visto las pequeñas modificaciones que se deben hacer para poder trabajar con archivos y como poder utilizarlo mientras el archivo contenga informacion, 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