Résolu Script envoi de mail MDP expiré

Plus d'informations
il y a 10 mois 3 semaines - il y a 10 mois 2 semaines #33876 par Sébastien
Bonjour à tous,
Je souhaite envoyer un mail quand le mot de passe d'un utilisateur AD va arriver à expiration.
J'ai trouvé mon bonheur sur le site de Metsys blog.metsys.fr/comment-ameliorer-la-comm...eur-avec-powershell/ . Après 2/3 modif pour me baser sur une OU au lieu d'un groupe et retirer la condition du format de l'adresse mail celui-ci fonctionne bien.
Sauf que chez nous, nous avons du FR et UK. Un seul mail avec les 2 langues ne convenait pas. J'ai ajouté l'attribut "preferredLanguage" qui est vide en FR et "en-GB" pour nos comptes Anglais.
Ensuite pour l'envoi de mail j'ai copié/collé la partie FR pour appeler un autre fichier html pour le mail en UK et ajouté preferredLanguage (Cela commence à la ligne 105) ne tenez pas compte du nombre de jour c'est pour mes tests.
Mais problème, le script fonctionne bien au point de vu de la langue si je change la langue de mon compte de test on voit bien les log FR ou UK, par contre aucun mail ne part.
Je n'arrive pas trop à voir ce qu'il ne va pas.
Quand je regarde la différence sur la console de sortie on vois que la cible est vide.

Je pense que quelque chose ne va pas au niveau des elseif et if de la ligne 105.
Merci de votre aide.
############################################################################
#
# Objet : Script de notification d'expiration de PWD par mail automatique
# Auteur : Hervé CZUBAK
# version : 1.0
#
#############################################################################

# Definition des variables
#le paramètre sendmail attend une réponse de type YES ou NO. Sert surtout pour les environnements d’automatisation de recette/prod comme un whatif#
param (
         [Parameter(Mandatory)]
         [Alias("MAIL")]
         [string]$sendmail
)

#Module AD
import-module ActiveDirectory
#ScriptRoot
$RootFolder = Split-Path -Path $MyInvocation.MyCommand.Path
#Serveur SMTP
$SMTPhost = "192.168.X.X"
#port
$port = "25"
#Expediteur du mail
$FromEmail = "noreply@mondomaine.com"
#Email Sujet
$SubjectMail = "Attention, expiration mot de passe"
#Corps du mail en HTML
$encoding = [System.Text.Encoding]::UTF8

# Definition Fonction Mail
###La fonction suivante va servir pour appeler la commande d’envoi de mail

Function Mail {
[CmdletBinding(SupportsShouldProcess)]
param (
[Parameter(Mandatory)]
[string]$Usermail,
[string]$Body

)
###ici on rajoute une fonction de whatif à la commande send-mailmessage###
if ($PSCmdlet.ShouldProcess($name)) {
$encoding = [System.Text.Encoding]::UTF8
Send-MailMessage -Encoding $encoding -smtpserver $SMTPhost -Port $port -To $Usermail -Subject $SubjectMail -From $FromEmail  -Body $Body -BodyAsHtml

} else {}
}

#Création du dossier et fichier de log
# Chemin du dossier à vérifier
$dossier = "C:\Script\Expiration-MDP"

# Vérifier si le dossier existe
if (Test-Path $dossier -PathType Container) {
    Write-Host "Le dossier existe déjà."
} else {
    # Créer le dossier s'il n'existe pas
    New-Item -Path $dossier -ItemType Directory
    Write-Host "Le dossier a été créé avec succès."
}   

if ($sendmail -eq 'no')
{
 start-transcript -path "C:\Script\Expiration-MDP\MDP-Expire.rtf"
# Obtention des utilisateurs dont la stratégie de mot de passe est appliqué (pas de récursivité de groupe > Une boucle par groupe)

foreach ($user in $(Get-ADUser -Filter * -SearchBase "OU=Users,OU=ENTREPRISE,DC=mondomaine,DC=com" | where objectClass -eq 'user').SamAccountName)

{

           $ADUser=Get-ADUser "$user" -Properties msDS-UserPasswordExpiryTimeComputed, mail, givenName, userPrincipalName, PasswordNeverExpires, pwdLastSet, AccountExpirationDate, preferredLanguage

$error.clear()
try {
$ExpDate=[DateTime]::FromFileTime($ADUser.'msDS-UserPasswordExpiryTimeComputed')
$DiffDays=$(New-TimeSpan -Start $(Get-Date) -End $($ExpDate)).Days
 }

catch { "Erreur variable de temps pour $user - Valeur Non traduisible - PWD n'expire pas" }
if (!$error) { }

        if ($ADUser.Enabled -eq $false){
        Write-Host "Le compte utilisateur $user est désactivé"
        }

        elseif ($ADUser.AccountExpirationDate -NE $null -AND $ADUser.accountExpiratioNDate -lt (Get-Date)){
        Write-Host "Le compte utilisateur $user est arrivé à expiration"
        }

        elseif ($ADUser.PasswordNeverExpires)
        {
        write-host "Le mot de passe de $user est configuré sur 'n'expire jamais' pas d'envoi de mail'"
        }

        elseif ($ADUser.pwdLastSet -eq 0){
        Write-Host "Le mot de passe de $user doit être changé à la prochaine connexion"
        }

        elseif ($ADUser.mail -eq $null) {
        Write-Host "L'utilisateur $user n'a pas d'adresse e-mail"
        }

            elseif ($DiffDays -eq 85) { #Si égal à 15 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
            }

            elseif ($DiffDays -eq 10) { #Si égal à 10 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-10 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
            }

        elseif ( $DiffDays -lt 5 ) { #Si moins de 5 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-10 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
             }

        else {write-host "Pas de mail de rappel pour $user"}
       }
       Stop-Transcript
}

