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

如何定期清理已在主租户删除的Azure AD B2B来宾用户?

Azure AD B2B来宾用户定期清理方案

我们的Azure AD中有多个客户团队及大量B2B来宾用户,近期发现用户在其主租户被删除后,仍会留存于我们的AD中。除了基于非活跃时长删除外,希望通过以下逻辑实现定期清理:

For each user in guest users
   if removed from home tenant
      delete user

推测来宾用户在租户中存在相关标记,求通过Graph或PowerShell实现的可行方案?


核心判断依据

当B2B来宾用户在主租户被删除后,当前租户中的该用户会被自动标记为externalUserState = "Disabled",同时externalUserStateChangeDateTime会记录状态变更的时间。我们可以基于这个属性筛选出需要清理的目标用户。

一、Graph API实现方案

1. 查询待清理的来宾用户

调用Graph API的用户查询接口,精准筛选状态为Disabled的来宾用户:

GET https://graph.microsoft.com/v1.0/users?$filter=userType eq 'Guest' and externalUserState eq 'Disabled'&$select=id,userPrincipalName,displayName,externalUserStateChangeDateTime

2. 删除目标用户

对查询到的每个用户,调用删除接口完成清理:

DELETE https://graph.microsoft.com/v1.0/users/{user-id}

3. 定期执行

可以通过Azure Logic Apps或Azure Functions设置定时触发(比如每周一次),自动执行查询和删除流程。

二、PowerShell实现方案

1. 准备环境并连接Graph

# 安装Microsoft Graph用户模块(首次执行)
Install-Module -Name Microsoft.Graph.Users -Force -AllowClobber
# 连接Graph,需申请User.Read.All和User.Delete.All权限
Connect-MgGraph -Scopes "User.Read.All", "User.Delete.All"

2. 查询待清理的来宾用户

# 获取所有状态为Disabled的来宾用户,返回关键信息
$disabledGuests = Get-MgUser -Filter "userType eq 'Guest' and externalUserState eq 'Disabled'" -Select Id, UserPrincipalName, DisplayName, ExternalUserStateChangeDateTime

3. 批量删除用户

# 遍历输出待删除用户(确认无误后再取消删除命令的注释)
foreach ($guest in $disabledGuests) {
    Write-Host "待删除来宾用户: $($guest.DisplayName) ($($guest.UserPrincipalName))"
    # 执行删除(取消注释启用)
    # Remove-MgUser -UserId $guest.Id -Confirm:$false
}

4. 定期执行

可以通过Windows任务计划程序或Azure Automation Runbook设置定时任务,自动运行该脚本。

注意事项

  • 删除操作需要User.Delete.All权限,建议使用专用服务账号执行,避免使用全局管理员权限。
  • 建议先执行查询命令确认目标用户列表,再执行删除操作,防止误删。
  • 可以结合externalUserStateChangeDateTime设置延迟删除(比如状态变更超过30天再清理),避免误删临时禁用的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:10:01