识别处于provisioning状态的Teams站点及判断Office 365组是否关联Team的方法
针对你的几个需求,我整理了实际项目中常用的解决方案,希望能帮到你:
因为Teams站点本质是关联Office 365组的SharePoint站点,我们可以通过自动化流程来实现属性自动添加,且精准针对Teams类型的站点:
利用Microsoft Graph Webhook触发
注册Graph的groupCreated事件webhook,当新组创建时,先判断组的resourceProvisioningOptions属性是否包含Team(这是Teams组的标志)。确认是Teams组后,你可以:- 更新O365组的自定义扩展属性(比如用
extensionAttributes字段,或者创建自定义扩展) - 调用PnP PowerShell或SharePoint REST API,给对应的SharePoint站点添加Property Bag属性
举个PnP PowerShell给站点加属性的例子:
Connect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yourteamsite" -Interactive Set-PnPPropertyBagValue -Key "IsProvisionedTeamsSite" -Value "True"- 更新O365组的自定义扩展属性(比如用
使用Azure Logic Apps(低代码方案)
直接设置触发器监听“当新Office 365组创建”,添加过滤条件只保留resourceProvisioningOptions包含Team的组,然后调用Graph API或PnP动作给站点添加属性。这种方案不需要维护代码,稳定性更高。
Teams站点的创建是异步流程,你可以通过两个维度判断:
检查O365组的
provisioningStatus
调用Microsoft Graph的GET /groups/{group-id}接口,查看provisioningStatus字段:- 值为
Provisioning:表示组及关联的Teams、SP站点还在创建中 - 值为
Success:表示创建完成
- 值为
检查SharePoint站点状态
用PnP PowerShell或SharePoint REST API获取站点信息,查看Status属性:Connect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yourteamsite" -Interactive $site = Get-PnPSite Write-Host "Site provisioning status code: $($site.Status)"其中
0代表站点已就绪,1代表正在创建中。
完全可以通过O365组属性或站点Property Bag来判断,这里有几种可靠的方法:
O365组的
resourceProvisioningOptions属性
这是最权威的判断方式:如果组的resourceProvisioningOptions数组中包含Team,说明该组已经关联了Teams站点。调用Graph API获取组信息时就能直接读取这个字段。O365组的
resourceTypes属性
这个字段会列出组关联的所有服务类型,比如Team、SharePointSite等。只要包含Team,就表示已关联Teams。SharePoint站点的Property Bag
- 可以查看内置的
TeamId属性:如果站点关联了Teams,这个属性会存储Teams的ID,值不为空即表示已关联 - 也可以像前面说的,自己添加自定义属性(比如
IsTeamsSite),后续直接读取这个值判断
用PnP PowerShell读取
TeamId的例子:$teamId = Get-PnPPropertyBagValue -Key "TeamId" if ($teamId) { Write-Host "该站点已关联Teams,ID为:$teamId" } else { Write-Host "该站点未关联Teams" }- 可以查看内置的
内容的提问来源于stack exchange,提问作者Thomas Segato

