如何通过Graph API或PowerShell获取Microsoft Teams直连路由SBC状态
获取Microsoft Teams直连路由SBC状态的方法
目前Microsoft Teams管理门户的「直连路由运行状况仪表板」数据,可通过Microsoft Graph API结合PowerShell实现批量获取,以下是具体方案:
使用Microsoft Graph API
虽然没有直接对应仪表板的单一端点,但通过两个核心端点组合,就能拿到匹配的信息:
- 获取SBC实时状态:调用
GET https://graph.microsoft.com/v1.0/communications/directRouting/sbcs,返回每个SBC的名称、FQDN、在线状态(isOnline)、最近连接时间(lastConnectionDateTime)、状态说明(statusMessage),这些字段完全对应仪表板里的SBC状态模块。 - 获取直连路由配置:调用
GET https://graph.microsoft.com/v1.0/communications/directRouting/routes,能拿到路由配置文件的名称、关联的SBC ID,通过这个ID可以把路由和SBC状态关联起来,还原仪表板里的路由-SBC对应关系。
权限要求:需要DirectRouting.Read.All或CallRecord.Read.All权限,推荐用应用权限(适合批量自动化场景),或委派权限(手动查询)。
使用PowerShell实现(基于Graph API)
Teams PowerShell模块没有直接获取SBC状态的 cmdlet,所以我们直接调用Graph API来封装逻辑:
# 安装/导入Microsoft Graph通信模块 Install-Module Microsoft.Graph.Communications -Force -AllowClobber Import-Module Microsoft.Graph.Communications # 连接到Graph,授予DirectRouting读取权限 Connect-MgGraph -Scopes "DirectRouting.Read.All" # 获取所有SBC的状态数据 $sbcs = Get-MgCommunicationDirectRoutingSbc # 获取所有直连路由配置,并关联对应的SBC状态 $routeStatusList = foreach ($route in Get-MgCommunicationDirectRoutingRoute) { $matchedSbc = $sbcs | Where-Object { $_.Id -eq $route.SbcId } [PSCustomObject]@{ 路由配置名称 = $route.Name SBC名称 = $matchedSbc.Name SBC地址 = $matchedSbc.Fqdn SBC状态 = if ($matchedSbc.IsOnline) { "在线" } else { "离线" } 最近连接时间 = $matchedSbc.LastConnectionDateTime 状态备注 = $matchedSbc.StatusMessage } } # 输出结果(可导出为CSV) $routeStatusList | Format-Table -AutoSize # $routeStatusList | Export-Csv -Path "Teams直连路由状态.csv" -Encoding UTF8 -NoTypeInformation
运行脚本后,会输出和仪表板一致的「路由配置-SBC状态」对应数据,也可以导出为CSV文件存档。
关键注意点
- 数据延迟:Graph API的状态数据和管理门户仪表板有2-5分钟的延迟,属于正常同步范围。
- 权限验证:确保操作账号拥有Teams管理员、全局管理员权限,或已被分配包含
DirectRouting.Read.All的自定义角色。 - 状态字段说明:
isOnline直接映射仪表板的在线标识,statusMessage会显示SBC离线的具体原因(如连接超时、认证失败等)。
内容的提问来源于stack exchange,提问作者Palezvar
相关产品推荐
相关产品推荐

