Microsoft 365テナントの移行作業を実施する中で、Microsoft Teams(以下、Teams)のチームを一括で作成することがありました。
スクリプトを実行することで、一括で簡単に作成できたので、備忘も込めてこちらにまとめてみました。
インプット用CSVファイルの作成
以下の内容をまとめ、Excelファイルに起票します。
- mailNickname:アカウント名(@以降のドメインは不要)
- DisplayName:チーム名
- Visibility:チームの種別(PrivateもしくはPublic)

起票した後、拡張子を「.csv」として任意のファイル名で保存します。
日本語などの全角が含まれるチームの文字化け防止のため、ファイルの種類は「CSV UTF-8(コンマ区切り)」を指定してください。

スクリプトの作成・実行
以下の内容でスクリプト(.ps1)ファイルを作成し、実行します。
#Teams管理センターへのサインイン
Connect-MicrosoftTeams
# CSVのパス
$inputCsvPath = "C:\temp\TeamCreate\CreateTeamList.csv"
$outputCsvPath = "C:\temp\TeamCreate\TeamCreateResult.csv"
# 既存の結果を格納するリスト
$results = @()
# CSVの読み込み
$teams = Import-Csv -Path $inputCsvPath
foreach ($team in $teams) {
try {
# New-Teamコマンドレットによるチーム作成
$createdTeam = New-Team -MailNickname $team.mailNickname -DisplayName $team.DisplayName -Visibility $team.Visibility
# 作成成功
$results += [PSCustomObject]@{
mailNickname = $team.mailNickname
DisplayName = $team.DisplayName
Visibility = $team.Visibility
Status = "Success"
TeamId = $createdTeam.GroupId
ErrorMessage = ""
}
} catch {
# 作成失敗
$errorMessage = $_.Exception.Message
$results += [PSCustomObject]@{
mailNickname = $team.mailNickname
DisplayName = $team.DisplayName
Visibility = $team.Visibility
Status = "Failed"
TeamId = ""
ErrorMessage = $errorMessage
}
}
}
# 結果をCSVに出力
$results | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8
CSVのパスについて、「$inputCsvPath」ではファイルを配置した場所に合わせて指定いただき、「$outputCsvPath」では任意のパスを指定してください。
また、スクリプトの保存時、エンコードは「UTF-8(BOM付き)」を選択してください。
尚、スクリプトを実行するとMicrosoft 365のサインインが求められるので、Teams管理者の権限を持ったアカウントでサインインしてください。(サインインしたアカウントが自動的に所有者となります)
結果の確認
スクリプトの中の「$outputCsvPath」で指定したパスに、作成結果のファイルが生成されます。
Statusから正常に登録されたかどうかを確認することができます。

Teams管理センター上でもチームが作成されていることが確認できます。

おわりに
Teamsのチームを一括で作成するスクリプトをご紹介しました。
本スクリプトは、所有者が管理者アカウントのみのシンプルな構造になっているため、用途としてはテナント間の移行の準備等に限定されるかと思います。
今後、他の所有者やユーザーの追加や、細かい設定ができるなど改良して汎用的なものが作れたらと思っています。