如何用Microsoft Graph筛选未启用Entra ID P1许可证的Entra ID用户?
确认查询正确性及取反实现方案
一、第三个目标查询的正确性
你的第三个查询是正确的,它能精准筛选出同时满足以下两个条件的用户:
- 拥有Entra ID P1许可证(对应ServicePlanId:
41781fb2-bc02-4b7c-bd55-b576c07bb09d) - 该许可证处于启用状态(
capabilityStatus eq 'Enabled')
对比第二个查询,它用了两个独立的any()条件,可能会误匹配到「拥有Entra ID P1但启用的是其他许可证」的用户;而第三个查询把两个条件放在同一个any()内,确保是同一个许可证计划同时满足ID和启用状态,逻辑更准确。
二、取反实现初始需求(未启用Entra ID P1的用户)
要获取所有未启用Entra ID P1许可证的用户,本质是筛选「不存在已启用的Entra ID P1许可证计划」的用户,直接对第三个查询的条件取反即可,使用not关键字:
Get-MgUser -Filter "not assignedPlans/any(a:a/ServicePlanId eq 41781fb2-bc02-4b7c-bd55-b576c07bb09d and a:capabilityStatus eq 'Enabled')" -ConsistencyLevel eventual -CountVariable nonEidp1EnabledCount
这个命令会返回两类用户:
- 从未被分配过Entra ID P1许可证的用户
- 已分配Entra ID P1但该许可证处于禁用状态的用户
完全符合你「不使用Where-Object后续筛选」的要求,直接通过Graph API的Filter条件完成查询。
内容的提问来源于stack exchange,提问作者Hofa
相关产品推荐
相关产品推荐

