🎓 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
- Prérequis
- Installation
- Configuration
- Utilisation
- Structure du fichier CSV
- Licences attribuées
- Options avancées
- Sécurité
- Dépannage
- Contribution
- 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 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
🔧 Prérequis
Modules PowerShell requis
# 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
- Cloner le dépôt
git clone https://github.com/votre-username/o365-user-creation.git
cd o365-user-creation
- Installer les modules PowerShell
# Exécuter en tant qu'administrateur
Install-Module Microsoft.Graph -Scope CurrentUser
Install-Module ExchangeOnlineManagement -Scope CurrentUser
Install-Module MSOnline -Scope CurrentUser
- Importer les modules
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 :
# 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
# 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
# Lancer le script
.\Create-O365Users.ps1
Workflow du script
- Lecture du fichier CSV contenant les informations des étudiants
- Normalisation des noms (suppression des accents et caractères spéciaux)
- Génération d'adresses email uniques (format :
p.nom@domaine.fr) - Vérification de l'existence du compte
- Création du compte (si inexistant) ou réinitialisation (selon config)
- Attribution des licences Office 365
- Envoi de l'email avec les identifiants
- Pause de 10 secondes avant l'utilisateur suivant
📊 Structure du fichier CSV
Créez un fichier students.csv avec la structure suivante :
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 :
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
# 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
# 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 :
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
# 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) :
{
"smtpUser": "compte-envoi@domaine.fr",
"smtpPassword": "VotreMotDePasseSecurise",
"domain": "domaine.fr"
}
Chargez-le dans le script :
$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-Randompour chaque caractère
🐛 Dépannage
Erreur : "Licence non disponible"
Cause : La licence n'existe pas dans votre tenant ou est épuisée
Solution :
# 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 :
# 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 :
# 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 :
Start-Transcript -Path ".\logs\creation-$(Get-Date -Format 'yyyyMMdd-HHmmss').log"
# ... votre script ...
Stop-Transcript
Exporter un rapport CSV
# 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 :
- Forkez le projet
- Créez une branche pour votre fonctionnalité (
git checkout -b feature/AmazingFeature) - Committez vos changements (
git commit -m 'Add AmazingFeature') - Poussez vers la branche (
git push origin feature/AmazingFeature) - 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 pour plus de détails.
👥 Auteurs
- Votre Nom - Développement initial - VotreGitHub
🙏 Remerciements
- Microsoft pour la documentation Graph API
- La communauté PowerShell
- Tous les contributeurs
📞 Support
- 📧 Email : support@votredomaine.fr
- 🐛 Issues : GitHub Issues
- 📖 Documentation : Wiki du projet
⭐ Si ce projet vous a été utile, n'oubliez pas de lui donner une étoile !