Files
Compte_Office/Readme.md
2025-12-03 11:55:45 +00:00

9.9 KiB

🎓 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

  • 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 3 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
  • ⏸️ 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

  1. Cloner le dépôt
git clone https://git.tuxtech.fr/tuxgyver/Compte_Office/Compte_Office.git
cd Compte_Office
  1. 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
  1. 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

| Sous Linux, pensez à lancer d'abord powershell avec la commande: pwsh

# Lancer le script
.\Compte_Office.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 :

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 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

🐛 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

Les logs sont disponibles dans le dossiers:

.\logs\creation-$(Get-Date -Format 'yyyyMMdd-HHmmss').log

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 :

  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 3 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

🙏 Remerciements

  • Microsoft pour la documentation Graph API
  • La communauté PowerShell
  • Tous les contributeurs

📞 Support


Si ce projet vous a été utile, n'oubliez pas de lui donner une étoile !