diff --git a/Readme.md b/Readme.md index a415fcf..fc1b802 100644 --- a/Readme.md +++ b/Readme.md @@ -1,32 +1,395 @@ -# Création des comptes Office 365 à partir d'un CSV. +# 🎓 Script de Création d'Utilisateurs Office 365 pour Étudiants -## Struture du CSV +Script PowerShell automatisé pour créer des comptes utilisateurs Microsoft 365, attribuer des licences multiples et envoyer les informations de connexion par email. -* Le CSV doit avoit comme séparateur des "," -* Le nom des colonne doit être : Email, prenom, Nom -* Les nom des étuidants peuvent avoir des caractères spéciaux ou accent, le script se chargera de faire le ménnage. +## 📋 Table des matières - ** Note ** : Le titre "prenom" de la colonne prénom du csv ne oit pas contenir d'accent. +- [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) - Exemple : - -Email,prenom,nom -test@gmail.com, PrénomEtudiant, Nom-étudiant +## ✨ Fonctionnalités -## Script +- ✅ **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 4 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 +- 🎨 **Email professionnel** avec template HTML moderne +- ⏸️ **Pause configurable** entre chaque création pour éviter les limitations API -Ce script PowerShell a été développé pour fonctionner sur des machines Linux avec powershell 7.4 -Il installe les modules powershell suivant à sa première execution : -- Microsoft.Graph -- MSOnline +## 🔧 Prérequis - ## Paramétrage : -Il est nécessaire de modifier certain paramétrage avant la premère utilisation : -* Sur la ligne 11 : Connect-ExchangeOnline -UserPrincipalName "*******@h3campus.fr" -> Choissir une adresse ayant les droits de création de compte. -* Sur les ligne 19 et 20 : Remplacer l'adresse qui enverra les emails : $smtpUser = "Compte_EnvoieMail@h3hitema.fr" # L'adresse email de l'expéditeur -$smtpPassword = "********" -* Ligne 28 : Verifier le chemin et le nom du fichier contenant les étudiants. +### Modules PowerShell requis - ## Evolution : - Afin de ne pas se retouver avec trop de doublons ou adresses inutile, le script a été verrouillé pour ne pas créer d'adresse pour des étudiants dont les noms sont existant. - Dans une prochaine version une option sera disponible. \ No newline at end of file +```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://github.com/votre-username/o365-user-creation.git +cd o365-user-creation +``` + +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 + +```powershell +# Lancer le script +.\Create-O365Users.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 Plan 2 Trial** | `POWER_BI_PRO` | Applications Power Platform | +| **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 logo de votre établissement +- Le texte d'accueil +- Les informations de contact + +## 🔒 Sécurité + +### Bonnes pratiques + +- ✅ **Ne jamais commit** les mots de passe dans Git +- ✅ Utiliser un **compte de service dédié** pour l'envoi d'emails +- ✅ Activer l'**authentification multifacteur** (MFA) pour les admins +- ✅ Stocker les identifiants dans **Azure Key Vault** ou un gestionnaire de secrets +- ✅ **Chiffrer** le fichier CSV contenant les données personnelles +- ✅ **Logger** toutes les opérations pour audit + +### Utiliser un fichier de configuration sécurisé + +Créez un fichier `config.json` (à ajouter au `.gitignore`) : + +```json +{ + "smtpUser": "compte-envoi@domaine.fr", + "smtpPassword": "VotreMotDePasseSecurise", + "domain": "domaine.fr" +} +``` + +Chargez-le dans le script : + +```powershell +$config = Get-Content -Path "config.json" | ConvertFrom-Json +$smtpUser = $config.smtpUser +$smtpPassword = $config.smtpPassword +``` + +### Mots de passe générés + +- **Longueur** : 12 caractères minimum +- **Composition** : Lettres (majuscules/minuscules) + chiffres + caractères spéciaux +- **Changement obligatoire** à la première connexion +- **Aléatoire** : Utilisation de `Get-Random` pour chaque caractère + +## 🐛 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 + +Ajoutez en début de script : + +```powershell +Start-Transcript -Path ".\logs\creation-$(Get-Date -Format 'yyyyMMdd-HHmmss').log" +# ... votre script ... +Stop-Transcript +``` + +### 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 (2024-12) +- ✨ Ajout de l'attribution automatique de 4 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](LICENSE) pour plus de détails. + +## 👥 Auteurs + +- **Votre Nom** - *Développement initial* - [VotreGitHub](https://github.com/votre-username) + +## 🙏 Remerciements + +- Microsoft pour la documentation Graph API +- La communauté PowerShell +- Tous les contributeurs + +## 📞 Support + +- 📧 Email : support@votredomaine.fr +- 🐛 Issues : [GitHub Issues](https://github.com/votre-username/o365-user-creation/issues) +- 📖 Documentation : [Wiki du projet](https://github.com/votre-username/o365-user-creation/wiki) + +--- + +⭐ **Si ce projet vous a été utile, n'oubliez pas de lui donner une étoile !** \ No newline at end of file