配布リストとその所有者のレポートを作成する方法

配布リストとその所有者のレポートを作成する方法

何千ものオブジェクトがグラフタスクである可能性があります

読者は、3,500 の配布リストとその所有者の詳細を報告する方法について尋ねました。通常、何千ものExchange Onlineの記事を処理する必要が存在すると、グラフ API (この場合はグループ API) を使用して配布リストのセットを取得することを考えます。Graph API はオブジェクトを見つけるのがずっと速いですが、コードを記述する必要があり、Azure AD に登録されたアプリも必要です。いずれにせよ、1 回限りのレポートが必要な場合は、プレーンでシンプルな PowerShell がうまく機能するので、グラフの近くに移動する必要はありません。

レポートを作成するためのプレーンな PowerShell の記述

スクリプトの作成に関する課題はあまりありません。Exchange オンラインでは、配布リストの所有者 (管理者) がリストの 管理人 財産。プロパティを調べると、メールボックスまたは配布リストの名前が 1 つ以上見つかります。例えば:

All Company Employees                         {Administrator, Kim Akers}

配布リストのセットを取得し、意味のあるプロパティ(表示名、管理者、電子メールアドレス)を出力できますが、各所有者の名前を使用して表示名と電子メールアドレスを取得することで、より正確な情報を取得できます。 受信者を取得する コマンドレット。から返された所有者情報を報告する場合は、 配布グループを取得します。 コマンドレットを使用すると、所有者の詳細を取得するために使用するコードを削除することで、処理を高速化できます。

各配布リストの詳細を取得した後、残りは PowerShell リストにレコードを作成することだけです。スクリプトのコア コードを次に示します。Exchange から取得した配布リストのセットから会議室の一覧を除外していることに注意してください。

Write-Host "Finding Distribution lists in" $OrgName "..."
[array]$DLs = Get-DistributionGroup -ResultSize Unlimited -Filter {RecipientTypeDetails -ne "Roomlist"} | Select DisplayName, ExternalDirectoryObjectId, ManagedBy
If (!($DLs)) { Write-Host "No distribution lists found - exiting" ; break }
$Report = [System.Collections.Generic.List[Object]]::new()
Write-Host "Reporting Distribution lists and managers..."
ForEach ($DL in $DLs) {
    $ManagerList = [System.Collections.Generic.List[Object]]::new()
    ForEach ($Manager in $DL.ManagedBy) {
       $Recipient = Get-Recipient -Identity $Manager -ErrorAction SilentlyContinue
       If (!($Recipient)) { # Can't resolve manager
           $Recipient = "Unknown user" }
       $ManagerLine = [PSCustomObject][Ordered]@{  
         DisplayName = $Recipient.DisplayName
         UPN         = $Recipient.WIndowsLiveID }
       $ManagerList.Add($ManagerLine) 
    } # End processing managers
    $Managers = $ManagerList.DisplayName -join ", " 
    $DLLine = [PSCustomObject][Ordered]@{    
         DisplayName  = $DL.DisplayName     
         Managers     = $Managers
         EMailAddress = $DL.PrimarySmtpAddress }
    $Report.Add($DLLine)
} # End processing DL

すべての配布リストを処理した後、レポートを作成しますが、HTML (図 1) と CSV 形式の両方で行ったレポートを作成し、ジョブが完了します。ダウンロードできます。 スクリプトから GitHub.

配布リストとその管理者の HTML レポート
図 1: 配布リストとその管理者の HTML レポート

グラフ API の使用

上記の配布リストを使用してグループグラフ API を使用して、いくつかの現在の制限について説明します。グラフが輝く状況の 1 つは、配布リストのメンバーシップを報告することです。思い出したように、配布リストは入れ子をサポートしているので、配布リストのメンバーシップに他の配布リストがいくつか含まれている可能性は十分にあります。私はこれを行う方法をカバーしています Practical365.com 記事.このスクリプトの出力は図 2 に示されています。

拡張メンバーシップ情報を含むレポート
図 2: 拡張メンバーシップ情報を含むレポート

を見ると、 スクリプト コード、あなたは私が使用していることがわかります 配布グループを取得します。 をクリックして、配布リストのセットを取得します。以下のような Graph クエリでも同じ操作を行うことができます ($文字は PowerShell で使用するためにエスケープされます)。これは、高度な Azure AD クエリです ( このページ 詳細については、 を参照してください)。 グラフデータを取得する は Graph クエリからデータを返すために書かれた関数です (関数はスクリプトに含まれています)。

$Uri = "https://graph.microsoft.com/beta/groups?`$filter=Mailenabled eq true and not groupTypes/any(c:c+eq+'Unified')&`$count=true"
[array]$DLs = Get-GraphData -AccessToken $Token -Uri $uri

ただし、グループ API によって返されるデータには、所有者情報は含まれません。実際には、 グループ API でのリスト所有者の呼び出しは、現在配布リストの所有者を返すできません。この情報を取得するには PowerShell を使用する必要があり、この 配布グループを取得します。 所有者リストを取得するには、Graph クエリと[グラフ]クエリの両方を使用しても意味がありません。 配布グループを取得します。 これは物事を遅くするだけです。

配布リストのメンバーシップ スクリプトを更新して、上記のように配布リストの所有者の詳細を報告しました。これで、メンバーシップ情報の有無にかかわらず、配布リストとその所有者を報告する方法について 2 つの選択肢があります。

クイックとダーティコード

配布リストの所有権レポートを作成するために書かれたスクリプトは、他のスクリプトのビットを使用して、非常に簡単なハックです(次のような マイクロソフト 365 グループのメンバーシップを報告する)、すべてスピードと一緒にステッチ。の形で利用可能なトリックの袋を持っている スクリプトの GitHub リポジトリ テナント管理が少しだけ簡単になります!

PS. T.ここでは、Exchange オンラインに固有のコードには何もありません。Exchange サーバーに対して変更を行わずに実行する必要があります。 2番目のスクリプトはマイクロに依存しますのグラフ API は、Exchange サーバーに対しては実行されません。


テナント管理者が利用できる Office 365 データを利用する方法を学習します。 IT 担当者向け Office 365 電子書籍。私たちは物事がどのように機能するかを考え出すのが大好きです。


未分類

Posted by admin