La politique de mots de passe d’Active Directory (AD) impose une durée de vie maximale aux mots de passe utilisateur. Une fois cette durée atteinte, le mot de passe est marqué comme expiré et l’utilisateur devra le modifier lors de sa prochaine connexion. C’est plutôt contraignant, surtout pour les utilisateurs connectés via VPN ou RDS qui ne peuvent pas réinitialiser leur mot de passe directement. Heureusement, il existe une solution pour prolonger cette durée de validité sans activer l’option « Le mot de passe n’expire jamais », ce qui permet de respecter les politiques de sécurité tout en offrant une plus grande flexibilité.
L’utilisation de PowerShell est ici la solution idéale. Ce logiciel permet de vérifier la date d’expiration des mots de passe et de la modifier si nécessaire. Ainsi, les utilisateurs ne seront pas bloqués inopinément ni contraints de réinitialiser leurs mots de passe en masse inutilement.
Comment résoudre le problème d’expiration des mots de passe dans Active Directory
Vérifiez la date d’expiration actuelle du mot de passe
La première étape consiste à savoir quand un mot de passe est sur le point d’expirer ou a déjà expiré. Cette commande récupère les informations relatives à la dernière date de modification du mot de passe d’un utilisateur, à sa date d’expiration et à son statut (expiré ou non).
Get-ADUser -Identity e.herrmann -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, PasswordNeverExpires, PasswordExpired | Select-Object -Property Name, PasswordLastSet, PasswordNeverExpires, PasswordExpired, @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
Ainsi, en un coup d’œil, vous pouvez voir si un mot de passe a expiré PasswordExpired=Trueou s’il est toujours valide. L’élément clé est msDS-UserPasswordExpiryTimeComputed : c’est lui qui nous indique la date d’expiration, en fonction de la politique de mots de passe.
Consultez la date de dernière modification du mot de passe.
Cette commande vérifie la date de dernière modification du mot de passe, ce qui influe sur le calcul de la date d’expiration. Utilisez-la :
Get-ADUser e.herrmann -Properties pwdLastSet | select SamAccountName, @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}
Notez que pwdLastSet stocke la date au format Windows FileTime (millisecondes écoulées depuis 1601).Elle peut également être égale à 0 si le mot de passe n’a jamais été défini, ou à -1 s’il a été réinitialisé. Car, bien sûr, Windows a la fâcheuse habitude de compliquer les choses.
Modifier le mot de passe (dernière date définie)
Pour prolonger ou réinitialiser la date d’expiration de votre mot de passe, modifiez la valeur de pwdLastSet. Attribuez-lui la valeur 0 pour réinitialiser la date de dernière modification (mot de passe jamais défini) ou la valeur -1 pour actualiser le compte à rebours jusqu’à aujourd’hui. Voici comment procéder :
Set-ADUser e.herrmann -Replace @{pwdLastSet='0'} # resets password date Set-ADUser e.herrmann -Replace @{pwdLastSet='-1'} # resets to current time
Dans certaines configurations, effectuer les deux opérations successivement peut permettre de prolonger la date d’expiration ou de corriger les comptes expirés. Je ne sais pas exactement pourquoi cela fonctionne, mais sur un domaine, il a fallu plusieurs tentatives, et sur un autre, un simple redémarrage a suffi.
Vérifiez les modifications et confirmez l’expiration
Ensuite, relancez la vérification précédente pour confirmer que la date d’expiration a bien été modifiée ou que le mot de passe n’est plus marqué comme expiré. Cela s’avère particulièrement utile si un utilisateur est bloqué suite à l’expiration inattendue de son mot de passe. Testez quelques commandes jusqu’à ce que tout soit correct.
Autre point important : il n’est pas possible de définir directement une date d’expiration personnalisée dans Active Directory ; le système la calcule en fonction de la dernière date de définition du mot de passe et de la politique de mots de passe. Modifier la valeur de pwdLastSet est donc la meilleure solution possible.
Cette astuce est particulièrement pratique lorsque vous vous apprêtez à appliquer une nouvelle politique sans interrompre l’activité de tous les utilisateurs simultanément. C’est comme leur accorder une prolongation, en quelque sorte, sans pour autant désactiver complètement la politique.
Résumé
- Vérifiez l’expiration du mot de passe avec Get-ADUser.
- Utilisez-
msDS-UserPasswordExpiryTimeComputedle pour voir la date d’expiration. - Vérifiez la dernière modification du mot de passe avec
pwdLastSet. - Ajustez la dernière date définie
Set-ADUseret effectuez des modificationspwdLastSetpour prolonger la durée d’expiration. - N’oubliez pas que vous ne pouvez pas définir une date d’expiration fixe, seulement modifier la date de dernière modification.
Conclure
En espérant que cela permette d’éviter les réinitialisations de mot de passe inutiles et les mauvaises surprises. C’est un peu une solution de contournement, mais elle est étonnamment efficace, surtout lorsque les utilisateurs sont pris au dépourvu par les notifications d’expiration. Attention toutefois à ne pas modifier les attributs Active Directory : vérifiez toujours après chaque modification. Espérons que cela épargnera bien des soucis à certains.