使用Microsoft Graph API筛选Azure AD中30天未登录的E5许可无效用户
解决Azure AD用户筛选Graph查询失效问题
我需要筛选过去30天内未进行交互式和非交互式登录,且已分配Microsoft 365 E5许可证的Azure AD用户,但当前使用的Graph查询无法正常返回结果。
原查询:
https://graph.microsoft.com/beta/users ?filter=signInActivity/lastSignInDateTime le @{addDays(utcNow(), -30)} &signInActivity/lastNonInteractiveSignInDateTime le @{addDays(utcNow(), -30)} &assignedLicenses/any(s:s/skuId eq 184efa21-98c3-4e5d-95ab-d07053a96e67) &$select=displayName,userPrincipalName,signInActivity
问题原因
- 多个筛选条件未通过
and逻辑合并到同一个$filter参数中,Graph API要求所有筛选条件都放在$filter内用逻辑运算符连接 - 未处理
signInActivity字段为null的情况(从未登录过的用户),这类用户也符合“过去30天未登录”的需求,但会被原查询过滤掉
修正后的查询
https://graph.microsoft.com/beta/users ?$filter=(signInActivity/lastSignInDateTime le @{addDays(utcNow(), -30)} or signInActivity/lastSignInDateTime eq null) and (signInActivity/lastNonInteractiveSignInDateTime le @{addDays(utcNow(), -30)} or signInActivity/lastNonInteractiveSignInDateTime eq null) and assignedLicenses/any(s:s/skuId eq 184efa21-98c3-4e5d-95ab-d07053a96e67) &$select=displayName,userPrincipalName,signInActivity
说明
- 将所有筛选条件合并到一个
$filter参数中,用and连接不同的筛选规则 - 针对交互式和非交互式登录时间,分别添加
or {字段} eq null的逻辑,包含从未登录过的用户 - 保留原有的许可证筛选规则和字段选择参数
内容的提问来源于stack exchange,提问作者Shaktisinh Vaghela
相关产品推荐
相关产品推荐

