Obtenez tous les plans Planner dans Microsoft 365 avec PowerShell
L'une des choses qui me manque vraiment dans Microsoft 365 est un aperçu de tous les plans Planner. Même avec tous les différents Centres d'Administration que nous avons actuellement, nous n'avons toujours pas d'option pour simplement visualiser tous les plans créés dans le locataire ou les gérer.
Mais ce que nous pouvons faire, c'est utiliser PowerShell pour trouver tous les plans dans notre locataire. Maintenant, ce serait bien sûr formidable s'il y avait une seule cmdlet pour lister tous les plans avec leur ID, mais malheureusement, nous devrons d'abord obtenir tous les groupes et utilisateurs et vérifier s'ils ont un ou plusieurs plans.
Dans cet article, je vais vous montrer comment obtenir des plans à partir des groupes Microsoft 365 ou des équipes, et des utilisateurs. À la fin de l'article, j'ai également un script complet qui récupérera tous les plans dans votre locataire.
Exigences
Pour obtenir les plans avec PowerShell, nous utiliserons le module MS Graph. Assurez-vous d'avoir le module installé ou consultez cet article sur la façon d'installer les modules nécessaires.
Nous allons utiliser les scopes suivants pour la connexion afin d'obtenir les informations requises :
- User.Read.All
- Group.Read.All
- Tâches.Lire
Obtenir tous les plans de groupe Microsoft 365
Nous allons commencer par les plans du Planner qui appartiennent à un groupe. Comme mentionné, pour obtenir les plans, nous devons d'abord obtenir tous les groupes de notre locataire. Nous pouvons le faire avec la commande suivante :
$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -AllLa prochaine étape consiste à vérifier et à obtenir tous les plans du groupe. Nous devrons utiliser l'identifiant du groupe pour cela, et la cmdlet Get-MgGroupPlannerPlan. La documentation des cmdlets Get-MgGroupPlanner* est encore un peu légère, mais cette cmdlet semble fournir ce dont nous avons besoin:
$plans = Get-MgGroupPlannerPlan -GroupId $groupId
Results
Title Id Owner CreatedDateTime
----- -- ----- ---------------
Timeline master plan _axwc5sZDkOqLKUM4LjyMZcAAHpp 1d18028d-7a44-4f28-a579-* 13-5-2025 17:34:44
test yGsg1WOFh0SX3D9C1ViEmpcAHB3t 1d18028d-7a44-4f28-a579-* 13-5-2025 10:38:45Avec les plans récupérés, nous pouvons maintenant utiliser une boucle foreach pour passer en revue chacun d'eux. Pour notre export, je ne veux pas seulement savoir à quel groupe le plan appartient, mais aussi qui est le propriétaire du groupe/plan.
Maintenant, le propriétaire indiqué dans les résultats de Get-MgGroupPlannerPlan n'est pas l'utilisateur qui est le propriétaire, dans ce cas le groupe, car le plan appartient au groupe. Nous devrons donc également rechercher l'utilisateur.
Pour ce faire, nous utiliserons la cmdlet Get-MgGroupOwner pour obtenir rapidement le(s) propriétaire(s) du groupe :
foreach ($plan in $plans) {
$owner = Get-MgGroupOwner -GroupId $groupId | Select-Object -ExpandProperty AdditionalProperties
$planDetails += [PSCustomObject]@{
"Group Id" = $groupId
"Group Name" = $GroupDisplayName
"Planner ID" = $plan.id
"Planner Title" = $plan.title
"Group Owner" = $owner.displayName
"Created at" = $plan.createdDateTime
}
}Nous pouvons maintenant exporter le résultat vers un fichier CSV ou l'afficher dans une vue en grille.
Obtenir tous les plans de planificateur des utilisateurs
Obtenir les plans pour tous les utilisateurs de votre locataire semble actuellement impossible, même si cela devrait fonctionner selon la documentation. Mais lors de mes tests, j'ai continuellement rencontré des problèmes de permissions. La documentation est également très maigre sur ce sujet, ce qui rend difficile de trouver une solution correcte.
Pour obtenir les plans d'un utilisateur, nous devrions pouvoir utiliser la cmdlet Get-MgPlannerPlan combinée avec un filtre :
Get-MgPlannerPlan -filter "owner eq '$UserPrincipalName'"Maintenant, cela ne fonctionne que pour votre propre compte utilisateur. Lorsque vous essayez de récupérer un autre utilisateur, vous obtiendrez une erreur de permission. Bien que nous ayons défini les autorisations correctes pour ce cmdlet.
Nous avons également la cmdlet Get-MgUserPlannerPlan, qui vous permet de récupérer les plans en fonction de l'ID utilisateur. Cette cmdlet renverra tous les plans dont l'utilisateur est membre, il peut donc également s'agir de plans de groupe.
Mais encore une fois, lorsque vous essayez de récupérer les plans d'un autre utilisateur, vous obtiendrez la même erreur de permission.
La dernière option, qui devrait fonctionner selon la documentation, est d'utiliser les autorisations d'application au lieu des autorisations déléguées pour MS Graph. Cela implique de créer une application enregistrée dans Microsoft Entra et d'assigner l'autorisation API tasks.read.all.
Je n'ai pas réussi à faire cela non plus, cela a renvoyé les mêmes erreurs de permission en essayant de récupérer les planificateurs d'autres utilisateurs. De plus, les versions bêta de la commande ne fonctionnaient pas.
Script Complet
Je crée un script PowerShell complet qui récupérera tous les plans Microsoft Planner de tous les groupes dans votre locataire. Le script peut exporter les résultats vers un fichier CSV ou simplement les afficher directement dans la console.
Il essaiera également d'obtenir tous les plans de vos utilisateurs, mais comme mentionné, nous rencontrons actuellement un problème de permissions. J'ai décidé de laisser le code dans le script, afin que tout le monde puisse l'utiliser comme base pour le résoudre lorsque le module fonctionnera correctement.
Vous pouvez trouver le script complet ici dans mon dépôt GitHub, comme toujours.
Conclure
Ce serait formidable si Microsoft proposait une solution plus facile pour visualiser et gérer tous les plans Planner dans nos locataires. Surtout lors des migrations ou lorsque un utilisateur quitte l'entreprise, il peut être utile de visualiser tous les Planners et peut-être de les déplacer vers différents groupes ou utilisateurs.
Je ne suis toujours pas vraiment sûr pourquoi le problème de permission continue à se poser lorsque je récupère les plans d'autres utilisateurs. Si vous avez une idée ou des solutions à ce sujet, veuillez me le faire savoir dans les commentaires ci-dessous.
