如何通过Graph API获取含Microsoft Teams Phone许可证的用户列表
解决方案
1. 批量获取所有用户的完整许可证详情
Microsoft Graph 支持通过 $expand 导航属性,一次性获取用户列表及其完整的许可证详情,无需逐个遍历用户。具体请求如下:
GET https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,surname,userPrincipalName,id&$expand=licenseDetails
该请求会返回每个用户的基础信息,同时附带licenseDetails数组,包含你需要的skuPartNumber、servicePlans等完整许可证数据,和单个用户请求/users/{id}/licenseDetails的返回结构一致。
注意事项:
- 该请求默认分页返回100条用户数据,若用户数量超过限制,需通过返回结果中的
@odata.nextLink继续获取后续页数据。 - 需确保调用账号拥有
User.Read.All或Directory.Read.All权限(应用权限或委派权限均可,批量操作推荐应用权限)。
2. 筛选仅拥有Microsoft Teams Phone许可证的用户
你可以通过两种方式直接筛选目标用户,无需先获取所有用户数据:
方式一:通过许可证SKU ID筛选
首先需要确认你的租户中Microsoft Teams Phone对应的SKU ID(可通过GET https://graph.microsoft.com/v1.0/subscribedSkus获取租户所有订阅的许可证信息,找到skuPartNumber为MCOEV或TEAMS_PHONE_STANDARD的条目,提取其skuId)。
使用$filter筛选拥有该SKU的用户:
GET https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,surname,userPrincipalName,id&$filter=assignedLicenses/any(s:s/skuId eq '替换为你的Teams Phone SKU ID')
方式二:通过服务计划名称筛选
如果Teams Phone是某个套餐中的服务计划,可直接筛选包含对应服务计划的用户(服务计划名称通常为MCOEV):
GET https://graph.microsoft.com/v1.0/users?$select=displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,surname,userPrincipalName,id&$expand=licenseDetails&$filter=licenseDetails/any(ld:ld/servicePlans/any(sp:sp/servicePlanName eq 'MCOEV'))
注意事项:
- 嵌套
any的筛选器在用户数量极多时可能存在性能损耗,优先推荐使用SKU ID筛选的方式。 - 不同租户的许可证SKU或服务计划可能存在差异,务必先通过
subscribedSkus端点确认准确的标识。
内容的提问来源于stack exchange,提问作者Jenuel Ganawed
相关产品推荐
相关产品推荐

