# 🎓 Script de Création d'Utilisateurs Office 365 pour Étudiants Script PowerShell automatisé pour créer des comptes utilisateurs Microsoft 365, attribuer des licences multiples et envoyer les informations de connexion par email. ## 📋 Table des matières - [Fonctionnalités](#-fonctionnalités) - [Prérequis](#-prérequis) - [Installation](#-installation) - [Configuration](#️-configuration) - [Utilisation](#-utilisation) - [Structure du fichier CSV](#-structure-du-fichier-csv) - [Licences attribuées](#-licences-attribuées) - [Options avancées](#-options-avancées) - [Sécurité](#-sécurité) - [Dépannage](#-dépannage) - [Contribution](#-contribution) - [Licence](#-licence) ## ✨ Fonctionnalités - ✅ **Création automatique de comptes utilisateurs** dans Microsoft 365 - 📧 **Génération d'adresses email uniques** avec normalisation des caractères spéciaux - 🔐 **Génération de mots de passe sécurisés** (12 caractères minimum avec caractères spéciaux) - 🎫 **Attribution automatique de 3 licences** (Exchange, Power Apps, Office 365 A1) - 📨 **Envoi automatique d'emails** avec design moderne et responsive - 🔄 **Deux modes de gestion des comptes existants** : - Ignorer les comptes existants - Réinitialiser le mot de passe et envoyer un nouvel email - ⏸️ **Pause configurable** entre chaque création pour éviter les limitations API ## 🔧 Prérequis ### Modules PowerShell requis ```powershell # Microsoft Graph Install-Module Microsoft.Graph -Scope CurrentUser # Exchange Online Management Install-Module -Name ExchangeOnlineManagement # MSOnline (Legacy) Install-Module -Name MSOnline ``` ### Permissions requises - **Microsoft Graph** : `User.ReadWrite.All`, `Directory.ReadWrite.All` - **Exchange Online** : Administrateur Exchange - **Office 365** : Administrateur de licences ### Configuration SMTP - Accès SMTP Office 365 activé - Compte de service dédié pour l'envoi d'emails - Mot de passe d'application si MFA est activé ## 📦 Installation 1. **Cloner le dépôt** ```bash git clone https://git.tuxtech.fr/tuxgyver/Compte_Office/Compte_Office.git cd Compte_Office ``` 2. **Installer les modules PowerShell** ```powershell # Exécuter en tant qu'administrateur Install-Module Microsoft.Graph -Scope CurrentUser Install-Module ExchangeOnlineManagement -Scope CurrentUser Install-Module MSOnline -Scope CurrentUser ``` 3. **Importer les modules** ```powershell Import-Module Microsoft.Graph Import-Module ExchangeOnlineManagement Import-Module MSOnline ``` ## ⚙️ Configuration ### 1. Modifier les paramètres du script Ouvrez le fichier `Create-O365Users.ps1` et modifiez les variables suivantes : ```powershell # Domaine de votre organisation $domain = "votredomaine.fr" # Paramètres SMTP $smtpServer = "smtp.office365.com" $smtpPort = 587 $smtpUser = "compte-envoi@votredomaine.fr" $smtpPassword = "VotreMotDePasse" # Comportement pour les comptes existants $ComportementComptesExistants = "IgnorerExistants" # ou "ReinitializerMotDePasse" # Chemin du fichier CSV $csvPath = "students.csv" ``` ### 2. Se connecter aux services Microsoft ```powershell # Connexion à Microsoft Graph Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All" # Connexion à Exchange Online Connect-ExchangeOnline -UserPrincipalName "admin@votredomaine.fr" ``` ## 🚀 Utilisation ### Exécution basique | Sous Linux, pensez à lancer d'abord powershell avec la commande: pwsh ```powershell # Lancer le script .\Compte_Office.ps1 ``` ### Workflow du script 1. **Lecture du fichier CSV** contenant les informations des étudiants 2. **Normalisation des noms** (suppression des accents et caractères spéciaux) 3. **Génération d'adresses email uniques** (format : `p.nom@domaine.fr`) 4. **Vérification de l'existence** du compte 5. **Création du compte** (si inexistant) ou **réinitialisation** (selon config) 6. **Attribution des licences** Office 365 7. **Envoi de l'email** avec les identifiants 8. **Pause de 10 secondes** avant l'utilisateur suivant ## 📊 Structure du fichier CSV Créez un fichier `students.csv` avec la structure suivante : ```csv Prenom,Nom,Email Jean,Dupont,jean.dupont@exemple.fr Marie,Martin,marie.martin@exemple.fr François,Lefèvre,francois.lefevre@exemple.fr ``` ### Format requis | Colonne | Description | Obligatoire | |---------|-------------|-------------| | `Prenom` | Prénom de l'étudiant | ✅ Oui | | `Nom` | Nom de famille | ✅ Oui | | `Email` | Email personnel pour recevoir les identifiants | ✅ Oui | ### Exemple avec caractères spéciaux Le script gère automatiquement les caractères accentués : ```csv Prenom,Nom,Email Léa,Müller,lea.muller.perso@gmail.com José,García,jose.garcia@yahoo.fr ``` ➡️ Génère : `l.muller@domaine.fr` et `j.garcia@domaine.fr` ## 🎫 Licences attribuées Le script attribue automatiquement les licences suivantes (si disponibles) : | Licence | SKU | Description | |---------|-----|-------------| | **Exchange Online** | `EXCHANGESTANDARD_STUDENT` | Boîte mail 50 Go | | **Power Apps for Developer** | `POWERAPPS_DEV` | Environnement de développement | | **Office 365 A1 Students** | `STANDARDWOFFPACK_STUDENT` | Suite Office en ligne | ### Vérifier les licences disponibles ```powershell # Lister toutes les licences de votre tenant Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, @{N='Available';E={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}} ``` ## 🔧 Options avancées ### 1. Changer le comportement pour les comptes existants ```powershell # Option 1 : Ignorer les comptes existants (défaut) $ComportementComptesExistants = "IgnorerExistants" # Option 2 : Réinitialiser le mot de passe et renvoyer l'email $ComportementComptesExistants = "ReinitializerMotDePasse" ``` ### 2. Personnaliser les mots de passe Modifiez la fonction `Generer-MotDePasse` : ```powershell function Generer-MotDePasse { param ( [int]$length = 16, # Longueur du mot de passe (défaut: 12) [int]$specialCharsCount = 3 # Nombre de caractères spéciaux (défaut: 2) ) # ... } ``` ### 3. Modifier la pause entre utilisateurs ```powershell # Changer la durée de pause (en secondes) Start-Sleep -Seconds 5 # Au lieu de 10 ``` ### 4. Personnaliser le template d'email Éditez la section HTML dans la fonction `Envoyer-Email` pour adapter : - Les couleurs (gradient, bordures) - Le texte d'accueil - Les informations de contact ## 🐛 Dépannage ### Erreur : "Licence non disponible" **Cause** : La licence n'existe pas dans votre tenant ou est épuisée **Solution** : ```powershell # Vérifier les licences disponibles Get-MgSubscribedSku | Where-Object {$_.SkuPartNumber -like "*STUDENT*"} ``` ### Erreur : "Échec de l'envoi de l'email" **Causes possibles** : - SMTP désactivé sur le compte - Mot de passe d'application incorrect (si MFA activé) - Pare-feu bloquant le port 587 **Solution** : ```powershell # Tester la connexion SMTP Test-NetConnection -ComputerName smtp.office365.com -Port 587 ``` ### Erreur : "Caractères invalides dans le mailNickname" **Cause** : Caractères spéciaux non gérés **Solution** : Le script normalise automatiquement, mais vérifiez la fonction `Normalize-String` ### Erreur : "Insufficient privileges" **Cause** : Permissions insuffisantes **Solution** : ```powershell # Reconnecter avec les bonnes permissions Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All" ``` ## 📈 Logs et surveillance ### Activer les logs détaillés Les logs sont disponibles dans le dossiers: ```powershell .\logs\creation-$(Get-Date -Format 'yyyyMMdd-HHmmss').log ``` ### Exporter un rapport CSV ```powershell # Créer un tableau de résultats $results = @() foreach ($etudiant in $etudiants) { # ... traitement ... $results += [PSCustomObject]@{ Prenom = $prenom Nom = $nom Email = $result.Email Statut = if($result.Success){"Créé"}else{"Échec"} Date = Get-Date } } # Exporter le rapport $results | Export-Csv -Path ".\rapport-creation.csv" -NoTypeInformation -Encoding UTF8 ``` ## 🤝 Contribution Les contributions sont les bienvenues ! Pour contribuer : 1. **Forkez** le projet 2. Créez une **branche** pour votre fonctionnalité (`git checkout -b feature/AmazingFeature`) 3. **Committez** vos changements (`git commit -m 'Add AmazingFeature'`) 4. **Poussez** vers la branche (`git push origin feature/AmazingFeature`) 5. Ouvrez une **Pull Request** ### Guidelines - Respecter les conventions PowerShell - Commenter le code pour les sections complexes - Tester sur un environnement de test avant de soumettre - Mettre à jour la documentation si nécessaire ## 📝 Changelog ### Version 2.0.0 (2025-12) - ✨ Ajout de l'attribution automatique de 3 licences - ✨ Nouveau template d'email moderne et responsive - ✨ Option de réinitialisation de mot de passe pour comptes existants - 🎨 Amélioration de l'affichage console avec couleurs et symboles - 🐛 Correction de la normalisation des caractères spéciaux ### Version 1.0.0 (2024-11) - 🎉 Version initiale - ✅ Création de comptes utilisateurs - ✅ Attribution de licence Exchange - ✅ Envoi d'emails basique ## 📄 Licence Ce projet est sous licence MIT. Voir le fichier [LICENSE](https://git.tuxtech.fr/tuxgyver/Compte_Office/src/branch/main/LICENCE.md) pour plus de détails. ## 👥 Auteurs - **Johnny** - *Développement initial* - [https://github.com/H3-Campus/Create_cpt_Office365.git](https://github.com/H3-Campus/Create_cpt_Office365.git) ## 🙏 Remerciements - Microsoft pour la documentation Graph API - La communauté PowerShell - Tous les contributeurs ## 📞 Support - 📧 Email : serviceinformatique@h3campus.fr - 🐛 Issues : [GitHub Issues](https://git.tuxtech.fr/tuxgyver/Compte_Office.git/issues) - 📖 Documentation : [Wiki du projet](https://git.tuxtech.fr/tuxgyver/Compte_Office/src/branch/main/Readme.md) --- ⭐ **Si ce projet vous a été utile, n'oubliez pas de lui donner une étoile !**