Azure PIM角色分配脚本:Filter参数能否用OR条件及实现方法
Azure AD PIM PowerShell筛选:使用OR条件过滤角色分配
问题概述
用户尝试通过PowerShell获取Azure PIM中特定角色的用户分配,当前脚本的Filter参数写法有误,询问是否支持OR条件及正确实现方式。
用户原代码:
$filters = "(roleDefinitionId eq '69091246-20e8-4a56-aa4d-066075b2a7a8')" -or "(roleDefinitionId eq '3d762c5a-1b6c-493f-843e-55a3b42923d4')" Write-Host -Message "Start ......... Script" $getallPIMadmins = Get-AzureADMSPrivilegedRoleAssignment -ProviderId "aadRoles" -ResourceId "fd799da1-bfc1-4234-a91c-72b3a1cb9e26" -filter $filters
解答
1. Filter参数支持OR条件
Get-AzureADMSPrivilegedRoleAssignment的-Filter参数支持OData查询语法,其中包括OR逻辑运算符,完全可以用来实现多角色ID的筛选。
2. 原代码的问题
你当前的写法错误地使用了PowerShell的-or运算符来拼接字符串,这会把两个布尔值(而非字符串)赋值给$filters,导致Filter参数无法被正确解析。
3. 正确实现方式
需要将OR条件直接写入OData格式的字符串中,不需要使用PowerShell的-or:
# 正确的Filter字符串:使用OData的or运算符 $filters = "(roleDefinitionId eq '69091246-20e8-4a56-aa4d-066075b2a7a8') or (roleDefinitionId eq '3d762c5a-1b6c-493f-843e-55a3b42923d4')" Write-Host -Message "Start ......... Script" $getallPIMadmins = Get-AzureADMSPrivilegedRoleAssignment -ProviderId "aadRoles" -ResourceId "fd799da1-bfc1-4234-a91c-72b3a1cb9e26" -Filter $filters
如果角色ID较多,也可以用in运算符简化写法(效果和OR一致):
$filters = "roleDefinitionId in ('69091246-20e8-4a56-aa4d-066075b2a7a8','3d762c5a-1b6c-493f-843e-55a3b42923d4')"
这样就能正确筛选出符合任意指定角色ID的PIM角色分配记录。
内容的提问来源于stack exchange,提问作者ty01
相关产品推荐
相关产品推荐

