Share via


Exchange Online の PowerShell で受信者の取得にページングで利用する

Exchange Online で Remote PowerShell をご利用いただく際に受信者オブジェクトについて取得して処理をするということが多々あるかと思います。
この時対象となるオブジェクトが多数となると、一度に処理を実行しようとするとエラーになる場合があります。このような場合にはページングによって小分けにデータを取得して処理することで回避できることがあります。目安としては 1000 以上の受信者を処理するのであればページングを検討いただくと良いかと思います。

以下では Get-Recipient でページングを利用する方法についてご紹介いたします。
※ この機能は現状 Exchange Online のみでご利用いただけます。

以下のシンプルな function をサンプルとして用意しました。

ここでのページングの主なポイントは Get-Recipient の使い方となり、ResultSize にページサイズを指定した上で、DisplayName でソートして、BookmarkDisplayName にブックマークを指定する点となります。
ブックマークは全体のどの一部分を取得したいのかを指定しています。そのためループする際にブックマークを更新することで最終的に全体を処理することになります。なお、ブックマークには DisplayName を利用するため、Select するプロパティにこれを含めます。他の任意のプロパティを含めていただいても問題ないです。以下のサンプルでは、ページングで取得した結果を Get-Mailbox へパイプして Name と AdminDisplayVersion を取得していますが、これはあくまでページングの結果を使った例となります。

サンプル
~~~~~~~~
function Get-RecipientByPaging
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$True)]
        [int]$PageSize
    )

    $result = @()
    $firstPage = $true
    Do
    {
        # Get-Recipient にてページングを利用して受信者オブジェクトを取得
        # 任意のプロパティを取得できますが、ブックマークに利用するため、Select するプロパティには DisplayName を含めます
        $pagedResult = Get-Recipient -RecipientType:UserMailbox -Resultsize $PageSize -SortBy DisplayName -IncludeBookmarkObject:$firstPage -BookmarkDisplayName:$bookMark -WarningAction:0 | Select Identity, DisplayName
        $firstPage = $false
        if ($pagedResult)
        {
            # ブックマークの更新: 取得したオブジェクトの中で、最後のユーザーをブックマークに指定
            $bookMark = $pagedResult[-1].DisplayName

            # 処理の例: ここでは SoftDelete されたオブジェクトを除き AdminDisplayVersion を取得
            $result += $pagedResult | where Identity -notlike 'Soft Deleted Objects\*' | Get-Mailbox | Select Name, AdminDisplayVersion
        }
    }
    while ($pagedResult)

    # 結果を出力
    Write-Output $result
}

例えば、上記のサンプルにて 1000 オブジェクトずつ処理するのであれば、以下のように実行します。

Get-RecipientByPaging -PageSize 1000

上記のように、ページングを取り入れること自体は難しくはないため、大量の受信者オブジェクトを処理する機会がある場合にはご検討いただければと存じます。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。