Teams Phone を効率的に運用するためには、自動応答(Auto Attendant)や 通話キュー(Call Queue)で使用するリソースアカウントの作成・管理が欠かせません。
特に複数拠点や部門を持つ環境では、GUIで1件ずつ作成する方法は非効率です。
本記事では、PowerShellを利用してCSVファイルの情報をもとに、Teams Phoneのリソースアカウントを一括作成する方法をご紹介します。
※本記事は、Microsoft Teams 管理者を対象としています。
本記事でできること
- リソースアカウント(自動応答/通話キュー)の一括作成
- CSVベースでの再現性の高い作成手順
- PowerShellによる効率的な初期構築
事前準備
必要なモジュール
事前に以下のPowerShellモジュールをインストールしてください。(初回のみ)
Install-Module MicrosoftTeams
Install-Module Microsoft.Graph
必要な権限
- Teams管理者
- Entra IDでユーザー更新・ライセンス付与が可能な権限
CSVファイルの準備
以下の形式でCSVファイルを作成します。
- 文字コード:UTF-8
- 列名:UPN / DisplayName / Type

それぞれの項目の詳細は以下の通りです。
| 項目 | 内容 |
| UPN | リソースアカウントのUPN |
| DisplayName | リソースアカウントの表示名 |
| Type | AA もしくは CQ |
※「AA」は自動応答(Auto Attendant)、「CQ」は通話キュー(Call Queue)を表します。
リソースアカウントの作成
Application ID について
リソースアカウント作成時には用途に応じたApplication ID を指定します。
このApplication IDは、Microsoft があらかじめ定義しているTeamsのアプリケーションを識別するためのGUIDであり、環境に依存せず、全環境で共通かつ一意の値です。
| 自動応答 | ce933385-9390-45d1-9512-c8d228074e07 |
| 通話キュー | 11cd3e2e-fccb-42ad-ad00-878b93575e07 |
※上記GUID値は、Microsoft Learn の公式ドキュメントに記載されています。
リソースアカウント一括作成スクリプト
PowerShellを開き、以下のスクリプトを実行します。
# ===== 接続 =====
Connect-MicrosoftTeams
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"
# ===== CSV読み込み =====
$csv = Import-Csv "C:\work\ResourceAccount.csv" -Encoding UTF8
# ===== Application ID =====
$AA_AppId = "ce933385-9390-45d1-9512-c8d228074e07"
$CQ_AppId = "11cd3e2e-fccb-42ad-ad00-878b93575e07"
# ===== ライセンスの取得・確認 =====
$sku = Get-MgSubscribedSKU | Where-Object { $_.SkuPartNumber -eq "PHONESYSTEM_VIRTUALUSER" }
if (-not $sku) { throw "PHONESYSTEM_VIRTUALUSER が見つかりません。契約/権限をご確認ください。" }
foreach ($item in $csv) {
$upn = $item.UPN
$displayName = $item.DisplayName
$maxWaitSeconds = 120
$waitInterval = 15
$elapsed = 0
# Application IDの判定
if ($item.Type -eq "AA") {
$AppId = $AA_AppId
}
elseif ($item.Type -eq "CQ") {
$AppId = $CQ_AppId
}
else {
Write-Host "Type error : $($item.UPN)"
continue
}
if (![string]::IsNullOrWhiteSpace($upn)) {
Write-Host "=== リソースアカウント作成: $upn ==="
# リソースアカウント作成
New-CsOnlineApplicationInstance `
-UserPrincipalName $upn `
-ApplicationId $AppId `
-DisplayName $displayName | Out-Null
# ライセンスの割り当て
while ($true) {
try {
# UsageLocation設定
Update-MgUser -UserId $upn -UsageLocation "JP" -ErrorAction Stop | Out-Null
# UsageLocation設定確認
$user = Get-MgUser -UserId $upn -ErrorAction Stop
Write-Host "UsageLocation: $($user.UsageLocation)"
# ライセンス割り当て
Set-MgUserLicense -UserId $upn `
-AddLicenses @(@{SkuId = $sku.SkuId }) `
-RemoveLicenses @()`
-ErrorAction Stop | Out-Null
Write-Host "ライセンス割り当て完了: $upn"
break
}
catch {
Write-Warning "ユーザー、もしくはUsageLocation設定が未反映です。再試行します。経過時間: $elapsed 秒"
if ($elapsed -ge $maxWaitSeconds) {
Write-Error "最大待機時間を超えました。処理を中断します。"
break
}
Start-Sleep -Seconds $waitInterval
$elapsed += $waitInterval
}
}
}
else {
Write-Warning "UPN が空です。スキップします。"
}
}
作成結果の確認
テナント内のリソースアカウント一覧は以下のコマンドを実行することで確認できます。
Get-CsOnlineApplicationInstance
特定のアカウントを確認する場合は、以下のコマンドを実行することで確認できます。
Get-CsOnlineApplicationInstance -Identity "アカウントのUPN"
おわりに
本記事で紹介した方法を活用することで、Teams Phone 環境におけるリソースアカウント作成を短時間かつ確実に実施することができます。
特に複数の自動応答や通話キューを構築する環境では、CSV+PowerShellによる一括作成が非常に有効です。
本記事が、皆さまのTeams Phone 環境構築・運用の一助となれば幸いです。
城下 和也(日本ビジネスシステムズ株式会社)
クラウドテクノロジーサービス事業本部所属 モダンワークプレイス1部に所属。 Microsoft 365 製品を中心に扱ってます。主にTeams Phoneです。趣味は山登りです。好きな山は富士山です。
担当記事一覧