![Calendario de caducidad de la contraseña en un momento específico](https://rvso.com/image/1264383/Calendario%20de%20caducidad%20de%20la%20contrase%C3%B1a%20en%20un%20momento%20espec%C3%ADfico.png)
¿Hay alguna manera en Windows Server 2003 o 2008 y en Active Directory de especificar en una política que cuando la contraseña de un usuario caduque ese día, caduque a una hora determinada, digamos a las 4:00 a. m.?
El problema surgió porque el vencimiento se produce a mitad de la jornada laboral, digamos a las 9:00 a. m. Luego, cuando un usuario ya ha iniciado sesión en Windows en la red y utiliza diferentes aplicaciones, estas comenzarán a comportarse incorrectamente debido a la autenticación. Deben cerrar sesión y volver a iniciarla para que Windows solicite la nueva contraseña.
Por lo tanto, si cuando inician sesión temprano en la mañana se les solicita la nueva contraseña, no tendrán que volver a cerrar sesión durante el día laboral.
Uno de los administradores de AD dijo: "Pídales que verifiquen si su contraseña caducará antes de comenzar el día"... pero en realidad, ¿quién hace eso?
Y no tengo acceso a un AD para verificar este tipo de políticas. Entonces, ¿es esto posible?
Respuesta1
AFAIK esto no es posible.
Hay múltiples notificaciones de recordatorio que pueden ocurrir indicando que la contraseña actual caducará en N días y ofreciendo la opción de cambiarla. Si el usuario opta por ignorar este recordatorio, lamentablemente está cavando su propia tumba.
Respuesta2
Tenemos un problema similar.
La única forma que se me ocurre es ejecutar un script todas las noches que revisará el directorio activo e identificará qué cuenta caducará al día siguiente. Si es así, márquelo para cambiar la contraseña. El código sería similar al siguiente; No he intentado ejecutar este script, por lo que es posible que necesite algunos ajustes:
Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const ADS_SCOPE_SUBTREE = 1000
dim strname
dim strdist
dim dtmvalue
on error resume next
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName, profilepath, name from 'LDAP://dc=Example,dc=com' where objectCategory = 'User'"
Set objuserRecordSet = objCommand.Execute
objUSerRecordSet.MoveFirst
Do Until objuserRecordSet.EOF
strdist = objuserRecordSet.Fields("distinguishedName").Value
strname = objuserRecordSet.Fields("name").Value
Set objUserLDAP = GetObject _
("LDAP://" & strdist)
intCurrentValue = objUserLDAP.Get("userAccountControl")
dtmValue = objUserLDAP.PasswordLastChanged
If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
x = "The password does not expire."
Else
Set objDomainNT = GetObject("WinNT://escc.gov.uk")
intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
If intMaxPwdAge < 0 Then
x = "Password does not expire"
Else
intMaxPwdAge=intMaxPwdAge/86400
strold = ((dtmValue + intMaxPwdAge)-now)
if strold < 2 and strold > 0 then
objUserLDAP.pwdLastSet = 0
objUserLDAP.SetInfo
end if
end if
End If
dtmValue= ""
objuserrecordset.movenext
Loop