Files
ExpirationMDP/expirationPwd.ps1

124 lines
3.3 KiB
PowerShell

########################################
# 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 ".\template.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
}
}