######################################## # AUTEUR : Morgan JUBAULT # DATE : 19/08/2024 # VERSION : 1.0 # # TITRE : Expiration pwd ######################################## ##### VARIABLES MODIFIABLES ##### # INFO : Dans cette section, vous pouvez modifier les variables qui y sont présentes, # à votre guise. # # $users : Ciblage des utilisateurs concernés $users = Get-ADUser -Filter * -Properties * -SearchBase "OU=Utilisateurs,OU=Labo,DC=ad,DC=lab" ## PARAMETRAGES DATES # $dateThreshold : Durée maximale d'un mot de passe (en jours) $dateThreshold = 30 # $dateAlert : Commencer à envoyer des mails x jours avant la date d'expiration $dateAlert = 29 ## PARAMETRES NOTIFICATIONS E-MAIL # Encodage utilisé $SMTPEncoding = [System.Text.Encoding]::UTF8 $SMTPUser = "" $SMTPPassword = "" $SMTPServer = "" $SMTPPort = 587 $SMTPFromName = "Service informatique" $SMTPFromAddress = "informatique@example.com" ################################# ########################################## # NE PAS MODIFIER A PARTIR DE CETTE ZONE # ########################################## ### FONCTIONS function sendMail (){ Param ( [Parameter(Mandatory=$true, Position=0)] $Utilisateur, [Parameter(Mandatory=$true, Position=1)] [DateTime]$DateExpiration ) $SMTPFrom = New-Object -TypeName System.Net.Mail.MailAddress($SMTPFromAddress, $SMTPFromName) $SMTPCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SMTPUser, $(ConvertTo-SecureString $SMTPPassword -Force -AsPlainText) $mailContent = Get-Content -Path ".\email.html" -Raw $mailContent = $mailContent.Replace("{userUPN}",$Utilisateur.UserPrincipalName) $mailContent = $mailContent.Replace("{userGivenName}",$Utilisateur.GivenName) $mailContent = $mailContent.Replace("{expirationDate}","$($DateExpiration.ToLongDateString()) à $($DateExpiration.ToShortTimeString())") Send-MailMessage -Verbose ` -From $SMTPFrom ` -SmtpServer $SMTPServer ` -Port $SMTPPort ` -UseSsl ` -Credential $SMTPCredentials ` -Encoding $SMTPEncoding ` -To $Utilisateur.EmailAddress ` -Subject "Votre mot de passe doit être changé" ` -Body $mailContent ` -BodyAsHtml ` -Priority High } ############ DEBUT DU SCRIPT ############# # NE PAS MODIFIER A PARTIR DE CETTE ZONE # ########################################## Clear-Host Write-Host "-----------------------------------------------" # Pour chaque utilisateur foreach ($user in $users){ # Calcul de la date d'expiration du mot de passe $expirationDate = $user.PasswordLastSet.AddDays($dateThreshold) # Récupération de la date actuelle $currentDate = (Get-Date) # Calcul de la différence temporelle entre la date d'expiration et la date actuelle $diff = $expirationDate - $currentDate # Si le mot de passe expire prochainement, selon les paramètres définis if($diff.Days -le $dateAlert){ sendMail -Utilisateur $user -DateExpiration $expirationDate } }