diff --git a/Compte_Office.ps1 b/Compte_Office.ps1 index 5ae8823..90f5e2c 100644 --- a/Compte_Office.ps1 +++ b/Compte_Office.ps1 @@ -1,4 +1,4 @@ -#Prérequis : +# Prérequis : Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All" @@ -7,27 +7,32 @@ Import-Module -Name ExchangeOnlineManagement Install-Module -Name MSOnline Import-Module -Name MSOnline +# => Compte Administrateur du tenant du domaine. ######## CONNEXION ########### Connect-ExchangeOnline -UserPrincipalName "*******@h3campus.fr" -# Domaine utilisé pour les adresses email +# => Domaine utilisé pour les adresses email #$domain = "h3hitema.fr" $domain = "h3campus.fr" -# Paramètres pour Office 365 +# => Paramètres pour Office 365 pour l'envoie des identifiants aux étudiants $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" +# => Définition du comportement pour les comptes existants +# Valeurs possibles : "IgnorerExistants" ou "ReinitializerMotDePasse" +$ComportementComptesExistants = "IgnorerExistants" -# Charger les informations des étudiants à partir du fichier CSV +# => Charger les informations des étudiants à partir du fichier CSV $csvPath = "students.csv" $etudiants = Import-Csv -Path $csvPath +# Définir les codes de couleur +$red = "`e[31m" +$green = "`e[32m" +$reset = "`e[0m" + function Normalize-String { param ( [string]$inputString @@ -139,31 +144,174 @@ function Envoyer-Email { param ( [string]$destinataire, [string]$login, -[string]$password +[string]$password, +[bool]$isReset = $false ) -# Contenu de l'email avec mise en forme HTML -$subject = "Compte - $domain" +# Contenu de l'email avec mise en forme HTML moderne +$messageType = if ($isReset) { "Réinitialisation de votre mot de passe" } else { "Bienvenue sur votre compte $domain" } +$titre = if ($isReset) { "Réinitialisation de mot de passe" } else { "Création de compte" } +$subject = $messageType $body = @" + + + -

Bonjour,

-

Ci-dessous vous trouverez vos informations de connexion pour accéder à votre compte Teams :

- - - - - - - - - -
LoginMot de passe
$login$password
+
+
+

🔐 $titre

+
+
+

Bonjour,

+

Nous avons le plaisir de vous transmettre vos identifiants de connexion pour accéder à votre espace Microsoft 365.

-

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

+
+
+📧 Identifiant +$login +
+
+🔑 Mot de passe +$password +
+
+ +
+⚠️ Important : Pour votre sécurité, vous devrez modifier ce mot de passe lors de votre première connexion. +
+ +
+

📱 Accès à vos services :

+

• Messagerie Outlook

+

• Microsoft Teams

+

• OneDrive

+

• Office en ligne (Word, Excel, PowerPoint)

+
+ +
+🚀 Accéder à mon compte +
+ +

+Conseil de sécurité : Conservez ces informations dans un endroit sûr et ne les partagez jamais avec quiconque. +

