PowerShell を使用した Teams ディレクトリの作成

PowerShell を使用した Teams ディレクトリの作成

Teams ディレクトリは、利用可能なものをユーザーに知らせます

ブログの投稿、記事、本は、時間の経過とテクノロジーの進化の人質です。私はこの真実を何年も前から知っていましたが、定期的に繰り返され続けています。たとえば、今週はセッションに取り組んできました。 European SharePoint Conference (ESPC)11月28日から12月1日までコペンハーゲンで開催されます。

私のセッションは、割り当てられた時間でカバーすることが不可能なトピックである、成功のためにTeamsを管理することについてです。したがって、焦点が必要であり、Teamsの無秩序な増加や自動化などの問題について話し合うことにしました。スライドを準備しているときに、2019年4月に書いた Petri.com 記事を見て、 Teamsディレクトリの欠如とそのようなディレクトリを生成する方法.Teams ディレクトリは、チームを作成するユーザーが適切なチームが既に使用可能かどうかを知るのに役立ちます。また、ユーザーが参加したいチームを見つけるのにも役立ちます。

改善点の発見

私がその時に書いたスクリプトのコードは、私が今書くものではありません。これは当然のことです。私たちは皆、時間の経過とともに知識を蓄積し、その知識は私たちが問題を解決する方法について私たちを導きます。新しいテクノロジーとアップデートも利用可能になり、新しいテクノロジーと新しい知識の組み合わせにより、問題の解決策がおそらく新しいアプローチを模索することは避けられません。改善すべき領域を見つけるためにコードのレビューを開始する以外に何もできませんでした。

レビューの後、私は1つのテクノロジーギャップとスクリプトを改善するためのいくつかの方法を見つけました:

  • Teams は、チームへのディープリンクを作成するために使用される内部識別子の形式を変更しました。最近作成されたチームは新しい形式を使用しますが、古いチームは古い形式を使用します。明らかに、コードは両方の形式に対処する必要があります。
  • 古いスクリプトでは、Microsoft Teams および Exchange Online 管理 PowerShell モジュールのコマンドレットを使用します。マイクロソフトは 2019 年以降、両方のモジュールを改善してきましたが、Microsoft Graph PowerShell SDK を使用すると、特にテナント内のチームの数が数千に増えた場合に、パフォーマンスが向上するはずです。少なくとも、それは理論です。
  • 出力(HTMLファイルとCSVファイル)を改善することができます。たとえば、ImportExcel モジュールは、プレーンな CSV ファイルではなく、適切に書式設定された Excel ワークシートの生成をサポートしています。

コードの書き換え

の交換 チーム取得 そして 取得-統合グループ Microsoft Graph PowerShell SDK を使用したコマンドレットは簡単です。ザ Get-MgTeam コマンドレットは両方のジョブを実行します。したがって、テナント内のチームのセットを見つけるには、次のコマンドを実行します。

[Array]$Teams = Get-MgTeam -All

これは、 Get-MgGroup チーム対応グループを検索するためのフィルターを含むコマンドレット:

[array]$Teams = Get-MgGroup -Filter "resourceProvisioningOptions/Any(x:x eq 'Team')" -All 

その後、チームのセットをループして、各チームに関する情報を取得します。これは、チームが返すデータという問題が発生したときです。 Get-MgTeam 内部識別子 (次のような値) は含まれません。 19:BxPfo_xgaoGDQMvyuDzztvrQjLWNRvY6sGoLWGLriHA1@thread.tacv2).これは、コマンドレットが 内部 ID プロパティを Property パラメーターで指定します。

内部識別子は、チームのディープリンクを形成するために必要です。完全なディープリンクには、内部識別子、チームのグループ識別子、およびテナント識別子が含まれています。ユーザーはディープリンクをクリックしてチームに直接アクセスし、興味があればチームへの参加を申請できます。完全なディープリンクは次のようになります。

https://teams.microsoft.com/l/team/19:0eb0233aca6640bf84b2ccddd8fc227e@thread.skype/conversations?groupId=2856abd3-85f5-4cac-ba5f-6f8c2e7047c6&tenantId=a262313f-14fc-43a2-9a7a-d2e27f4f3478

回避策は、 Get-MgTeam をクリックして、ループ内の各チームを処理します。たとえば、これはコードが 内部 ID:

