如何将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 -AllowClobberInstall-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, LineURILineURI字段默认格式为tel:+<号码字符串>,可根据业务需要做字符串清洗,提取纯号码内容。 - 匹配AD用户更新属性
遍历用户映射关系,通过Azure AD ObjectId或UPN匹配本地AD对应用户,将清洗后的号码写入Business Phone Number(对应AD属性名OfficePhone)字段:
纯云环境无需操作本地AD,直接调用Graph API的用户更新接口,将号码写入Azure AD用户的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 } }businessPhones属性即可。 - 配置自动同步
将调试完成的脚本注册为Windows计划任务,根据业务需要设置同步周期(建议每日1次),即可保证AD侧存储的号码与Teams侧分配号码实时一致。
注意:如果你的本地AD配置了AAD Connect同步到Azure AD,需要确认同步规则没有反向覆盖Azure AD侧的
businessPhones字段,避免同步后号码被清空。
内容的提问来源于stack exchange,提问作者User7723337
相关产品推荐
相关产品推荐

