Actualiser Readme.md

This commit is contained in:
2025-12-03 11:28:48 +00:00
parent 1461144650
commit 5512e2ce1b

409
Readme.md
View File

@@ -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 "," ## 📋 Table des matières
* 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.
** 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 : ## ✨ Fonctionnalités
Email,prenom,nom -**Création automatique de comptes utilisateurs** dans Microsoft 365
test@gmail.com, PrénomEtudiant, Nom-étudiant - 📧 **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
## Script ## 🔧 Prérequis
Ce script PowerShell a été développé pour fonctionner sur des machines Linux avec powershell 7.4 ### Modules PowerShell requis
Il installe les modules powershell suivant à sa première execution :
- Microsoft.Graph
- MSOnline
## Paramétrage : ```powershell
Il est nécessaire de modifier certain paramétrage avant la premère utilisation : # Microsoft Graph
* Sur la ligne 11 : Connect-ExchangeOnline -UserPrincipalName "*******@h3campus.fr" -> Choissir une adresse ayant les droits de création de compte. Install-Module Microsoft.Graph -Scope CurrentUser
* 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.
## Evolution : # Exchange Online Management
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. Install-Module -Name ExchangeOnlineManagement
Dans une prochaine version une option sera disponible.
# 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 !**