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:_admexpiration-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%system32WindowsPowerShellv1.0powershell.exe -psconsolefile “C:Program FilesQuest SoftwareManagement Shell for ADConsoleSettings.psc1” -command C:_admexpiration-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
Architecte Metsys
La connaissance s’accroît quand on la partage.

About the Author

Guillaume MATHIEU

No Comments

Laisser un commentaire

This blog is kept spam free by WP-SpamFree.