【Teams Phone】PowerShellによるリソースアカウントの一括作成

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 の公式ドキュメントに記載されています。

learn.microsoft.com

リソースアカウント一括作成スクリプト

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です。趣味は山登りです。好きな山は富士山です。

担当記事一覧