$InternalId = Get-MgTeam -TeamId $T.Id | Select-Object -ExpandProperty InternalId

解決策は存在しますが、それはエレガントでも満足のいくものでもありません。への追加の呼び出し Get-MgTeam スクリプトの速度を落とし、Teams および Exchange Online コマンドレットの代わりに Graph API 要求を使用する利点の一部を削除します。複数のチームの内部識別子を返さないことは、パフォーマンスのために発生しない可能性があります (識別子は別のデータ ストアからの取得が必要になる場合があります) が、明示的に要求されたときにコマンドレットがプロパティの取得に失敗すると、バグのようです。Microsoft Graph PowerShell SDKのバージョン1.15を使用しましたが、Microsoftが将来のバージョンで問題を修正する可能性があります。

属の価値L-目的コマンドレット

スクリプトの前のイテレーションでは、 取得-統合グループ コマンドレット。このコマンドレットの大きな利点の 1 つは、グループの所有者やメンバーと外部メンバーの数などの興味深い情報が返されることです。この情報を要求する必要はありません。コマンドレットは自動的に返します。

ただし、Microsoft Graph PowerShell SDK に切り替えるということは、この情報を取得するためのコードをスクリプトに含める必要があることを意味します。これはそれほど難しいことではありませんが(この記事では基本について説明します)、別のことです。

出力の改善

上記のように、私は ImportExcel モジュールを使用して、CSV ファイルの代わりに Excel ワークシートを出力しました。また、ディープリンクをクリック可能にすることで、HTMLページの有効性を向上させたいと考えました。HTML <a href=>タグを追加して遊んでも、次のコマンドで出力をフォーマットするまでうまく機能しませんでした。

Add-Type -AssemblyName System.Web
[System.Web.HttpUtility]::HtmlDecode($htmlreport) | Out-File $ReportFile -Encoding UTF8

図 1 に HTML 出力を示します。明らかに、他のチーム プロパティがディレクトリに含まれる可能性があります。ここでの目的は、Teams ディレクトリの標準を設定するのではなく、何が可能かを探り、手法をデモンストレーションすることです。

HTML ファイル内のチーム ディレクトリ
図 1: HTML ファイル内のチーム ディレクトリ

たとえば、ディレクトリにはすべてのチームが含まれています。ユーザーは所有者の承認なしでこれらのチームに参加できるため、パブリック チームのみを含める方がよいと判断する場合があります。

Teams ユーザーがディレクトリを使用できるようにする

Teams ディレクトリをユーザーが使用できるようにするには、いくつかの方法があります。

  • 企業の Web サイトにページを発行します。
  • Excel ワークシートを SharePoint Online リストにインポートし、ユーザーがリストを使用できるようにします (たとえば、チャネル タブとして)。
  • ブラウザーから印刷機能を使用して、PDF を作成します。PDF を SharePoint Online にアップロードし、その PDF を指すチャネル タブを作成します。Ctrl キーを押しながら PDF 内のリンクをクリックしてください。
  • HTML ファイルと XLSX ファイルを SharePoint Online にインポートし、ユーザーがそこからファイルをダウンロードできるようにします。

図 2 は、SharePoint Online にインポートされ、チャネル タブからアクセスされた Web ページから作成された PDF を Teams ビューアーに表示する方法を示しています。

チャネル タブからアクセスする PDF ファイルとして表示される Teams ディレクトリ
図 2: チャネル タブからアクセスする PDF ファイルとして表示される Teams ディレクトリ

継続的なメンテナンスは難しい部分です

チームディレクトリの作成は特に難しいことではありません。この場合、唯一の技術的な問題は、ディープリンクを作成する方法を理解することでした。ディレクトリの継続的なメンテナンスに関連する問題は、次のようなより平凡です。

  • ディレクトリを更新する頻度。
  • ディレクトリの更新に使用するメカニズム ( Azure Automation ランブック 定期的にファイルを生成する良い方法です)。
  • ユーザーがディレクトリを利用できるようにする最良の方法は何ですか?

更新されたスクリプトは次のとおりです。 GitHub で利用可能.Teamsディレクトリを生成する別の方法を見つけた場合は、コメントでお知らせください。


未分類

Posted by admin