Holen Sie sich alle Planner-Pläne in Microsoft 365 mit PowerShell
Eine der Dinge, die ich in Microsoft 365 wirklich vermisse, ist eine Übersicht über alle Planner-Pläne. Selbst mit all den verschiedenen Admin-Centern, die wir momentan haben, haben wir immer noch keine Möglichkeit, einfach alle erstellten Pläne im Mandanten anzuzeigen oder zu verwalten.
Aber was wir tun können, ist PowerShell zu verwenden, um alle Pläne in unserem Mandanten zu finden. Es wäre natürlich großartig, wenn es ein einzelnes Cmdlet gäbe, um alle Pläne mit ihrer ID aufzulisten, aber leider müssen wir zunächst alle Gruppen und Benutzer abrufen und überprüfen, ob sie einen oder mehrere Pläne haben.
In diesem Artikel zeige ich Ihnen, wie Sie Pläne von Microsoft 365 Gruppen oder Teams und von Benutzern abrufen können. Am Ende des Artikels habe ich auch ein vollständiges Skript, das alle Pläne in Ihrem Mandanten abruft.
Anforderungen
Um die Pläne mit PowerShell abzurufen, verwenden wir das MS Graph-Modul. Stellen Sie sicher, dass Sie das Modul installiert haben, oder sehen Sie sich diesen Artikel an, um zu erfahren, wie man die notwendigen Module installiert.
Wir werden die folgenden Scopes für die Verbindung verwenden, um die erforderlichen Informationen zu erhalten:
- User.Read.All
- Group.Read.All
- Aufgaben.Lesen
Alle Microsoft 365-Gruppenpläne abrufen
Wir werden mit den Planner-Plänen beginnen, die zu einer Gruppe gehören. Wie bereits erwähnt, müssen wir, um die Pläne zu erhalten, zunächst alle Gruppen in unserem Mandanten abrufen. Dies können wir mit dem folgenden Befehl tun:
$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -AllDer nächste Schritt besteht darin, alle Planungen aus der Gruppe zu überprüfen und abzurufen. Dazu müssen wir die Gruppen-ID verwenden und das Cmdlet Get-MgGroupPlannerPlan. Die Dokumentation der Get-MgGroupPlanner*-Cmdlets ist noch ein bisschen dünn, aber dieses Cmdlet scheint das zu liefern, was wir benötigen:
$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:45Mit den abgerufenen Plänen können wir jetzt eine foreach-Schleife verwenden, um jeden einzelnen von ihnen durchzugehen. Für unseren Export möchte ich nicht nur wissen, zu welcher Gruppe der Plan gehört, sondern auch, wer der Eigentümer der Gruppe/des Plans ist.
Jetzt ist der Eigentümer, der in den Ergebnissen von Get-MgGroupPlannerPlan aufgeführt ist, nicht der Benutzer, der der Eigentümer ist, in diesem Fall die Gruppe, da der Plan zur Gruppe gehört. Daher müssen wir auch den Benutzer nachschlagen.
Um dies zu tun, verwenden wir das Get-MgGroupOwner Cmdlet, um schnell die Gruppenbesitzer zu erhalten:
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
}
}Wir können das Ergebnis jetzt in eine CSV-Datei exportieren oder es in einer Tabellenansicht ausgeben.
Alle Planerpläne von Benutzern abrufen
Es scheint derzeit unmöglich zu sein, die Pläne für alle Benutzer in Ihrem Mandanten abzurufen, obwohl es laut der Dokumentation funktionieren sollte. Während meiner Tests bin ich jedoch ständig auf Berechtigungsprobleme gestoßen. Die Dokumentation zu diesem Thema ist auch wirklich dünn, was es schwierig macht, eine korrekte Lösung zu finden.
Um die Pläne eines Benutzers zu erhalten, sollten wir in der Lage sein, das Cmdlet Get-MgPlannerPlan zusammen mit einem Filter zu verwenden:
Get-MgPlannerPlan -filter "owner eq '$UserPrincipalName'"Jetzt funktioniert dies nur für Ihr eigenes Benutzerkonto. Wenn Sie versuchen, einen anderen Benutzer abzurufen, erhalten Sie einen Berechtigungsfehler. Auch wenn wir die richtigen Berechtigungen für dieses Cmdlet festgelegt haben.
Wir haben auch das Cmdlet Get-MgUserPlannerPlan, mit dem Sie die Pläne basierend auf der Benutzer-ID abrufen können. Dieses Cmdlet gibt alle Pläne zurück, in denen der Benutzer Mitglied ist, sodass das auch Gruppenpläne sein können.
Aber nochmals, wenn Sie versuchen, die Pläne von einem anderen Benutzer abzurufen, erhalten Sie denselben Berechtigungsfehler.
Die letzte Option, die laut der Dokumentation funktionieren sollte, ist die Verwendung der Anwendungsberechtigungen anstelle der delegierten Berechtigungen für MS Graph. Dies beinhaltet das Erstellen einer registrierten App in Microsoft Entra und das Zuweisen der API-Berechtigung tasks.read.all.
Ich konnte das auch nicht zum Laufen bringen, es gab die gleichen Berechtigungsfehler, als ich versuchte, die Planer von anderen Benutzern abzurufen. Auch die Beta-Versionen des Cmdlets funktionierten nicht.
Komplettes Skript
Ich erstelle ein komplettes PowerShell-Skript, das alle Microsoft Planner-Pläne aus allen Gruppen in Ihrem Mandanten abruft. Das Skript kann die Ergebnisse in eine CSV-Datei exportieren oder sie direkt auf die Konsole ausgeben.
Es wird auch versuchen, alle Pläne von Ihren Benutzern zu erhalten, aber wie bereits erwähnt, haben wir derzeit ein Berechtigungsproblem. Ich habe mich entschieden, den Code im Skript zu belassen, damit jeder ihn als Ausgangsbasis verwenden kann, um das Problem zu lösen, wenn das Modul korrekt funktioniert.
Sie können das komplette Skript hier in meinem GitHub-Repository finden, wie immer.
Zusammenfassung
Es wäre großartig, wenn Microsoft eine einfachere Lösung entwickeln könnte, um alle Planner-Pläne in unseren Mandanten anzuzeigen und zu verwalten. Besonders während Migrationen oder wenn ein Benutzer das Unternehmen verlässt, kann es nützlich sein, alle Planner anzuzeigen und möglicherweise Planner in andere Gruppen oder Benutzer zu verschieben.
Ich bin mir immer noch nicht wirklich sicher, warum das Berechtigungsproblem immer wieder auftritt, wenn die Pläne von anderen Benutzern abgerufen werden. Wenn Sie eine Idee oder Lösungen dafür haben, lassen Sie es mich bitte in den Kommentaren unten wissen.
