ウェブサイト検索

PowerShellを使用してMicrosoft 365のすべてのPlannerプランを取得する


Microsoft 365で本当に恋しいものの一つは、すべてのPlannerプランの概要です。現在あるさまざまな管理センターがあっても、テナント内に作成されたすべてのプランを単純に表示したり管理したりするオプションがまだありません。

しかし、私たちができることは、PowerShellを使用してテナント内のすべてのプランを見つけることです。もちろん、すべてのプランとそのIDを一覧表示する単一のcmdletがあれば素晴らしいのですが、残念ながら、最初にすべてのグループとユーザーを取得し、彼らが1つ以上のプランを持っているかどうかを確認する必要があります。

この記事では、Microsoft 365 グループや Teams、ユーザーからプランを取得する方法を説明します。記事の最後には、テナント内のすべてのプランを取得する完全なスクリプトも用意しています。

要件

PowerShellでプランを取得するには、MS Graphモジュールを使用します。モジュールがインストールされていることを確認するか、必要なモジュールをインストールする方法についての記事をチェックしてください。

必要な情報を取得するために、以下のスコープを接続に使用します。

  • User.Read.All
  • Group.Read.All
  • タスク.読む

すべてのMicrosoft 365グループプランを取得する

グループに属するプランナーのプランから始めます。前述のように、プランを取得するためにはまず、テナント内のすべてのグループを取得する必要があります。これを次のコマンドで実行できます:

$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All

次のステップは、グループからすべてのプランをチェックして取得することです。これにはグループ ID を使用する必要があり、コマンドレット Get-MgGroupPlannerPlan を使用します。Get-MgGroupPlanner* コマンドレットのドキュメントはまだ少し内容が薄いですが、このコマンドレットは必要なものを取得できるようです。

$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:45

取得したプランを使って、これらをそれぞれ繰り返し処理するためにforeachループを使用できます。エクスポートするにあたり、プランがどのグループに属しているかだけでなく、そのグループ/プランのオーナーが誰であるかも知りたいです。

現在、Get-MgGroupPlannerPlanの結果に表示されているオーナーは、所有者であるユーザーではなく、この場合、グループの計画がグループに属しているためです。したがって、ユーザーを照会する必要があります。

これを行うために、Get-MgGroupOwner コマンドレットを使用して、グループのオーナーを迅速に取得します:

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

私たちは今、結果をCSVファイルにエクスポートするか、グリッドビューに出力することができます。

ユーザーからすべてのプランナーのプランを取得する

現在、テナント内のすべてのユーザーのプランを取得することは不可能なようですが、ドキュメントによれば動作するはずです。しかし、私のテスト中に、常に権限の問題に直面しました。このトピックに関するドキュメントも非常に薄いため、正しい解決策を考え出すのが難しいです。

ユーザーのプランを取得するには、フィルターと組み合わせたコマンドレット Get-MgPlannerPlan を使用できる必要があります:

Get-MgPlannerPlan -filter "owner eq '$UserPrincipalName'"

さて、これは自分のユーザーアカウントにのみ機能します。他のユーザーを取得しようとすると、権限エラーが発生します。正しいスコープをこのコマンドレットに設定しているにもかかわらず。

私たちは Get-MgUserPlannerPlan cmdlet も持っており、これを使用するとユーザーIDに基づいてプランを取得できます。この cmdlet は、ユーザーがメンバーであるすべてのプランを返すため、グループプランも含まれます。

しかし再び、別のユーザーからプランを取得しようとすると、同じ権限エラーが発生します。

ドキュメントによると、最後の選択肢は、MS Graphのために委任されたアクセス許可の代わりにアプリケーションのアクセス許可を使用することです。これには、Microsoft Entraにアプリを登録し、APIのアクセス許可tasks.read.allを割り当てることが含まれます。

これも上手く動作させることができず、他のユーザーからプランナーを取得しようとした際に同じアクセス許可エラーが返されました。また、cmdletのベータ版も機能しませんでした。

完全なスクリプト

私は、テナント内のすべてのグループからMicrosoft Plannerのすべてのプランを取得する完全なPowerShellスクリプトを作成します。このスクリプトは、結果をCSVファイルにエクスポートするか、コンソールに直接出力することができます。

ユーザーからすべてのプランを取得しようとしますが、前述のように、現在は権限の問題に直面しています。モジュールが正しく機能するようになったときに解決するためのベースラインとして、誰でも使用できるようにコードをスクリプトに残すことにしました。

いつものように、私のGitHubリポジトリで完全なスクリプトを見つけることができます。

まとめ

Microsoftが私たちのテナント内のすべてのPlannerプランを表示および管理するための簡単なソリューションを考案してくれたら素晴らしいと思います。特に移行中やユーザーが会社を離れるときは、すべてのPlannerを表示し、Plannerを異なるグループやユーザーに移動するのが役立ちます。

他のユーザーからプランを取得する際に、なぜ許可の問題が繰り返し発生するのか、まだよくわかりません。この件についてアイデアや解決策があれば、下のコメントで教えてください。