ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

Microsoft Teamのメンバーの名前・所属・役職をPowerShellを使ってCSVに出力する

f:id:wataruf01:20220321235843p:plain

チームのメンバーを棚卸したいという要望を受けてPowerShellスクリプトを作成しました。
github.com

背景

該当のチームは社内の全ての部署の社員が参加するチームであり、会社に対する要望や意見について情報交換をすることを目的にしたチームです。

このチームは会社の役員(社長と執行役員)を含めないルールとしています。そのため、チームの棚卸のときにはメンバーの抜け漏れのチェックだけでなくルール上追加されてはいけない社員を追加していなかのチェックを行う必要があります。

このチームメンバーの棚卸を行ういい方法はないかという質問をうけて、メンバー一覧を役職名を含めて出力するスクリプトを作成しました。

そもそもTeamsのメンバ一覧は標準機能で出力できないのか?

2022年3月現在、該当する機能は無いです。「こんな機能がリリース予定のようです」等の情報がもしあれば共有いただけると嬉しいです。

ではどうやってメンバー一覧を出力するか

PowerShellを使います。
まずは、スクリプトを実行するために必要なモジュールをPCにインストールします。管理者権限で下記コマンドを実行してください。

モジュールのインストールコマンド

Install-Module MicrosoftTeams
Install-Module AzureAD

モジュールのインストールが完了したら、下記スクリプトを使います。
以下の2箇所はテナントによって置き換えてください。
・実行アカウントのID/パスワード
・対象チームのID

チームメンバーをCSVに出力するスクリプト

$adminUserName  = "XXX@XXX.onmicrosoft.com"
$securePassword = "XXX" | ConvertTo-SecureString -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential($adminUserName, $securePassword)

Connect-AzureAD -Credential $credentials
Connect-MicrosoftTeams -Credential $credentials

#全ユーザーを取得
$azureADAllUser= Get-AzureADUser -All $true

#チームのメンバーをCSVに出力
$teamMembers =  Get-TeamUser -GroupId "XXXX-XXXX-XXX-XXXX-XXXX"
$members = @()
foreach($member in $teamMembers)
{
    $currentUser = $azureADAllUser | where ObjectID -EQ $member.UserId

    $obj = New-Object PSObject
    $obj | Add-Member -MemberType NoteProperty -Name DisplayName -Value $currentUser.DisplayName
    $obj | Add-Member -MemberType NoteProperty -Name Mail        -Value $currentUser.UserPrincipalName
    $obj | Add-Member -MemberType NoteProperty -Name Department  -Value $currentUser.Department
    $obj | Add-Member -MemberType NoteProperty -Name JobTitle    -Value $currentUser.JobTitle
    $members += $obj
}

$members | Export-Csv -Path .\TeamMember.csv -Encoding UTF8 -NoTypeInformation

テナントによって置き換える対象は以下の2つです。

ひとつめ。実行アカウントのID/パスワード。
$adminUserName = "XXX@XXX.onmicrosoft.com"
$securePassword = "XXX" | ConvertTo-SecureString -AsPlainText -Force

ふたつめ。対象チームのID。
#チームのメンバーをCSVに出力
$teamMembers = Get-TeamUser -GroupId "XXXX-XXXX-XXX-XXXX-XXXX"

チームのIDは「チームへのリンクを取得」から入手できます。
f:id:wataruf01:20220322000029p:plain

ポップアップで表示されたリンクをコピーします。
f:id:wataruf01:20220322000044p:plain

メモ帳に貼り付けます。「groupID」がチームのIDなのでこの部分をコピーして先ほどのスクリプトで使用します。
f:id:wataruf01:20220322000054p:plain

以上です。