+
+ +
"@ @@ -182,9 +330,91 @@ $mailMessage.IsBodyHtml = $true try { $smtpClient.Send($mailMessage) -Write-Host "Email envoyé avec succès à $destinataire" +Write-Host "Email envoyé avec succès à $destinataire" -ForegroundColor Green } catch { -Write-Host "Échec de l'envoi de l'email à $destinataire : $" +Write-Host "Échec de l'envoi de l'email à $destinataire : $_" -ForegroundColor Red +} +} + +# NOUVELLE FONCTION : Attribuer toutes les licences cochées +function Attribuer-Licences { +param ( +[string]$userId +) + +try { +# Récupérer toutes les licences disponibles +$allLicenses = Get-MgSubscribedSku + +# Définir les licences à attribuer +$licensesToAssign = @( +"EXCHANGESTANDARD_STUDENT", # Exchange Online (plan 1) pour les étudiants +"POWERAPPS_DEV", # Microsoft Power Apps for Developer +"STANDARDWOFFPACK_STUDENT" # Office 365 A1 pour les étudiants +) + +$licenseIds = @() + +foreach ($licenseName in $licensesToAssign) { +$license = $allLicenses | Where-Object { $_.SkuPartNumber -eq $licenseName } +if ($null -ne $license) { +$licenseIds += @{ SkuId = $license.SkuId } +Write-Host " ✓ Licence '$licenseName' trouvée" -ForegroundColor Green +} else { +Write-Host " ⚠ Licence '$licenseName' non disponible dans votre tenant" -ForegroundColor Yellow +} +} + +if ($licenseIds.Count -gt 0) { +Set-MgUserLicense -UserId $userId -AddLicenses $licenseIds -RemoveLicenses @() +Write-Host " ✓ $($licenseIds.Count) licence(s) attribuée(s) avec succès" -ForegroundColor Green +return $true +} else { +Write-Host " ✗ Aucune licence disponible à attribuer" -ForegroundColor Red +return $false +} + +} catch { +Write-Host " ✗ Erreur lors de l'attribution des licences : $_" -ForegroundColor Red +return $false +} +} + +# Réinitialiser le mot de passe d'un utilisateur existant +function Reinitialiser-MotDePasse { +param ( +[string]$email +) + +try { +$newPassword = Generer-MotDePasse + +$PasswordProfile = @{ +Password = $newPassword +ForceChangePasswordNextSignIn = $true +} + +$existingUser = Get-MgUser -Filter "UserPrincipalName eq '$email'" -ErrorAction Stop + +Update-MgUser -UserId $existingUser.Id -PasswordProfile $PasswordProfile + +Write-Host " ✓ Mot de passe réinitialisé pour $email" -ForegroundColor Green + +return @{ +Success = $true +Email = $email +Password = $newPassword +IsReset = $true +} + +} catch { +Write-Host " ✗ Erreur lors de la réinitialisation du mot de passe : $_" -ForegroundColor Red +return @{ +Success = $false +Email = $email +Password = $null +IsReset = $false +} } } @@ -221,6 +451,7 @@ Success = $true Email = $email Password = $null IsNewUser = $false +UserId = $existingUser.Id } } @@ -236,30 +467,36 @@ $newUser = New-MgUser -DisplayName "$prenom $nom" ` -UsageLocation $usageLocation if ($null -ne $newUser) { -$exchangeLicense = Get-MgSubscribedSku | Where-Object SkuPartNumber -eq 'EXCHANGESTANDARD_STUDENT' +Write-Host " ✓ Utilisateur créé avec succès" -ForegroundColor Green +Write-Host "Attribution des licences..." -ForegroundColor Yellow -if ($null -ne $exchangeLicense) { -Set-MgUserLicense -UserId $newUser.Id ` --AddLicenses @{SkuId = $exchangeLicense.SkuId} ` --RemoveLicenses @() - -Write-Host "Licence Exchange Online for Students attribuée à $email" -ForegroundColor Green +# Attribuer toutes les licences +$licenseSuccess = Attribuer-Licences -userId $newUser.Id +if ($licenseSuccess) { return @{ Success = $true Email = $email Password = $password IsNewUser = $true +UserId = $newUser.Id } } else { -Write-Host "Erreur : Licence Exchange Online for Students non trouvée" -ForegroundColor Red +Write-Host " ⚠ Utilisateur créé mais erreur lors de l'attribution des licences" -ForegroundColor Yellow +return @{ +Success = $true +Email = $email +Password = $password +IsNewUser = $true +UserId = $newUser.Id +} } } else { -Write-Host "Erreur : L'utilisateur $email n'a pas pu être créé." -ForegroundColor Red +Write-Host " ✗ Erreur : L'utilisateur $email n'a pas pu être créé." -ForegroundColor Red } } catch { -Write-Host "Erreur lors de la création de l'utilisateur : $_" -ForegroundColor Red +Write-Host " ✗ Erreur lors de la création de l'utilisateur : $_" -ForegroundColor Red } return @{ @@ -267,43 +504,67 @@ Success = $false Email = $email Password = $null IsNewUser = $false +UserId = $null } } -# Parcourir chaque étudiant dans le fichier CSV et traiter + +# BOUCLE PRINCIPALE MODIFIÉE foreach ($etudiant in $etudiants) { - $prenom = $etudiant.Prenom - $nom = $etudiant.Nom +$prenom = $etudiant.Prenom +$nom = $etudiant.Nom - Write-Host "Traitement de l'étudiant : $prenom $nom" -ForegroundColor Cyan +Write-Host "`n========================================" -ForegroundColor Cyan +Write-Host "Traitement de l'étudiant : $prenom $nom" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan - # Normaliser les chaînes et les convertir en minuscules - $prenomuser = (Normalize-String $prenom).ToLower() - $nomuser = (Normalize-String $nom).ToLower() - $domainuser = $domain.ToLower() +# Normaliser les chaînes et les convertir en minuscules +$prenomuser = (Normalize-String $prenom).ToLower() +$nomuser = (Normalize-String $nom).ToLower() +$domainuser = $domain.ToLower() - $Usermail = "$($prenomuser.substring(0,1)).$($nomuser)@$($domainuser)" - $AddressExist = Adresse-Existe $Usermail +$Usermail = "$($prenomuser.substring(0,1)).$($nomuser)@$($domainuser)" +$AddressExist = Adresse-Existe $Usermail - if ($AddressExist) { - Write-Host "Adresse mail $Usermail existante !" -ForegroundColor Blue - } else { - Write-Host "Création d'un nouvel utilisateur avec l'adresse $Usermail" -ForegroundColor Yellow +if ($AddressExist) { +Write-Host "Adresse mail $Usermail existante !" -ForegroundColor Blue - # Créer l'utilisateur dans Office 365 - $result = Creer-Utilisateur -prenom $prenom -nom $nom -email $Usermail -domain $domainuser +# Appliquer le comportement défini pour les comptes existants +if ($ComportementComptesExistants -eq "ReinitializerMotDePasse") { +Write-Host "Réinitialisation du mot de passe en cours..." -ForegroundColor Yellow +$resetResult = Reinitialiser-MotDePasse -email $Usermail - # Vérifier si l'adresse a bien été créée - if ($result.Success) { - # Envoyer un email avec les informations de connexion - $messageEnvoi = Envoyer-Email -destinataire $etudiant.Email -login $result.Email -password $result.Password - Write-Host "E-mail envoyé à $($etudiant.Email) pour le compte $($result.Email)" -ForegroundColor Green - Write-Host $messageEnvoi -ForegroundColor Green - } else { - Write-Host "Erreur : Le compte $($result.Email) n'a pas été créé. Aucun e-mail envoyé." -ForegroundColor Red - } +if ($resetResult.Success) { +# Envoyer un email avec le nouveau mot de passe +Envoyer-Email -destinataire $etudiant.Email -login $resetResult.Email -password $resetResult.Password -isReset $true +Write-Host "E-mail de réinitialisation envoyé à $($etudiant.Email)" -ForegroundColor Green +} else { +Write-Host "Échec de la réinitialisation du mot de passe pour $Usermail" -ForegroundColor Red +} +} else { +Write-Host "Compte existant ignoré (aucune action effectuée)" -ForegroundColor Gray +} + +} else { +Write-Host "Création d'un nouvel utilisateur avec l'adresse $Usermail" -ForegroundColor Yellow + +# Créer l'utilisateur dans Office 365 +$result = Creer-Utilisateur -prenom $prenom -nom $nom -email $Usermail -domain $domainuser + +# Vérifier si l'adresse a bien été créée +if ($result.Success) { +# Envoyer un email avec les informations de connexion +Envoyer-Email -destinataire $etudiant.Email -login $result.Email -password $result.Password +Write-Host "E-mail envoyé à $($etudiant.Email) pour le compte $($result.Email)" -ForegroundColor Green +} else { +Write-Host "Erreur : Le compte $($result.Email) n'a pas été créé. Aucun e-mail envoyé." -ForegroundColor Red +} } # Faire une pause de 10 secondes -Write-Host "Pause de 10 secondes avant le traitement du prochain étudiant..." -ForegroundColor Gray +Write-Host "`nPause de 10 secondes avant le traitement du prochain étudiant..." -ForegroundColor Gray Start-Sleep -Seconds 10 -} \ No newline at end of file +} + +Write-Host "`n========================================" -ForegroundColor Green +Write-Host "Traitement terminé pour tous les étudiants" -ForegroundColor Green +Write-Host "========================================" -ForegroundColor Green \ No newline at end of file