Script Powershell maj password + mail

Classé dans : Programmation | 0

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")
    }
}