Voici un script Powershell qui permet de recherche dans l’annuaire Active Directory un utilisateur, de récupérer son adresse mail dans un attribut spécifique, de modifier son mot de passe et lui envoyer par mail. Le compte est également déverrouillé.
Cela permet entre autre pour les services support de ne pas connaitre le mot de passe affecté, ce qui en terme de RGPD est mieux…
Nb : Pour l’envoi du mail le script se connecte sur Office365, il faut donc un compte Office365 pour pouvoir envoyer le mail.
# Script PS pour modifier mot de passe et envoyer d'un mail avec un nouveau mdp # le compte est également déverrouillé. # Version : 1.0 / 01/2023 # fonctionnement # 1 recherche fiche user dans l'ad (Samaccountname) # 2 recherche mail dans extensionAttribute1 # 3 génération d'un nouveau mot de passe # 4 envoye du nouveau pass par mail # 5 mise à jour log avec 'DATE-Heure: Modif mot de passe pour nom (ID) # utilisation : setNewPassStudent.ps1 ID_USER cls # fonction pour ecrire un log de suivi function writeLog { Param ([string]$LogString) $Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") $LogMessage = "$Stamp - $LogString" Add-content $logFile -value $LogMessage } ## ID du compte a modifier $ID=$args[0] ## Params $passLen = 10 $DateHeure = Get-Date -Format "yyyy-MM-dd_HH-mm" $logFile = "c:\temp\setNewPass.txt" ## adresse mail du compte office365 utilisé pour l'envoi du mail $from = "ADRESSE_MAIL_EXPEDITEUR" $mailObjet = "Modification mot de passe de votre compte" ## création d'un mot de passe avec 10 chr $letters = "ABCDEFGHKLMNOPRSTUVWXYZabcdefghi$%/()=?}!klmnoprs{@#*+tuvwxyz0123456789".tochararray() $newPass = ($letters | Get-Random -count $passLen) -join '' $mailBody = "Voici votre nouveau mot de passe : $newPass Vous pouvez le modifier si vous le souhaitez, en vous connectant sur https://outlook.office.com/mail/" Write-Host "Recherche compte AD $ID" # Vérification que le compte existe $ok = 1 try { $verification = Get-ADUser -Identity $ID -ErrorAction SilentlyContinue } catch { writeLog("Compte AD $ID non trouvé") write-host "Erreur compte $ID non trouvé" $ok=0 } if ($ok -eq 1) { $user = Get-ADUser -Identity $ID -ErrorAction SilentlyContinue –properties Name,Givenname,Samaccountname,mail,extensionAttribute1 write-host "Compte $ID trouvé : "$user.Name write-host "Recherche mail" if ( $user.extensionAttribute1 -ne $null ) { write-host "Adresse mail trouvée "$user.extensionAttribute1 Set-ADAccountPassword $ID -NewPassword (ConvertTo-SecureString $newPass -AsPlainText -Force) write-host "Mot de passe modifié" ## envoi du mail $mycredentials = Get-Credential $mail = $user.extensionAttribute1 Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSsl -From $from -To $mail -Subject $mailObjet -Body $mailBody -Credential $mycredentials write-host "Mail envoyé à $mail" writeLog("Mot de passe modifié pour $ID, mail envoyé à $mail") ## deverrouillage du compte Unlock-ADAccount -identity $ID writeLog("Compte AD $ID deverrouillé") } else { write-host "Email manquant (dans extensionAttribute1), envoie mot de passe par mail impossible" writeLog("Email manquand dans extensionAttribute1 pour $ID, changement de mot de passe impossible") } }