👥

Microsoft Teams のチームに大量のメンバーをメールアドレスから自動で追加する方法

2022/12/12に公開約5,000字

本ドキュメントは PowerShell を用いた Microsoft Teams のチームへの自動一括追加のやり方について解説したものです。
学生・社員を特定のチームに一括で追加したい場合などに活用してください。


これは 天久保 Advent Calendar 2022 の 12 日目の記事です。


背景

Microsoft Teams に一括で大量のメンバーを追加したいことがたまにあります。しかし現在(2022/12/12)の Microsoft Teams の仕組みでは、名前での個別入力か、配布リスト・セキュリティグループでの一括追加しかできません。

しかし大学の授業や会社のプロジェクトなどで、事前にグループなどが定義されていないたくさんのメンバーを一度に追加したいことがあると思われます。その場合はひとりひとりのメールアドレスを一つづつ入力していくしかないのが現状です。

とはいえ、それでは手間がかかりますし、何よりミスを誘発します。

そこで本記事では PowerShell を用いた Microsoft Teams のチームへの自動一括追加のやり方について解説します。他にもチームへメンバーを自動で一括追加する方法がありますが、この方法が一番シンプルで、余計なものをあまりインストールしなくても良いのでオススメです。

もし以下の方法でエラーが出た場合はコメントをいただけると幸いです。

前提条件

  • Windows 11 (10) を使用している
    • 筆者が Windwos 11 Home で確認したというだけで Windows 10 でも動作すると思います
  • チームに追加したいメンバーのメールアドレスが分かっている
  • あなたが追加したいチームの管理者である
    • ご自身でチームを作成した場合はおそらく管理者になっているはずです

実行手順

全体方針

PowerShell から Microsoft Teams PowerShell モジュールを用いて、CSV に保存されたメールアドレスの情報をもとに任意のチームにメンバーを一括追加します。
WEB API 経由で追加する方法などもありますが、今回 Microsoft Teams PowerShell モジュールを用いる理由は、他の方法と比べて Teams との連携がスムーズなためです。

Microsoft Teams PowerShell モジュールをインストール

Microsoft Teams PowerShell モジュールは PowerShell から Microsoft Teams と連携するためのツールです。PowerShell から連携できるので、今回のようにコマンドラインから色々な操作を自動化することができます。

スタートメニューから管理者権限で PowerShell を起動

後述するモジュールのインストールは管理者権限で行う必要があります。色々な方法がありますがここでは PowerShell 自体を管理者権限で起動する方法を取ります。

スタートメニューで PowerShell と検索
「管理者として実行する」から PowerShell を管理者モードで起動
PowerShell を管理者モードで起動する

モジュールをインストール

以下のコマンドでインストールすることができます。
もし失敗する場合は PowerShell のバージョンが古い、適切な .NET Framework がインストールされていないなどが考えられます。PowerShellGallery を使用したインストールに詳しい情報がありますので参考にしてみてください。

> Install-Module -Name PowerShellGet -Force -AllowClobber
> Install-Module -Name MicrosoftTeams -Force -AllowClobber

実行結果
実行結果

メールアドレスを CSV 形式で保存

追加したいメンバーのメールアドレスを CSV 形式で保存します。ここではemails.csvとして保存します。
先頭はemailという文字で始まり、一行ごとにメールアドレスを保存します。以下のような形式です。

email
h20xxxx1@hosokawa.dev
h20xxxx2@hosokawa.dev
h20xxxx3@hosokawa.dev

実行権限を設定

今後のスクリプトを実行するのには現在のユーザに権限を設定する必要があります。
Set-ExecutionPolicy[1]は PowerShell ポリシーを設定するコマンドです。
このコマンドでは-Scope Processを指定しているため現在のプロセスにいる間だけ権限が付与されます。そのため PowerShell を途中で閉じた場合はこの作業をもう一度行う必要があります。
それが面倒な場合は-Scope CurrentUserを使用して現在のユーザに対して恒久的に権限を与えてください。

> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Microsft Teams と連携

ここでは Microsoft Teams PowerShell モジュールと Microsoft Teams を連携する作業を行います。

Connect-MicrosoftTeamsを入力するとポップアップが表示されるのでログインをします。

> Connect-MicrosoftTeams  # Teams と接続し権限を取得

以下のようにポップアップが出てきて Microsoft Teams の連携をするためにサインインが求められるので、サインインします。
ポップアップで表示されるログイン画面

自動追加スクリプトを作成

グループ ID を調べる

グループ ID とはチームに割り振られた ID のことです。

PowerShell で以下のコマンドを入力することでグループ ID を調べることができます。
-Userオプションには自分のアカウントのメールアドレスを入れてください。自分が所属しているチームのグループ ID が取得できます。

> Get-Team -User h2xxxxxx@hosokawa.dev  # チーム名とグループ ID の一覧を取得
GroupId                              DisplayName
-------                              -----------
2ef068eb-dea5-476d-98dc-e6059874d59d チーム AAAAAAA...
ce80767c-06de-4009-a4c4-c86f723efc01 チーム BBBBBBB...
432ca0b3-f219-4089-ba21-cf520bed18f8 チーム CCCCCCC
75f03c09-be9b-45d0-846d-a085f54916af チーム DDDDDDD...
87291ee5-608f-4ac0-9857-609f87dba60b チーム EEEEEEE...
458d7f8b-4cc0-46f6-b9f2-e98bc7bf28cd チーム HOSOKAWA...

スクリプトをダウンロード、修正

以下のスクリプトを作成します。
グループ ID と CSV のフルパスを設定するのを忘れないでください。
なおStart-Sleep 10;の箇所で待ち時間を短くすると手元の環境では失敗することがありました。

$groupId = "<グループ ID>"     # ex) 00000000-0000-0000-0000-000000000000
$csvPath = "<CSV のパス>"   # ex) .\emails.csv

Connect-MicrosoftTeams
Import-Csv -Path $csvPath | ForEach-Object {
    Add-TeamUser -GroupId $groupId -User $_.email;
    Write-Output "Added $($_.email)";
    Start-Sleep 10;
}

このスクリプトは以下のようにしてダウンロードすることもできます。

>  wget https://raw.githubusercontent.com/HosokawaR/teams-script/main/bulk-add-member.ps1 -OutFile bulk-add-member.ps1

スクリプトを実行

その後スクリプトを起動します。

> powershell .\bulk-add-member.ps1

確認

Teams のメンバータブから確認できます。ただし手元で試したときには設定が反映されるまでラグがありました。
なお場合によっては反映まで 24 - 48 時間かかることもあるそうです。[2]

脚注
  1. https://docs.microsoft.com/ja-jp/previous-versions/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.1 ↩︎

  2. https://docs.microsoft.com/en-us/powershell/module/teams/add-teamuser?view=teams-ps#:~:text=the command will return immediately%2C but the teams application will not reflect the update immediately. the change can take between 24 and 48 hours to appear within the teams client. ↩︎

Discussion

ログインするとコメントできます