Get-AssociatedTeam コマンドレットを使用したチーム メンバーシップの報告

Get-AssociatedTeam コマンドレットを使用したチーム メンバーシップの報告

共有チャンネルダイレクトメンバーシップも含まれる

私は過去に、グループやチームのメンバーシップ レポートを作成するための PowerShell スクリプトの作成方法を説明する記事をいくつか書いてきました (最近の例を次に示します)。通常、スクリプトでは、グループのメンバーシップについて問い合わせたり、ユーザーのセットを見つけたり、どのグループがメンバーになっているかを確認したりします。この種の処理では、処理するユーザー アカウントまたはグループの数が多いため、Graph API 要求が結果を生成する最速の方法です。

これは私を Get-AssociatedTeam コマンドレットは、MicrosoftTeams PowerShell モジュールのバージョン 4.6 でデビューする新しいコマンドレットです。Microsoft はコマンドレットのドキュメントをまだ公開していませんが、その目的は明らかです: ユーザーがメンバーになっているすべてのチームを報告します。そのため、 Get-AssociatedTeam コマンドレットは、スクリプトがすべての Teams のメンバーシップを報告するための基礎となる場合があります。

このようなスクリプトを書く方法の詳細に突っ込む前に、についての興味深いこと Get-AssociatedTeam コマンドレットは、 共有チャンネル.または、共有チャネルの直接メンバーシップ (テナントまたは外部テナントでホストされているチャネルを共有するようにユーザーが明示的に招待された場合)。コマンドレットによって返される情報には、ユーザーがチームの通常のメンバーであり、共有チャネルの直接のメンバーであるすべてのインスタンスが含まれます。残念ながら、チームに対して返される情報には、メンバーシップが通常のチームまたは共有チャンネルのどちらであるかはわかりません。チームの情報の例を次に示します。

GroupId     : a53141d5-54ef-4a6d-877d-63b0cbda409f
DisplayName : Marketing Department
TenantId    : a662313f-14fc-43a2-9a7a-d2e27f4f3478

共有チャンネルのメンバーシップを報告できることは、 Get-AssociatedTeam コマンドレット。Graph API 要求を使用してこの情報を抽出する方法はなく、これらのチャネルの所有者でなくてもプライベート チャネルのメンバーシップを報告する方法もありません。

レポートスクリプトの作成

私が可能性を探るために書いたスクリプト Get-AssociatedTeam です GitHub から入手できます。 それ:

  • 用途 Get-MgUser をクリックして、テナント内のライセンスを取得した Azure AD メンバー アカウントのセットを検索します。ザ Get-AssociatedTeam コマンドレットはゲスト アカウントを処理しません。
  • アカウントごとに、 Get-AssociatedTeam をクリックして、ユーザーのチームのセットを返します。
  • チームごとに、 findTenantInformationByTenantId テナント識別子を解決してテナント名を検索するためのグラフ API。これは、外部テナントへのアクセスを強調するのに役立ちます。
  • 情報を報告します。

メインループのコードは次のとおりです。

[int]$i = 0
$UserTeamInfo =  [System.Collections.Generic.List[Object]]::new()
ForEach ($User in $Users) {
  $i++
  Write-Host ("Processing team membership for {0} ({1}/{2})..." -f $User.DisplayName, $i, $Users.Count)
  [array]$TeamInfo = Get-AssociatedTeam -User $User.UserPrincipalName
  ForEach ($Team in $TeamInfo) {
   If ($Team.TenantId -eq $TenantId) { # Resolve the tenant identifier to a name
      $Name = $TenantName }
   Else {
      $LookUpId = $Team.TenantId.toString()
      $Uri = "https://graph.microsoft.com/beta/tenantRelationships/findTenantInformationByTenantId(tenantId='$LookUpId')"
      $ExternalTenantData = Invoke-MgGraphRequest -Uri $Uri -Method Get
      $Name = $ExternalTenantData.DisplayName 
   }
   $TeamData = [PSCustomObject][Ordered]@{  # Write out details of the team
       Id          = $User.Id
       DisplayName = $User.DisplayName 
       UPN         = $User.UserPrincipalName
       Team        = $Team.DisplayName
       TeamId      = $Team.GroupId
       Tenant      = $Name
       TenantId    = $Team.TenantId}
     $UserTeamInfo.Add($TeamData)
  } #End ForEach Team
} # End ForEach User

