Alerter les utilisateurs dont le mot de passe va expirer avec PowerShell

Salut à tous

Objectifs du script :
Alerter les utilisateurs dont le mot de passe va expirer dans moins de 3 jours.

Comment fonctionne le script :
Ce script est basé sur le module PowerShell Quest ActiveRoles Management Shell.
Il compare la date d’aujourd’hui avec la date d’expiration du mot de passe (attribut passwordexpires).
Si le mot de passe expire dans 1, 2 ou 3 jours il envoie un mail.
Il est à noter que l’attribut Passwordexpires n’existe pas dans l’annuaire Active Directory. C’est le plugin Quest qui le calcule cette valeur à partir de l’attribut pwdLastSet.

Code du script :
Créer le fichier C:\_adm\expiration-compteV2.ps1 et copier le contenu ci dessous dans ce fichier.
# Variables
# Changer l’adresse email de l’expéditeur
$MSender = expediteur@votredomainedemessagerie.fr
# Changer l’adresse IP du serveur de messagerie
$MServer = “192.168.0.1”
# Indiquer le chemin LDAP de votre annuaire
$Ldappath = “OU=Utilisateurs,DC=msreport,DC=intra”

# Fonction pour générer le mail
function Send-SMTPmail($to, $from, $subject, $body, $attachment, $cc, $bcc, $port, $timeout, $smtpserver, [switch] $html, [switch] $alert)
{
    if ($smtpserver -eq $null) {$smtpserver = $MServer}
    $mailer = new-object Net.Mail.SMTPclient($smtpserver)
    if ($port -ne $null) {$mailer.port = $port}
    if ($timeout -ne $null) {$mailer.timeout = $timeout}
    $msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
    if ($html) {$msg.IsBodyHTML = $true}
    if ($cc -ne $null) {$msg.cc.add($cc)}
    if ($bcc -ne $null) {$msg.bcc.add($bcc)}
    if ($alert) {$msg.Headers.Add(“message-id”, “<3bd50098e401463aa228377848493927-1>”)}
    if ($attachment -ne $null)
    {
        $attachment = new-object Net.Mail.Attachment($attachment)
        $msg.attachments.add($attachment)
    }
    $mailer.send($msg)

# Programme principal
# Chargement du module PowerShell Quest
add-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue
$Today = get-date -format d
$users = Get-QADUser -enable -SizeLimit 0 -Searchroot $Ldappath | where-object {$_.PasswordNeverExpires -eq $false} | Select-Object name,mail,passwordexpires,samaccountname
foreach ($user in $users)
{
     if ($user.’passwordexpires’)
     {
        $usrmail = $user.mail
        $usrname = $user.name
        $usrlogin = $User.sAMAccountName
        $ExpiredDate = ($user.’passwordexpires’).adddays(-3)
        $today = (get-date).date
        #$today = (get-date -date 22/08/2012).date.adddays(-3)
        $difference = $ExpiredDate – $today
        if ($difference.Days -eq 3)
        {
               $MSubject = “Votre mot de passe va expirer dans 3 jours.”
               $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans trois jours.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
               Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
            elseif ($difference.Days -eq 2)
            {
               $MSubject = “Votre mot de passe va expirer dans 2 jours.”
               $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans deux jours.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
               Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
            elseif ($difference.Days -eq 1)
            {
                $MSubject = “Votre mot de passe va expirer dans 1 jour.”
                $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans un jour.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
                Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
     }
}

Pour planifier l’exécution du script :
Créer un fichier script.bat et coller le contenu suivant dans ce fichier :
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile “C:\Program Files\Quest Software\Management Shell for AD\ConsoleSettings.psc1” -command C:\_adm\expiration-compteV2.ps1
Utiliser le planificateur de tâche Windows pour exécuter l’outil une fois par jour à l’heure souhaitée.

A+
Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage.

A propos Guillaume Mathieu

Directeur Technique chez Flexsi
Ce contenu a été publié dans Active Directory, ActiveRoles for Server, Annuaire, Outils, PowerShell, Scripts, Windows 2003 Server, Windows Server 2008, Windows Server 2008 R2. Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à Alerter les utilisateurs dont le mot de passe va expirer avec PowerShell

  1. Deedrah dit :

    Bonjour ,

    Merci pour cet excellent tuto,
    J’aimerai juste savoir où télécharger le plugin Quest qui doit être installé sur mon contrôleur AD ? > C:\Program Files\Quest Software\Management Shell for AD\

    Cdt,

Laisser un commentaire