PowerShell をグラフ API 呼び出しに置き換えることで、グループとチームのアクティビティ レポートを高速化する

PowerShell をグラフ API 呼び出しに置き換えることで、グループとチームのアクティビティ レポートを高速化する

パワーシェルとの格闘

時々私はパワーシェルが嫌いです。言語自体ではなく、私の無関心、または私が物事を行う方法を覚えていない、またはメールボックスやグループのようなオブジェクトを扱ういくつかのコマンドレットの速度。コマンドレットが非効率的というわけではありません。オブジェクトに関する情報を取得するために多くの作業を行うので、遅くなります。

これは、アドホック クエリや、数百のメールボックスまたはグループを処理するだけでよい場合に問題ありません。この問題は、数が増えるにつれて強調され、数千のオブジェクトを処理する必要が生じれば、コマンドレットの完了を待機するのにかなりの時間が費やされ、スクリプトの実行に数時間かかる場合があります。

マイクロソフトは、Exchange オンライン PowerShell モジュールで、より高速なコマンドレットを導入するために大幅な進歩を遂げました。 取得 -エキソメールボックス そして 取得 -エキソメールボックス統計.これらの REST ベースのコマンドレットは、リモートの PowerShell の使用に比べて高速で堅牢であり、これらの機能強化は、スクリプトを再検討およびアップグレードするために必要な作業に十分な理由です。このモジュールでは、Exchange Online およびセキュリティとコンプライアンスのエンドポイントへのセッションの自動更新もサポートしているので、すべて優れた機能です。

ゲット・ユニファイド・グループのナマケモノ

物事はそれほど印象的ではありません 取得統一グループMicrosoft 365 グループの詳細を取得します。マイクロソフト 365 グループの使用を反映して、 取得統一グループ は、グループ設定の全体像を示すために、Azure AD、Exchange オンライン、および SharePoint オンラインから詳細を組み立てる複雑なコマンドレットです。ランニング 取得統一グループ 200グループの詳細を取得することは遅いビジネスです。10,000 グループの詳細を取得するコマンドレットを実行するのは、1 日のタスクです。ザ ゲットチーム コマンドレットもスピードスターではありません。マイクロソフトは、これらのコマンドレットを、グループやチームとの汎用的な対話のために設計し、短期間で何千ものオブジェクトを報告するための基盤として設計しました。

Microsoft 365 グループの一覧のみが必要な場合は、 受信者を取得する コマンドレット。

Get-Recipient -RecipientTypeDetails GroupMailbox -ResultSize Unlimited

グループのリストを作成する 受信者を取得する 通常は、それを作成するよりもはるかに高速です 取得統一グループ.ただし、最終的にはグループのリストが作成されます。 受信者を取得する グループ関連のプロパティを返さないので、通常は実行することになります 取得統一グループ を使用して、個々のグループの設定を取得してから、処理を行うことができます。それでも、このオーバーヘッドはスクリプトの処理に広がる可能性があり、一部のグループに対してのみ必要になる可能性がありますが、すべてのグループに必要なわけではありません。

グラフはより速い

これは私を グループ用のマイクロソフト グラフ API.私が何年も指摘してきたように、 グラフ API を使用して PowerShell を使用する は、PowerShell の親しみやすさとグラフのパワーを活用する優れた方法です。作成するスクリプト グラフデータからのユーザーアクティビティレポート Exchange、SharePoint、OneDrive、チーム、および Yammer をカバーすることは、最初の学習曲線を乗り越えたときにグラフがいかにアクセス可能であるかの良い例です。

3年前、私はについて書いた 時代遅れのチームとグループを見つけるためのスクリプト は、Exchange オンライン、SharePoint オンライン、およびチーム間でグループ内で観察されたアクティビティの量に基づいて行います。そのスクリプトは、Office 365 グループのみを処理する以前のスクリプトに基づいていました。それ以来、私は持っています スクリプトを微調整 コメントやフィードバックに応答して、すべてがうまくいった。ただし、スクリプトが大規模な環境で実行されると、数千のグループをサポートします。コードは機能しましたが、遅く、タイムアウトやエラーが発生しやすくなっていました。

レポートの高速化

解決策は、できるだけ多くの PowerShell コマンドレットをダンプし、それらをグラフ呼び出しに置き換える方法でした。スクリプト (GitHub からダウンロード可能) は、次の例を取得するためにグラフを使用するようになりました。

  • 過去 90 日間の SharePoint オンライン サイトの使用状況データ。
  • Microsoft 365 グループの一覧とチームが有効なグループの一覧。
  • グループの所有者。
  • 所有者の表示名 (最初の呼び出しが Azure AD 識別子を返すため)。
  • グループ・リストが戻されるときに、グループの一部の拡張プロパティーがフェッチされない。
  • グループ メンバーとゲストの数 (マイクロソフトが追加された後に行う方が簡単 ディレクトリ オブジェクトの高度なクエリ 10月オーバー2020)。
  • チームのアーカイブ済みステータス。

その結果、スクリプトは以前よりもはるかに高速であり、妥当な期間に何千ものグループに対処できます。グループリストのフェッチには、すべてのビットをフェッチするのと同様に、まだ時間がかかります。 取得統一グループ 自動的に戻ります。サービスが軽く読み込まれる良い日には、スクリプトはグループごとに約 6 秒かかります。悪い日には、それは8秒になる可能性があります。それでも、レポート(図1)は約3倍速く生成されます。

Results - Teams and Microsoft 365 Groups Activity Report V5.1
--------------------------------------------------------------   
Number of Microsoft 365 Groups scanned                          : 199    
Potentially obsolete groups (based on document library activity): 121    
Potentially obsolete groups (based on conversation activity)    : 130      
Number of Teams-enabled groups                                  : 72    
Percentage of Teams-enabled groups                              : 36.18%

Total Elapsed time:  1257.03 seconds
Summary report in c:tempGroupsActivityReport.html and CSV in c:tempGroupsActivityReport.csv
チームとグループのアクティビティ レポートからの出力例
図 1: チームとグループのアクティビティ レポートからの出力例

スクリプト内の「高価な」コマンドレットの唯一の残りの使用は、 を取得します。 は、Exchange Online メールボックスに格納されているチームのコンプライアンス項目に関する情報を取得します。Microsoft がメッセージ センター通知 MC234381 に記載されている Teams 使用状況レポートを最終的に出荷すると、この呼び出しの必要性はすぐに消える可能性があります (2 月下旬の予定の配信にもかかわらず、今のところ兆候はありません)。このレポートには、チーム使用状況レポート API の更新が含まれ、期間内の会話の数などのチーム アクティビティ データのフェッチが可能になります。このような場合、私は呼び出しを排除することができます を取得します。 さらなる速度ブーストを得る。

いくつかの余分な仕事が、孤独ではない

PowerShell でグラフを使用することの欠点は、次の手順を実行することです。 Azure アクティブ ディレクトリにアプリを登録する をクリックし、データにアクセスするために必要なアクセス許可がアプリに付与されていることを確認します。これはすぐに第二の性質となり、一度行うと、汎用的な使用を使用して可能なよりも速くデータを処理することができる 取得統一グループ そして ゲットチーム コマンドレットは、一度に複数のグループを処理する際に大きな利点です。


未分類

Posted by admin