#Prérequis : Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All" Install-Module -Name ExchangeOnlineManagement Import-Module -Name ExchangeOnlineManagement Install-Module -Name MSOnline Import-Module -Name MSOnline ######## CONNEXION ########### Connect-ExchangeOnline -UserPrincipalName "*******@h3campus.fr" # Domaine utilisé pour les adresses email #$domain = "h3hitema.fr" $domain = "h3campus.fr" # Paramètres pour Office 365 $smtpServer = "smtp.office365.com" $smtpPort = 587 $smtpUser = "Compte_EnvoieMail@h3hitema.fr" # L'adresse email de l'expéditeur $smtpPassword = "********" # Définir les codes de couleur $red = "e[31m" $green = "e[32m" $reset = "`e[0m" # Charger les informations des étudiants à partir du fichier CSV $csvPath = "students.csv" $etudiants = Import-Csv -Path $csvPath function Normalize-String { param ( [string]$inputString ) # Remplacer les caractères accentués et non valides $normalizedString = $inputString -replace '[éèêë]', 'e' ` -replace '[àâä]', 'a' ` -replace '[ôö]', 'o' ` -replace '[ûü]', 'u' ` -replace '[ç]', 'c' ` -replace '[^a-zA-Z0-9]', '' # Supprime les caractères non alphanumériques return $normalizedString } # Fonction pour vérifier si une adresse email existe déjà dans Office 365 function Adresse-Existe { param ( [string]$email ) try { # Filtre correctement formatté avec la syntaxe de chaîne $filter = "PrimarySmtpAddress -eq '{0}'" -f $email $user = Get-Mailbox -RecipientTypeDetails UserMailbox -Filter $filter if ($user) { return $true } else { return $false } } catch { return $false } } # Fonction pour générer une adresse email unique function Generer-Email { param ( [string]$prenom, [string]$nom, [string]$domain = "h3campus.fr" ) # Normaliser les chaînes et les convertir en minuscules $prenomNormalise = (Normalize-String $prenom).ToLower() $nomNormalise = (Normalize-String $nom).ToLower() $domainLower = $domain.ToLower() $index = 1 # Générer l'email en minuscules $email = "{0}.{1}@{2}" -f $prenomNormalise.Substring(0, $index), $nomNormalise, $domainLower # Boucle tant qu'une adresse existe while (Adresse-Existe $email) { $index++ $email = "{0}.{1}@{2}" -f $prenomNormalise.Substring(0, $index), $nomNormalise, $domainLower } return $email } function Generer-MotDePasse { param ( [int]$length = 12, [int]$specialCharsCount = 2 ) # Vérification de la longueur if ($length -le $specialCharsCount) { throw "La longueur du mot de passe doit être supérieure au nombre de caractères spéciaux." } # Définir les ensembles de caractères $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' $numbers = '0123456789' $specialChars = '!@#$%^&*()-+=' # Initialiser le mot de passe $password = '' # Ajouter des lettres for ($i = 0; $i -lt ($length - $specialCharsCount - 1); $i++) { $index = Get-Random -Minimum 0 -Maximum $letters.Length $password += $letters[$index] # Prendre une lettre en utilisant l'index } # Ajouter un chiffre aléatoire $index = Get-Random -Minimum 0 -Maximum $numbers.Length $password += $numbers[$index] # Ajouter un chiffre en utilisant l'index # Ajouter les caractères spéciaux for ($i = 0; $i -lt $specialCharsCount; $i++) { $index = Get-Random -Minimum 0 -Maximum $specialChars.Length $password += $specialChars[$index] # Prendre un caractère spécial en utilisant l'index } # Mélanger les caractères $finalPassword = -join ($password.ToCharArray() | Sort-Object { Get-Random }) return $finalPassword } # Fonction pour envoyer un email avec les informations de connexion function Envoyer-Email { param ( [string]$destinataire, [string]$login, [string]$password ) # Contenu de l'email avec mise en forme HTML $subject = "Compte - $domain" $body = @"
Bonjour,
Ci-dessous vous trouverez vos informations de connexion pour accéder à votre compte Teams :
| Login | Mot de passe |
|---|---|
| $login | $password |
Un changement du mot de passe vous sera demandé à la première connexion.
Note:Vous pouvez accéder à votre boite e-mail en vous rendant sur le site: https://www.office.com
Veuillez conserver ces informations en lieu sûr.
Cordialement,
Service Informatique