You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MS Teams用户电话号码同步至Active Directory

Teams电话号码同步至AD用户属性实现方案

目前原生Graph API暂不支持直接读取MS Teams分配给用户的Phone Number字段,可通过PowerShell自动化脚本完成号码同步,同步后即可通过https://graph.microsoft.com/v1.0/users?$select=businessPhones接口直接读取号码信息,具体操作步骤如下:

  • 前置依赖准备
    在运行脚本的设备上安装所需PowerShell模块,执行命令:
    Install-Module -Name MicrosoftTeams -Force -AllowClobber
    Install-Module -Name ActiveDirectory -Force -AllowClobber
    脚本运行账号需同时具备Teams管理员权限、本地AD用户属性修改权限;如果是纯云无本地AD环境,无需安装ActiveDirectory模块,提前配置Graph API对应的用户属性修改权限即可。
  • 拉取Teams用户号码映射关系
    连接Teams服务后,通过命令拉取所有已分配号码的用户及对应号码信息,不要单独使用Get-CsOnlineTelephoneNumber,搭配Get-CsOnlineUser可直接建立用户与号码的准确映射,避免匹配错误:
    # 登录Teams管理员账号
    Connect-MicrosoftTeams
    # 筛选所有已配置LineURI(即分配的Teams电话号码)的用户,提取用户ID与号码字段
    $teamsUserMappings = Get-CsOnlineUser -Filter {LineURI -ne $null} | Select-Object ObjectId, UserPrincipalName, LineURI
    
    拿到的LineURI字段默认格式为tel:+<号码字符串>,可根据业务需要做字符串清洗,提取纯号码内容。
  • 匹配AD用户更新属性
    遍历用户映射关系,通过Azure AD ObjectId或UPN匹配本地AD对应用户,将清洗后的号码写入Business Phone Number(对应AD属性名OfficePhone)字段:
    foreach($teamsUser in $teamsUserMappings){
        # 清洗号码,移除tel:前缀
        $targetPhone = $teamsUser.LineURI -replace '^tel:',''
        # 匹配本地AD用户,可根据实际部署情况改用UserPrincipalName作为匹配键
        $matchedAdUser = Get-ADUser -Filter {AzureADObjectId -eq $teamsUser.ObjectId} -Properties OfficePhone
        if($matchedAdUser){
            # 更新办公电话字段
            Set-ADUser -Identity $matchedAdUser -OfficePhone $targetPhone
        }
    }
    
    纯云环境无需操作本地AD,直接调用Graph API的用户更新接口,将号码写入Azure AD用户的businessPhones属性即可。
  • 配置自动同步
    将调试完成的脚本注册为Windows计划任务,根据业务需要设置同步周期(建议每日1次),即可保证AD侧存储的号码与Teams侧分配号码实时一致。

注意:如果你的本地AD配置了AAD Connect同步到Azure AD,需要确认同步规则没有反向覆盖Azure AD侧的businessPhones字段,避免同步后号码被清空。

内容的提问来源于stack exchange,提问作者User7723337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:54:21