Cambiar contraseñas periódicamente a varios usuarios

Un usuario me preguntaba si era posible automatizarlo. Esta es la respuesta que le dí:


Esto lo puedes hacer mediante un script .vbs que ejecutarás en el servidor.
Lo puedes poner en el escritorio, editarlo para cambiar la password y
ejecutarlo.  La complejidad de la clave debe coincidir con la que tengas
establecida en la GPO del dominio, donde además tendrás que establecer la
frecuencia mínima del cambio de contraseña a 1 día (deberás probarlo, pues
quizá tengas que reducirlo a 0 para que te permita el cambio todos los días
a la misma hora, ya que si lo ejecutas de forma manual es posible que no
hayan transcurrido 24 horas exactas desde el cambio del día anterior).
El script sería similar al siguiente:

Set clave = “LaContraseña99!#”
Set objUser = GetObject _
(“LDAP://cn=usuario1,ou=visitantes,dc=dominio,dc=local“)
objUser.SetPassword clave
Set objUser = GetObject _
(“LDAP://cn=usuario2,ou=visitantes,dc=dominio,dc=local“)
objUser.SetPassword clave

y así. Esto si les quieres poner la misma clave a todos. Por supuesto, si
son muchos el código se puede hacer más elegante, con un bucle que lea los
nombres de usuarios de la OU y les vaya cambiando las claves.
Si en vez de que tengan todos la misma las quieres diferentes, en lugar de
especificarla al principio les pones en cada línea la que quieras.

Y si lo quieres automatizar, podrías crear un fichero de texto con las
claves de todo el mes en el que cada línea tenga el día del mes y las claves
correspondientes a los usuarios, separadas por comas. Al principio del script haces una
lectura del fichero en la que busques la línea cuyo primer campo coincida
con el día del mes en que estás, y el segundo campo sería la contraseña a
establecer a los usuarios. De esta forma puedes programar la ejecución del
.vbs todos los días a primera hora y sólo tendrás que actualizar una vez al
mes el fichero de contraseñas. Quedaría algo así como lo siguiente:

Const ForReading = 1
strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from Win32_LocalTime”)
For Each objItem in colItems
    hoy = objItem.Day
Next

Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objTextFile = objFSO.OpenTextFile _
(“c:\scripts\passwords.txt”, ForReading)
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
arrClaves = Split(strNextLine , “,”)
If arrClaves(0) = hoy then
    clave1 = arrClaves(1)
    clave2 = arrClaves(2)
    clave3 = arrClaves(3)
    clave4 = arrClaves(4)
End If
Next
Loop
Set objUser = GetObject _
(“LDAP://cn=usuario1,ou=visitantes,dc=dominio,dc=local“)
objUser.SetPassword clave1
Set objUser = GetObject _
(“LDAP://cn=usuario2,ou=visitantes,dc=dominio,dc=local“)
objUser.SetPassword clave2

Leave a Reply

Your email address will not be published. Required fields are marked *