else{
if ($sendmail -eq 'yes')
{
start-transcript -path "C:\Script\Expiration-MDP\MDP-Expire.rtf"
# Obtention des utilisateurs dont la stratégie de mot de passe est appliqué (pas de récursivité de groupe > Une boucle par groupe) / Si groupe différent, recopier la boucle.
foreach ($user in $(Get-ADUser -Filter * -SearchBase "OU=Users,OU=ENTREPRISE,DC=mondomaine,DC=com" | where objectClass -eq 'user').SamAccountName)
{
           $ADUser=Get-ADUser "$user" -Properties msDS-UserPasswordExpiryTimeComputed, mail, givenName, userPrincipalName, PasswordNeverExpires, pwdLastSet, AccountExpirationDate, preferredLanguage

$error.clear()
try {

$ExpDate=[DateTime]::FromFileTime($ADUser.'msDS-UserPasswordExpiryTimeComputed')
$DiffDays=$(New-TimeSpan -Start $(Get-Date) -End $($ExpDate)).Days
 }

catch { "Erreur variable de temps pour $user - Valeur Non traduisible - PWD n'expire pas" }
if (!$error) { }

        if ($ADUser.Enabled -eq $false){
        Write-Host "Le compte utilisateur $user est désactivé"
        }

        elseif ($ADUser.AccountExpirationDate -NE $null -AND $ADUser.accountExpiratioNDate -lt (Get-Date)){
        Write-Host "Le compte utilisateur $user est arrivé à expiration"
        }

        elseif ($ADUser.PasswordNeverExpires)
        {
        write-host "Le mot de passe de $user est configuré sur 'n'expire jamais' pas d'envoi de mail'"

        }

        elseif ($ADUser.pwdLastSet -eq 0){
        Write-Host "Le mot de passe de $user doit être changé à la prochaine connexion"
        }

        elseif ($ADUser.mail -eq $null) {
        Write-Host "L'utilisateur $user n'a pas d'adresse e-mail"
        }
            elseif ($DiffDays -eq 64) { #Si égal à 15 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
            }

            elseif ($DiffDays -eq 10) { #Si égal à 10 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-10 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
            }

        elseif ( $DiffDays -lt 5 ) { #Si moins de 5 jours
                if ($ADUser.preferredLanguage -eq "en-GB") {
                    $html = Get-Content -Path "$RootFolder\template-UK.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-15 Envoi du mail de rappel (en-GB) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                } elseif ($ADUser.preferredLanguage -eq $null) {
                    $html = Get-Content -Path "$RootFolder\template-FR.html" -Raw
                    $html = $html.Replace("INSERT_GIVENNAME", $ADUser.givenName)
                    $html = $html.Replace("INSERT_USERPRINCIPALNAME", $ADUser.UserPrincipalName)
                    $html = $html.Replace("INSERT_PWDDATE", $DiffDays)
                    Mail -Usermail $ADUser.mail -Body $html -WhatIf
                    Write-Host "$user J-10 Envoi du mail de rappel (FR) à" $ADUser.mail "le mot de passe arrive à expiration dans" $DiffDays "jours, le" $(Get-Date($ExpDate) -Format "dd.MM.yyyy")
                }
             }

        else {write-host "Pas de mail de rappel pour $user"}
       }
       Stop-Transcript
    }
}
 
Dernière édition: il y a 10 mois 2 semaines par Sébastien.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 3 semaines #33878 par Sébastien
Réponse de Sébastien sur le sujet Script envoi de mail MDP expiré
J'ai trouvé j'ai retiré les -Whatif

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines - il y a 10 mois 2 semaines #33881 par Arnaud Petitjean
Hello,

Effectivement, il fallait retirer le -Whatif. Ce commutateur (paramètre que l'on met ou qu'on ne met pas) permet de simuler l'action sans la faire.
Celui-ci fait partie des paramètres communs de PowerShell.

Pour en savoir plus, tapes la commande :
# Cette commande nécessite que l'aide soit installée sur ta machine
Help about_CommonParameters

Si tu n'as pas mis à jour l'aide de PowerShell, voici le lien vers l'aide : learn.microsoft.com/fr-fr/powershell/mod...out_commonparameters

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Dernière édition: il y a 10 mois 2 semaines par Arnaud Petitjean. Raison: Elaboration de la réponse

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines #33884 par Sébastien
Réponse de Sébastien sur le sujet Script envoi de mail MDP expiré
Salut,
Merci pour les explications.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 2 semaines #33895 par Arnaud Petitjean
Je t'en prie ! ;-)

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.112 secondes
Propulsé par Kunena