PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Active Directory : notification par e-mail pour l’expiration de mot de passe

jeudi 6 octobre 2022 à 16:45

I. Présentation

Dans ce tutoriel, je vous propose de mettre en place un script PowerShell qui va envoyer une notification par e-mail aux utilisateurs X jours avant l'expiration de leur mot de passe Active Directory, afin de les inviter à changer le mot de passe avant la date butoir.

Selon les environnements, et sous réserve qu'il y ait une politique de mots de passe en place (ce qui, malheureusement, n'es pas si évident que ça), l'expiration du mot de passe sur un compte utilisateur peut poser des problèmes de connexion sur des services basés sur l'authentification Active Directory. D'ailleurs, j'ai abordé cette problématique plus en détail dans mon article "Active Directory et la mise en cache des identifiants".

L'une des "solutions" consiste à notifier les utilisateurs que leur mot de passe va expirer, quelques jours avant le jour J où ils devront impérativement changer le mot de passe. C'est ce que nous allons voir aujourd'hui, en passant par PowerShell.

II. Récupérer la date d'expiration du mot de passe avec PowerShell

Au sein de l'Active Directory, et plus particulièrement des comptes utilisateurs, chaque objet dispose d'un attribut qui contient la date et l'heure d'expiration du mot de passe. Cette valeur est calculée selon la politique de mots de passe appliquée sur l'utilisateur. Voici le nom de l'attribut auquel je fais référence :

msDS-UserPasswordExpiryTimeComputed

Cette valeur est visible avec l'interface graphique, avec la console "Utilisateurs et ordinateurs Active Directory" via l'onglet "Editeur d'attributs", ou via PowerShell. Voici un exemple :

Active Directory - msDS-UserPasswordExpiryTimeComputed

La valeur de cet attribut n'est pas directement modifiable, car il s'agit d'un attribut construit dont la valeur a la particularité d'être calculée à partir d'autres attributs (pwdLastSet) et objets. Tous les détails de cet attribut sont disponibles dans la documentation de Microsoft :

Cette information est également visible avec la commande historique "net user", en précisant un nom d'utilisateur, puis en regardant le champ "Le mot de passe expire". Voici un exemple avec l'utilisateur "guy.mauve" :

net user guy.mauve /domain

Toutefois, je trouve que la valeur de l'attribut Active Directory est plus fiable que celle renvoyée par cette commande.

Avec PowerShell, on peut afficher la date d'expiration des mots de passe pour un ensemble d'utilisateurs avec cette commande :

Get-ADUser -Filter { (Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} –Properties "DisplayName", "mail", "msDS-UserPasswordExpiryTimeComputed" | 
           Select-Object -Property "Displayname","mail",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Cette commande retourne l'information pour tous les utilisateurs activés et dont le mot de passe a une date d'expiration. Voici un exemple de sortie :

Active Directory - Date expiration mots de passe

III. Expiration du mot de passe : notification par e-mail

L'e-mail est un canal de communication privilégié et efficace en entreprise, même s'il y a également d'autres solutions de communication comme Microsoft Teams. Le fait d'envoyer une notification par e-mail à l'utilisateur quelques jours avant l'expiration de son mot de passe va vous permettre de communiquer en direct avec lui, de façon automatique.

Désormais, intéressons-nous au script PowerShell, qui est disponible sur mon GitHub : vous pouvez le réutiliser en l'état ou l'adapter à votre guise. Pour utiliser ce script nommé "Send-ADPasswordExpirationNotifications.ps1", vous avez seulement besoin de modifier ces quelques variables :

# Nombre de jours avant l'expiration pour envoyer la notification
$DateThreshold = 7

# Serveur SMTP - Nom du serveur
$SMTPServer = "smtp.domaine.fr"

# Serveur SMTP - Numéro de port
$SMTPPort = 25

# Serveur SMTP - Adresse e-mail de l'expéditeur
$SMTPSender = "active-directory@domaine.fr"

# Serveur SMTP - Encodage Email
$SMTPEncoding =[System.Text.Encoding]::UTF8

# Envoyer une synthèse aux administrateurs
[boolean]$SendReportAdmin = $true

# Adresse e-mail du destinataire pour la synthèse
$SendReportAdminEmail = "rsi@domaine.fr"

Vous pouvez adapter le script pour la prise en charge du SSL et/ou des Credentials dans les commandes Send-MailMessage (pour envoyer les e-mails) selon votre environnement. Vous pouvez aussi ajouter l'option "-Cc" avec votre adresse e-mail, si vous souhaitez recevoir une copie de l'e-mail envoyé à chaque utilisateur.

Lorsque ce script tourne, il va récupérer la date d'expiration du mot de passe pour tous les utilisateurs activés et dont l'option "Le mot de passe n'expire jamais" n'est pas cochée. Ensuite :

Chaque utilisateur recevra une notification similaire à celle-ci :

Notification e-mail - Expiration mot de passe Active Directory

Le service informatique recevra une synthèse par e-mail avec la liste des utilisateurs dont le mot de passe expire bientôt. Cet e-mail est envoyé uniquement si "$SendReportAdmin = $true" donc vous pouvez activer ou non ce rapport supplémentaire.

Active Directory - Synthèse des notifications pour les admins

Le script est disponible ici :

Pour que ces notifications soient envoyées automatiquement, il convient d'exécuter ce script dans une tâche planifiée. Sur le contrôleur de domaine avec les rôles FSMO, ce sera très bien à mon sens. Quant au compte utilisé pour l'exécution de la tâche planifiée, un gMSA est conseillé.

L'action à lancer ressemblera à ceci :

powershell.exe -File "C:\Scripts\Send-ADPasswordExpirationNotifications.ps1"

Comme ceci :

Script PowerShell - Tâche planifiée

Si vous n'êtes pas très à l'aise avec cette partie de la configuration, consultez ces deux articles :

IV. Conclusion

Grâce à la mise en place de ce script, vos utilisateurs seront notifiés que leur mot de passe expire prochainement et pourront procéder à la réinitialisation de celui-ci avant l'échéance précisée dans l'e-mail.

Si vous avez des suggestions pour améliorer le script "Send-ADPasswordExpirationNotifications.ps1", n'hésitez pas à m'en faire part.

The post Active Directory : notification par e-mail pour l’expiration de mot de passe first appeared on IT-Connect.