Anuncios

Bienvenidos sean a este post, hasta el post anterior hemos visto como gestionar distintas acciones sobre nuestro AD por medio de VBScript.

Anuncios

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.

Anuncios

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;departamento
Usuario1;Nombre1;Apellido1;Tinchicus;Primer Usuario;ar;IT
Usuario2;Nombre2;Apellido2;Tinchicus;Segundo Usuario;br;RRHH
Usuario3;Nombre3;Apellido3;Tinchicus;Tercer Usuario;cl;Comercio Exterior
Usuario4;Nombre4;Apellido4;Tinchicus;Cuarto Usuario;ar;Vendors
Usuario5;Nombre5;Apellido5;Tinchicus;Quinto Usuario;py;RRHH
Usuario6;Nombre6;Apellido6;Tinchicus;Sexto Usuario;us;IT
Usuario7;Nombre7;Apellido7;Tinchicus;Septimo Usuario;ar;Ventas
Usuario8;Nombre8;Apellido8;Tinchicus;Octavo Usuario;co;Call Center
Usuario9;Nombre9;Apellido9;Tinchicus;Novemos Usuario;uy;Call Center
Usuario10;Nombre10;Apellido10;Tinchicus;Decimo Usuario;ar;Call Center
Anuncios

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 = now
ano = 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 & segundo

fileout = "Creados -" & ahora & ".log"

Dim objFSOut, objStreamout, fileout,textolog
Dim objFSO, objStream, linea, vuelta

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 + 1
loop

objStreamout.write "Final: " & date() & " " & time()
objStreamout.close()
Set objStreamout = nothing
Set objFSOut = nothing

objStream.close()
Set objStream = nothing
Set objFSO = nothing

msgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"

sub CrearUsuario(datos)

d = split(datos,";")

cuenta = d(0)
nombre = d(1)
apellido = d(2)
uDisplay = apellido & ", " & nombre

chequeo = FindUser(cuenta,uDisplay,ucase(Dominio))

if (chequeo="Not Found") then

empresa = 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", 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 * 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		 
loop

uPassword = texto

oNuevoUsuario.SetPassword uPassword
oNuevoUsuario.Put "pwdLastSet", 0

oNuevoUsuario.put "userAccountControl", 544
oNuevoUsuario.SetInfo

textolog = "Se creo la cuenta: " & cuenta & vbCrLf
textolog = textolog & "El nombre completo: " & uDisplay & vbCrLf
textolog = textolog & "La contraseña es: " & uPassword & vbCrLf
textolog = textolog & "========================================" & vbCrLf

objStreamout.Write textolog

else

textolog = "Se encontro el siguiente objeto: " & chequeo &vbCrLf
textolog = textolog & "========================================" & vbCrLf

objStreamout.Write textolog

end if

end sub

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 
Anuncios

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 = now
ano = 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 & segundo

fileout = "Creados -" & ahora & ".log"

Dim objFSOut, objStreamout, fileout,textolog
Dim objFSO, objStream, linea, vuelta
Anuncios

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
Anuncios

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 + 1
loop
Anuncios

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 & ", " & nombre

chequeo = FindUser(cuenta,uDisplay,ucase(Dominio))

if (chequeo="Not Found") then

empresa = 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", 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

oNuevoUsuario.SetPassword uPassword
oNuevoUsuario.Put "pwdLastSet", 0

oNuevoUsuario.put "userAccountControl", 544
oNuevoUsuario.SetInfo

textolog = "Se creo la cuenta: " & cuenta & vbCrLf
textolog = textolog & "El nombre completo: " & uDisplay & vbCrLf
textolog = textolog & "La contraseña es: " & uPassword & vbCrLf
textolog = textolog & "========================================" & vbCrLf

objStreamout.Write textolog

else

textolog = "Se encontro el siguiente objeto: " & chequeo &vbCrLf
textolog = textolog & "========================================" & vbCrLf

objStreamout.Write textolog

end if
Anuncios

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 = nothing
Set objFSOut = nothing

objStream.close()
Set objStream = nothing
Set objFSO = nothing

msgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"
Anuncios

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: Usuario1
El nombre completo: Apellido1, Nombre1
La contraseña es: Spr5nnnudacv
========================================
Se creo la cuenta: Usuario2
El nombre completo: Apellido2, Nombre2
La contraseña es: Pcybm4vxhaan
========================================
Se encontro el siguiente objeto: Usuario3
========================================
Se encontro el siguiente objeto: Usuario4
========================================
Se creo la cuenta: Usuario5
El nombre completo: Apellido5, Nombre5
La contraseña es: Vyxwbon9rgxt
========================================
Se creo la cuenta: Usuario6
El nombre completo: Apellido6, Nombre6
La contraseña es: Dsls72tr16ja
========================================
Se creo la cuenta: Usuario7
El nombre completo: Apellido7, Nombre7
La contraseña es: C9lttk7v4zhl
========================================
Se creo la cuenta: Usuario8
El nombre completo: Apellido8, Nombre8
La contraseña es: L63iclyki90e
========================================
Se creo la cuenta: Usuario9
El nombre completo: Apellido9, Nombre9
La contraseña es: Lvx7xma4nduf
========================================
Se creo la cuenta: Usuario10
El nombre completo: Apellido10, Nombre10
La 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.

Anuncios

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;motivo
Usuario1;Desvinculado
Usuario2;Renuncio
Usuario3;Sospechado de robo
Usuario4;Devinculado
Usuario5;Renuncio
Usuario6;Renuncio
Usuario7;Sospechado de hackeo
Usuario8;Renuncio
Usuario9;Despedido
Usuario10;Despedido
Anuncios

Para poder realizar la accion del titulo debemos usar el siguiente codigo:

bloqueofromcsv.vbs

Const ADS_UF_ACCOUNTDISABLE = 2
Const uDominio = "dc=laboratorio, dc=local"
Const titulo = "Bloqueo de usuarios v. 1.0"
Const filein = "usuarios.csv"

ahora = now
ano = 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 & segundo

fileout = "Bloqueados -" & ahora & ".log"

Dim objFSOut, objStreamout, fileout,textolog
Dim objFSO, objStream, linea, vuelta

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 BloquearUsuario(linea)
	vuelta = vuelta + 1
loop

objStreamout.write "Final: " & date() & " " & time()
objStreamout.close()
Set objStreamout = nothing
Set objFSOut = nothing

objStream.close()
Set objStream = nothing
Set objFSO = nothing

msgbox "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 & "==============================" & vbCrLf
else
	textolog = "Usuario no encontrado: " & cuenta & vbCrLf
	textolog = textolog & "==============================" & vbCrLf
end if

objStreamout.Write textolog

end sub

Function 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.close
end function
Anuncios

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 & "==============================" & vbCrLf
else
	textolog = "Usuario no encontrado: " & cuenta & vbCrLf
	textolog = textolog & "==============================" & vbCrLf
end if

objStreamout.Write textolog

end sub
Anuncios

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

Anuncios

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.

Anuncios

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-Usuario1
B-Usuario2
B-Usuario3
B-Usuario4
B-Usuario5
B-Usuario6
B-Usuario7
B-Usuario8
B-Usuario9
B-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 = now
ano = 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 & segundo

fileout = "Eliminados -" & ahora & ".log"

Dim objFSOut, objStreamout, fileout,textolog
Dim objFSO, objStream, linea, vuelta

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)
loop

objStreamout.write "Final: " & date() & " " & time()
objStreamout.close()
Set objStreamout = nothing
Set objFSOut = nothing

objStream.close()
Set objStream = nothing
Set objFSO = nothing

msgbox "Listo el pollo" & vbCrLf & "Pelada la gallina"

sub BorrarUsuario(cuenta)

chequeo = FindUser(cuenta, uDominio)

if chequeo <> "Not found" then

d = 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)
next
ou = lcase(mid(ou,2,len(ou)))

Set objOU = GetObject("LDAP://" & ou)
objOU.Delete "user", cuenta

textolog = "El usuario " & linea & " fue eliminado del AD." & vbCrLf
textolog = textolog & "========================================" & vbCrLf

else

textolog = "El usuario " & linea & " no fue encontrado." & vbCrLf
textolog = textolog & "========================================" & vbCrLf

end if

objStreamout.Write textolog
end sub

Function 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 cn 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.close
end function
Anuncios

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

Anuncios

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.
Anuncios
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.

Anuncios

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.

Anuncios

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.00