Dans un environnement Microsoft 365, les Microsoft Forms peuvent se multiplier rapidement : sondages, formulaires RH, quiz techniques, évaluations internes, etc. Mais lorsqu’un employé quitte l’organisation, lorsqu’un groupe est supprimé ou lorsqu’un projet change d’équipe, une question revient souvent :
Où sont les formulaires et qui en est responsable ?
Autrement dit : peut-on obtenir une liste complète de tous les Forms d’un tenant, avec leurs propriétaires et identifier les forms orphelins ? La réponse est oui, même si Microsoft ne propose pas encore une interface centralisée pour le faire. Dans cet article, je te montre comment y parvenir grâce à PowerShell et Microsoft Graph.
Pourquoi cette liste n’est pas directement disponible ?
Microsoft Forms repose sur un modèle simple :
- un formulaire appartient soit à un utilisateur,
- soit à un groupe Microsoft 365,
- soit à un compte supprimé, auquel cas le formulaire devient “orphelin”.
Le défi, c’est qu’il n’existe pas de page unique dans M365 pour visualiser tous les formulaires. Pour obtenir une vue complète, il faut donc :
- Récupérer tous les utilisateurs et groupes du tenant
- Interroger Microsoft Forms via l’API Graph
- Consolider les résultats
- Détecter les formulaires dont le propriétaire n’existe plus
Heureusement, tout cela peut être automatisé.
Ce qu’il vous faut avant de commencer
Pour exécuter le script, il faut :
- Le module Microsoft Graph PowerShell
- Un compte Administrateur M365
- Une machine Windows, macOS ou Linux avec PowerShell 7+
Installation :
Install-Module Microsoft.Graph -Scope AllUsers
Connexion :
Connect-MgGraph -Scopes "User.Read.All","Group.Read.All","Forms.Read.All"
Et vous êtes prêts.
Le script complet pour inventorier tous les Microsoft Forms
Voici la version prête à l’emploi.
Elle génère automatiquement un CSV contenant :
- le nom du formulaire
- son propriétaire
- son type (utilisateur/groupe)
- la date de modification
- et s’il est orphelin ou non
# ============================================
# Script : Inventaire des Microsoft Forms
# Objectif : Lister tous les Forms du tenant,
# avec propriétaires et forms orphelins
# ============================================
Write-Host "Connexion à Microsoft Graph..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "User.Read.All","Group.Read.All","Forms.Read.All"
Select-MgProfile -Name beta
Write-Host "Récupération des utilisateurs..." -ForegroundColor Cyan
$users = Get-MgUser -All -Property "id,displayName,userPrincipalName,accountEnabled"
Write-Host "Récupération des groupes M365..." -ForegroundColor Cyan
$groups = Get-MgGroup -All -Filter "groupTypes/any(c:c eq 'Unified')" -Property "id,displayName,mail"
$results = @()
function Get-FormsByOwner {
param(
[string]$OwnerId,
[string]$OwnerType,
[string]$OwnerName
)
try {
$forms = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/solutions/forms/owners/$OwnerId/forms"
foreach ($form in $forms.value) {
$results += [pscustomobject]@{
FormId = $form.id
FormTitle = $form.displayName
OwnerType = $OwnerType
OwnerName = $OwnerName
OwnerId = $OwnerId
LastModified = $form.lastModifiedDateTime
IsOrphan = $false
}
}
}
catch {}
}
foreach ($user in $users) {
Write-Host "Analyse : $($user.userPrincipalName)" -ForegroundColor Yellow
Get-FormsByOwner -OwnerId $user.Id -OwnerType "User" -OwnerName $user.userPrincipalName
}
foreach ($group in $groups) {
Write-Host "Analyse groupe : $($group.displayName)" -ForegroundColor Yellow
Get-FormsByOwner -OwnerId $group.Id -OwnerType "Group" -OwnerName $group.displayName
}
Write-Host "Détection des forms orphelins..." -ForegroundColor Magenta
foreach ($item in $results) {
if ($item.OwnerType -eq "User") {
$owner = $users | Where-Object { $_.Id -eq $item.OwnerId }
if (-not $owner -or $owner.accountEnabled -eq $false) {
$item.IsOrphan = $true
}
}
}
$output = "FormsInventory_$(Get-Date -Format 'yyyyMMdd').csv"
$results | Export-Csv $output -NoTypeInformation -Encoding UTF8
Write-Host "Inventaire terminé ! Fichier généré : $output" -ForegroundColor Green
Ce que vous obtenez avec ce script
Le fichier produit vous donne une vue claire et exploitable :
| FormTitle | Owner | OwnerType | LastModified | Orphelin |
|---|---|---|---|---|
| Sondage RH 2025 | jean.dupont@entreprise.com | User | 2025-02-12 | Non |
| Quiz Azure | Équipe TI | Group | 2025-01-03 | Non |
| Formulaire ancien employé | (compte supprimé) | User | 2023-09-11 | Oui |
Avec cette vue globale, vous pouvez :
✔ gérer les transferts de propriété
✔ éviter de perdre des formulaires critiques lors du départ d’un employé
✔ organiser le nettoyage de l’environnement
✔ renforcer votre gouvernance M365
Même si Microsoft ne propose pas encore un bouton magique “Inventaire complet des Forms”, il est tout à fait possible d’obtenir une vue exhaustive grâce à Microsoft Graph.
