
Introduction
GitHub Actions permet d’automatiser des workflows directement depuis un repository Git. Dans cet article, nous allons voir comment créer automatiquement des comptes utilisateurs dans un tenant Microsoft 365 en utilisant PowerShell et Microsoft Graph API.
Cas d’usage : Créer des comptes étudiants pour un environnement de formation sans intervention manuelle. L’idée c’est que je puisse créer 25 comptes utilisateurs dans un Tenant de test automatiquement à chaque nouvelle session de formation.
Prérequis
- Un repository GitHub – dans mon cas pour créer et nettoyer mon environnement M365 à chaque nouvelle session de cours, j’utilise les scripts qui sont disponibles sur le repository suivant.
- Une App Registration Entra ID avec les permissions nécessaires : en effet pour que cela fonctionne sans que vous ayez besoin de mettre vos identifiants Global Admin en clair dans votre script PowerShell vous devez être capable de vous connecter en PowerShell via une App Registration – j’ai détaillé toute la procédure sur l’article disponible en suivant ce lien.
- Les modules PowerShell Microsoft.Graph
Script(s) PowerShell à exécuter
J’utilise les scripts suivants pour créer les comptes de tests pour les étudiants :
- Connexion à Entra ID via mon App Registration (pour cette partie, je vous rappelle que vous devez consulter l’article suivant). ⬇️
$credential = New-Object System.Management.Automation.PSCredential(
$env:AZURE_CLIENT_ID,
(ConvertTo-SecureString $env:AZURE_CLIENT_SECRET -AsPlainText -Force)
)
Connect-MgGraph -TenantId $env:AZURE_TENANT_ID -ClientSecretCredential $credential -NoWelcome
Vous pouvez éventuellement retrouver une version plus complète des quelques lignes ci-dessus avec des sécurités et des try / catch qui permettent de savoir lorsque la connexion n’aboutit pas.
Si vous n’êtes pas familier de GitHub, les références aux termes : AZURE_CLIENT_SECRET ou encore AZURE_TENANT_ID font référence à des secrets GitHub que vous devez configurer dans votre repository pour que ça fonctionne. C’est le même principe qu’avec un Azure KeyVault – l’idée c’est d’éviter de mettre des logins/mdp/Subscribtion ID/Tenant ID ou autres valeurs secrètes dans le coeur de notre script PowerShell.
- Création des comptes de test (après m’être connecté à Entra ID avec le script précédent). ⬇️
$domain = "yourtenant.onmicrosoft.com"
$passwordProfile = @{
Password = $env:SDV_O365_ENTRAID_PASSWORD
ForceChangePasswordNextSignIn = $false
}
for ($i = 1; $i -le 25; $i++) {
$studentNumber = "student{0:D2}" -f $i
New-MgUser -AccountEnabled $false `
-DisplayName $studentNumber `
-MailNickname $studentNumber `
-UserPrincipalName "$studentNumber@$domain" `
-PasswordProfile $passwordProfile `
-UsageLocation "FR"
}
La version ci-dessus ne fait aucun test et si ça plante vous n’aurez aucune information. Par défaut, je vais créer 25 comptes temporaires sur le format student01 jusqu’à student25. Comme précédemment, j’ai préféré mettre le mot de passe par défaut de chaque compte utilisateur dans un GitHub Secret plutôt que directement dans mon script – c’est la référence que j’appelle : SDV_O365_ENTRAID_PASSWORD. Si vous voulez un script plus élaboré et plus complet, personnaliser les attributs pour les comptes, vous pouvez consulter mon script complet en suivant ce lien.
Création de mon workflow GitHub Actions
Une fois que vous avez ouvert votre repository dans Visual Studio Code (ou autre logiciel de votre choix) – vous devez respecter l’arborescence suivante pour que votre workflow soit compris par GitHub Action :

A la racine de votre repository GitHub, créez un nouveau fichier avec l’extension .yml. Le fichier doit se trouver dans le dossier suivant .github/workflows de votre repository.
Au sein de votre fichier, insérez le code suivant :
name: Create Test Accounts + Privileges
on:
workflow_dispatch:
jobs:
create-accounts:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install PowerShell modules
shell: pwsh
run: |
Install-Module Microsoft.Graph.Authentication -Force -Scope CurrentUser
Install-Module Microsoft.Graph.Users -Force -Scope CurrentUser
- name: Connect and create accounts
shell: pwsh
env:
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
SDV_O365_ENTRAID_PASSWORD: ${{ secrets.SDV_O365_PASSWORD }}
run: |
Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Users
$secureSecret = ConvertTo-SecureString $env:AZURE_CLIENT_SECRET -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($env:AZURE_CLIENT_ID, $secureSecret)
Connect-MgGraph -TenantId $env:AZURE_TENANT_ID -ClientSecretCredential $credential -NoWelcome
./SDV/Microsoft-365/Accounts-Creation/1-Create-Test-Accounts.ps1
Concrètement qu’est-ce qui se passe avec ce fichier particulier :
- Déclenchement : Exécution manuelle uniquement (le workflow s’exécute sur une machine virtuelle Ubuntu fournie gratuitement par GitHub).
- Actions :
- Récupère le code du repository
- Installe les modules PowerShell Graph
- Se connecte à Microsoft Graph avec App Registration
- Crée 25 comptes étudiants
- Attribue les privilèges Global Admin
- Secrets :
- Tenant ID, Client ID, Client Secret, Mot de passe
Si vous avez tout bien configuré, vous pouvez retourner sur l’interface de GitHub, dans la partie Actions, vous allez retrouver dans la partie à gauche tout en haut le nom de votre workflow automatiquement. Si rien n’apparaît, vérifiez bien l’extension de votre fichier qui doit être en .yml et le bon respect du dossier dans lequel mettre votre fichier : .github/workflows.

Test d’exécution de notre workflow
Il ne nous reste plus qu’à tester notre workflow – pour cela, vous cliquez dessus et sélectionnez ensuite le bouton « Run workflow« . Par défaut, le déclenchement est manuel mais il est également possible de le planifier sur le même format qu’une tâche cron.
Nous pouvons même suivre l’exécution de notre GitHub action :

Nous voyons que lors de la génération de la VM Linux par GitHub : on commence par installer les modules PowerShell puis ensuite on exécute le script PowerShell qui va créer mes 25 comptes de tests. Si votre fichier PowerShell affiche des Logs alors vous pourrez également les voir pour confirmer la bonne exécution de votre workflow.
Facturation de Github Actions
L’intérêt de GitHub Actions c’est qu’en plus vous avez plein de crédit inclus avec l’offre gratuite. Je n’ai pas encore eu besoin de payer et je l’utilise pour de nombreux workflows personnels. 👍
- 2000 minutes/mois pour les comptes gratuits
- Storage : 500 MB d’artefacts
- Concurrent jobs : 20 jobs simultanés (Free tier)
Conclusion
GitHub Actions offre une solution puissante pour automatiser la gestion des comptes Microsoft 365 :
- ✅ Automatisation complète : Plus besoin de créer les comptes manuellement
- ✅ Traçabilité : Tous les changements sont versionnés dans Git
- ✅ Sécurité : Les secrets sont chiffrés et jamais exposés
- ✅ Reproductibilité : Le workflow peut être réutilisé et partagé
- ✅ Gratuit : 2000 minutes/mois incluses







