グラフ API を使用したメールボックス フォルダー統計の取得
時々PowerShellは少し助けを必要とする
メールボックス フォルダーの統計情報を取得することは、一般的な管理アクティビティです。Exchange Online 管理者は通常、 Get-ExoMailboxStatistics そして Get-ExoMailboxFolderStatistics コマンドレットと、その出力を囲むスクリプトを構築します。このアプローチは機能しますが、いくつかの欠点があります。
- コマンドレットは “重い" コマンドレットであり、実行に時間がかかります。
- 出力の一部 (フォルダー サイズなど) は、計算に使用する前に操作が必要です。
ランニング Get-ExoMailboxStatistics 取得したメールボックスのバッチを処理するには、 Get-ExoMailbox 迅速な操作ではありません。ただし、メールボックスフォルダの統計情報を取得するという点で作業が完了するため、このアプローチがスクリプトで頻繁に採用されるのがわかります。
これらのコマンドレットの歴史は、Exchange Server 2007 での PowerShell の元の実装にさかのぼります。当時、Exchange の開発者は、PowerShell に関する Exchange 2007 のすべての管理機能を構築するという勇敢な決断を下しました。 取引所管理コンソール (EMC)。コマンドレットの設計上の焦点は、コンソールに必要なデータの取得と操作でした。メールボックスのサイズ、個々のフォルダーのサイズ、それに含まれるアイテムの数など、生データ以上のものにアクセスできるかどうかは考慮されませんでした。
EWS の役割とグラフ
当時、Exchange Web サービス (EWS) は、メールボックスの内容を深く調べる必要がある開発者が利用できるパブリック API でした。たとえば、受信トレイ内のアイテム数と未読数の両方を返す場合 (ここでは、 スタックオーバーフローの議論 トピックに)
今日、Microsoft Graphが推奨されるオプションであり、読者がメールボックスの未読数を報告できないことに対する不満に気づいたとき、私が向かった場所です。未読数を報告する理由の 1 つは、顧客の要求の処理に使用される共有メールボックスのアクティビティを監視することです。いずれにせよ、何らかのビジネス上の理由が存在するので、対応方法を見ていきましょう。
メール API を使用したメールボックス フォルダーの取得
Microsoft Graph Mail API には、 メールフォルダの一覧表示呼び出し をクリックして、ユーザーのメールボックスからフォルダーのコレクションを返します。メールボックス フォルダーの統計情報を計算するために関心のあるいくつかのプロパティは、フォルダーごとに含まれています。フォルダーに対して返されるデータの例を次に示します。ご覧のとおり、このフォルダーは受信トレイであり、グラフは未読数を返します。
id : AQMkADY5NmJhYzk4LTA2ZGYtNGZkMy05NDJlLThlNDA1ZTMxZTU1AGMALgAAA4-72A-LRNdArLgWql46nuMBAEulavbT-91Jpzh8YFiJOcwAAAIBDAAAAA== displayName : Inbox parentFolderId : AQMkADY5NmJhYzk4LTA2ZGYtNGZkMy05NDJlLThlNDA1ZTMxZTU1AGMALgAAA4-72A-LRNdArLgWql46nuMBAEulavbT-91Jpzh8YFiJOcwAAAIBCAAAAA== childFolderCount : 0 unreadItemCount : 1715 totalItemCount : 2818 sizeInBytes : 721593032 isHidden : False
この知識があれば、次の方法でメールボックス フォルダーの統計情報を取得する PowerShell スクリプトを簡単に作成できます。
- Azure AD 登録済みアプリとアプリ シークレットを使用して、グラフと対話するためのアクセス トークンを取得します。登録済みのアプリは、アプリケーションを使用することに同意している必要があります。 メールを読む アクセス許可 (ユーザーのメールボックスにアクセスするため)。
- 走る Get-ExoMailbox をクリックして、テナント内のユーザー メールボックスのセットを返します。
- 各メールボックスをループ処理して、フォルダーのセットを取得します。
- 受信トレイに関する情報を抽出します。
- レポート内の情報を取得します。
- レポートを出力します(CSVファイル、Excelファイル、またはその他の形式として – この記事で説明したようにExcelを使用することにしました)。
メインループを以下に示します。
ForEach ($M in $Mbx) { Write-Host ("Processing mailbox {0} of {1}: {2}" -f $i, $Mbx.Count, $M.DisplayName); $i++ $Uri = "https://graph.microsoft.com/v1.0/users/" + $M.ExternalDirectoryObjectId + "/mailFolders?`$top=250" $FolderData = Invoke-RestMethod -Headers $Headers -Uri $Uri -UseBasicParsing -Method "GET" -ContentType "application/json" $InboxData = $FolderData.Value | ? {$_.displayname -eq "Inbox"} $TotalMbxItems = ($FolderData.Value.totalitemcount | Measure-Object -Sum | Select -ExpandProperty Sum) $TotalMbxSize = ($FolderData.Value.SizeInBytes | Measure-Object -Sum | Select -ExpandProperty Sum) $ReportLine = [PSCustomObject][Ordered]@{ # Write out details of the mailbox "User" = $M.DisplayName UPN = $M.UserPrincipalName InboxCount = $InboxData.totalItemCount UnreadCount = $InboxData.unreadItemCount TotalMbxFolders = $FolderData.Value.Count TotalMbxItems = $TotalMbxItems TotalMbxFolderSize = [math]::Round($TotalMbxsize/1Mb,2) } $Report.Add($ReportLine) }
既定では、メールボックス フォルダーを取得する呼び出しは、クエリに一致する最初の 10 個のフォルダーを返します。Microsoft Graph クエリは、サービスに対する需要を最小限に抑えるために、返されるデータの量を制限します。ページネーションと呼ばれるプロセスにより、開発者は、利用可能なすべてのデータが使い果たされるまで、データの連続したページを取得できます。この場合、既定の量を超える値を返すようにグラフに指示するか (ここでは、Top パラメーターを使用してスクリプトが最大 250 個のフォルダーを受け入れるように指定します)、nextlink を使用して、nextlink が使用できなくなるまでデータの次のページを取得します。
図 1 は、グラフによって返されるメールボックス フォルダー データから生成された出力を示しています。

グラフは、メールボックス データにアクセスするための普遍的な万能薬ではありません。これは、テナント管理者が使用できる機能に追加するツールです。この例では、PowerShell とグラフの組み合わせにより、メールボックス内の受信トレイ フォルダーの未読数を検索できました。データを取得するための追加のメソッドがあるのはうれしいことです。
できます GitHubから使用したスクリプトをダウンロードする.
このような洞察は簡単には得られません。テクノロジーを知り、舞台裏の見方を理解する必要があります。の知識と経験から利益を得る Office 365 for IT プロフェッショナル Office 365とより広いMicrosoft 365エコシステムをカバーする最高の電子書籍を購読することでチーム。
ディスカッション
コメント一覧
まだ、コメントがありません