Open sebfun opened 1 year ago
C'est possible d'avoir ton schéma complet du scripte stp ?
Bonjour Et voici
<# .SYNOPSIS Envoyer une notification par e-mail aux utilisateurs dont le mot de passe expire dans X jours
.EXAMPLE .\Send-ADPasswordExpirationNotifications.ps1
.INPUTS .OUTPUTS .NOTES NAME: Send-ADPasswordExpirationNotifications.ps1 AUTHOR: Florian Burnel EMAIL: florian.burnel@it-connect.fr VERSION HISTORY: 1.0 29/09/2022
$DateThreshold = 14
$SMTPServer = "xxxxx.mail.protection.outlook.com"
$SMTPPort = 25
$SMTPSender = xxxxxx"
$SMTPEncoding =[System.Text.Encoding]::UTF8
[boolean]$SendReportAdmin = $true
$SendReportAdminEmail = "xxxxxxx"
Function Send-MailMessageForUser{ <# .SYNOPSIS : Envoyer une notification à un utilisateur dont le mot de passe expire dans X jours (selon seuil)
Param([Parameter(Mandatory=$true)][string]$SendMailUserGivenName,
[Parameter(Mandatory=$true)][string]$SendMailUserSurname,
[Parameter(Mandatory=$true)][string]$SendMailUserEmail,
[Parameter(Mandatory=$true)][string]$SendMailUsersAMAccountName,
[Parameter(Mandatory=$true)][string]$SendMailUserPasswordExpirationDate)
# Corps de l'email pour les utilisateurs
$SendMailBody=@"
Ce message est généré automatiquement mais vous pouvez y répondre
Bonjour $SendMailUserGivenName,
Dans moins de $DateThreshold jours, le mot de passe de votre compte Windows $SendMailUserPrincipalName va expirer.
Pensez à le changer avant qu'il n'arrive à expiration (date d'expiration : $SendMailUserPasswordExpirationDate)
Si vous avez un souci, répondez à ce mail en décrivant votre problème
Cordialement,
xxxxx
"@
# Objet de l'e-mail pour les utilisateurs
$SendMailObject="$SendMailUserGivenName $SendMailUserSurname : votre mot de passe arrive à expiration !"
# Envoyer l'e-mail
Send-MailMessage -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding `
-From $SMTPSender -To $SendMailUserEmail `
-Subject $SendMailObject `
-Body $SendMailBody -BodyAsHtml -Port $SMTPPort
}
$DateToday = (Get-Date).ToFileTime()
$DateWithThreshold = (Get-Date).AddDays($DateThreshold).ToFileTime()
$UsersInfos = Get-ADUser -Filter { (Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} –Properties "DisplayName", "mail", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "GivenName", "Surname","mail", "sAMAccountName", "msDS-UserPasswordExpiryTimeComputed"
$UsersNotifList=@()
Foreach($User in $UsersInfos){
if(($User."msDS-UserPasswordExpiryTimeComputed" -lt $DateWithThreshold) -and ($User."msDS-UserPasswordExpiryTimeComputed" -gt $DateToday)){
$UserPasswordExpirationDate = [datetime]::FromFileTime($User."msDS-UserPasswordExpiryTimeComputed")
$UserObj = New-Object System.Object
$UserObj | Add-Member -Type NoteProperty -Name GivenName -Value $User.GivenName
$UserObj | Add-Member -Type NoteProperty -Name Surname -Value $User.Surname
$UserObj | Add-Member -Type NoteProperty -Name Email -Value $User.mail
$UserObj | Add-Member -Type NoteProperty -Name sAMAccountName -Value $User.sAMAccountName
$UserObj | Add-Member -Type NoteProperty -Name PasswordExpirationDate -Value ($UserPasswordExpirationDate).ToString('dd/MM/yyyy')
$UsersNotifList+=$UserObj
Send-MailMessageForUser -SendMailUserGivenName $User.GivenName -SendMailUserSurname $User.Surname -SendMailUserEmail $User.mail `
-SendMailUsersAMAccountName $User.sAMAccountName -SendMailUserPasswordExpirationDate ($UserPasswordExpirationDate).ToString('d MMMM yyyy')
}
}
if(($SendReportAdmin -eq $true) -and ($UsersNotifList.Count -ne 0)){
# Corps de l'e-mail (sous la forme d'un tableau)
$SendMailAdminBody = $UsersNotifList | ConvertTo-HTML -PreContent "Bonjour,<br><p>Voici la liste des comptes Active Directory dont le mot de passe expire dans moins de $DateThreshold jours.</p>" | Out-String | ForEach-Object{
$_ -replace "<table>","<table style='border: 1px solid;'>" `
-replace "<th>","<th style='border: 1px solid; padding: 5px; background-color:#014B83; color:#fff;'>" `
-replace "<td>","<td style='padding: 10px;'>"
}
# Envoyer l'e-mail
Send-MailMessage -Verbose -SmtpServer $SMTPServer -Encoding $SMTPEncoding `
-From $SMTPSender -To $SendReportAdminEmail `
-Subject "Synthèse - Expiration des mots de passe AD - $(Get-Date -Format dd/MM/yyyy)" `
-Body $SendMailAdminBody -BodyAsHtml -UseSsl -Port $SMTPPort
}
Super je te remercie :D
j'ai pensé peut être que cela pouvait être lié avec la balise gras ou les apostrophes dans le corps de mail
Bonjour
Dans le code si je modifie UserPrincipalName par sAMAccountName partout où cela est indiqué, le mail ne part plus Je voulais rendre plus clair l'affichage car les utilisateurs ne comprennent pas d'avoir dans le login login.nom_de_domaine.local au lieu de login Dans le code j'ai donc remplacé à ces endroits
[Parameter(Mandatory=$true)][string]$SendMailUsersAMAccountName,
$UsersInfos = Get-ADUser -Filter { (Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} –Properties "DisplayName", "mail", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "GivenName", "Surname","mail", "sAMAccountName", "msDS-UserPasswordExpiryTimeComputed"
$UserObj | Add-Member -Type NoteProperty -Name sAMAccountName -Value $User.sAMAccountName
Send-MailMessageForUser -SendMailUserGivenName $User.GivenName -SendMailUserSurname $User.Surname -SendMailUserEmail $User.mail
-SendMailUsersAMAccountName $User.sAMAccountName -SendMailUserPasswordExpirationDate ($UserPasswordExpirationDate).ToString('d MMMM yyyy')
Je précise qu'avant la modification cela fonctionne parfaitement sur Office365 Merci d'avance