データの分析

図 1 は、スクリプトによって生成される情報の種類を示しています。

Get-AssociatedTeam コマンドレットによって生成された Teams メンバーシップのレポート
図 1: Get-AssociatedTeam コマンドレットによって生成された Teams メンバーシップのレポート

メンバーシップデータが利用可能になったら、さまざまな方法でスライスしてサイコロを振ることができます。たとえば、いくつかの簡単な分析では、ユーザーが属するチームの平均数、ユーザーがメンバーになっている外部チームの数などのナゲットが明らかになります。

[array]$ExternalTeams = $UserTeamInfo | Where-Object {$_.TenantId -ne $TenantId} | Sort-Object TeamId -Unique
$ExternalPeople = $UserTeamInfo | Where-Object {$_.TenantId -ne $TenantId} | Sort-Object UPN -Unique
$ExternalPeople = $ExternalPeople.DisplayName -Join ", "
$ExternalTenants = $ExternalTeams.Tenant | Sort-Object -Unique
$AvgTeams = [math]::round(($UserTeamInfo.Count/$Users.Count),2)

Write-Host ""
Write-Host ("Each of the {0} users belongs to an average of {1} teams" -f $Users.Count, $AvgTeams)
Write-Host ("Membership of {0} teams found in {1} external tenant(s)" -f $ExternalTeams.Count, $ExternalTenants.Count)
Write-Host ("These accounts have membership of external teams: {0}" -f $ExternalPeople)

Each of the 28 users belongs to an average of 15.54 teams
Membership of 2 teams found in 1 external tenant(s)
These accounts have membership of external teams: Chris Bishop, James Ryan, Ken Bowers, Sean Landy, Tony Redmond

レポートファイルの生成

慎重にスライスおよびダイシングされたデータは、CSV ファイル、Excel スプレッドシート、HTML ファイルなどとして生成できるレポートの優れた基盤となります。

私は以前にPSWriteHTMLモジュールについて言及しました PowerShell から見栄えの良いレポートを生成する簡単な方法.PSWriteHTML には、さまざまな方法でデータを書式設定する機能とは別に、データをフィルター処理するための非常に優れた検索ビルダー機能が含まれています。たとえば、図 2 では、検索ビルダーを使用して特定のチームのメンバーを検索しました。データに満足したら、PDF、Excel、またはCSVファイルを生成するのはボタンをクリックするのと同じくらい簡単です。

PSWriteHTML を使用したレポート チーム メンバーシップ
図 2: PSWriteHTML を使用したチームのメンバーシップのレポート作成

新しいコマンドレットが便利です

私はいつも、グループやチームのメンバーシップを報告したい組織の数に驚いています。ザ Get-AssociatedTeam コマンドレットを使用すると、Teams のレポートを簡単に作成できます。いつものように、この種のレポートの注意点は、ユーザーとチームの数が数千に増えるにつれて、レポートを生成するスクリプトの実行に時間がかかる可能性があることです。その時点で、 Azure Automation をクリックして、スケジュールされたジョブとしてレポートを作成します。最終的にPowerShell から PDF レポートを生成する必要がある場合は、PSWriteHTML モジュールを参照してください。


新しい PowerShell コマンドレットなどの開発を最新の状態に保つには、 Office 365 for IT プロフェッショナル 電子ブック。毎月の更新により、サブスクライバーは Office 365 全体で発生する最も重要な変更を確実に理解できます。

未分類

Posted by admin