Sommaire
ToggleObjectifs 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 :
<em># Variables
# Changer l’adresse email de l’expéditeur
</em>$MSender = [email protected]
<em># Changer l’adresse IP du serveur de messagerie
</em>$MServer = "192.168.0.1"
<em># Indiquer le chemin LDAP de votre annuaire</em>
$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.