Actualiser Readme.md
This commit is contained in:
409
Readme.md
409
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 :
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
Email,prenom,nom
|
||||
test@gmail.com, PrénomEtudiant, Nom-étudiant
|
||||
- ✅ **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
|
||||
|
||||
## Script
|
||||
## 🔧 Prérequis
|
||||
|
||||
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
|
||||
### Modules PowerShell 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.
|
||||
```powershell
|
||||
# Microsoft Graph
|
||||
Install-Module Microsoft.Graph -Scope CurrentUser
|
||||
|
||||
## 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.
|
||||
# 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