124 lines
3.3 KiB
PowerShell
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
|
|
|
|
}
|
|
|
|
|
|
|
|
} |