Actualiser Readme.md
This commit is contained in:
411
Readme.md
411
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 ","
|
## 📋 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
|
|
||||||
test@gmail.com, PrénomEtudiant, Nom-étudiant
|
|
||||||
|
|
||||||
## 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
|
## 🔧 Prérequis
|
||||||
Il installe les modules powershell suivant à sa première execution :
|
|
||||||
- Microsoft.Graph
|
|
||||||
- MSOnline
|
|
||||||
|
|
||||||
## Paramétrage :
|
### Modules PowerShell requis
|
||||||
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.
|
|
||||||
|
|
||||||
## Evolution :
|
```powershell
|
||||||
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.
|
# Microsoft Graph
|
||||||
Dans une prochaine version une option sera disponible.
|
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 !**
|
||||||
Reference in New Issue
Block a user