如何用Microsoft Graph PowerShell在Entra ID中根据应用角色ID获取角色值?
更简便的实现方式
你可以直接利用服务主体本身的AppRoles属性(无需先映射到应用对象ID),结合PowerShell管道或Graph API的扩展查询来快速获取应用角色的value值,以下是两种高效方案:
方案1:使用-ExpandProperty一次性关联资源服务主体
通过Get-MgServicePrincipalAppRoleAssignment的-ExpandProperty参数,直接拉取每个分配对应的资源服务主体数据,避免多次单独查询:
# 替换为你的目标服务主体ID $targetSpId = "你的服务主体ID" Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $targetSpId -ExpandProperty "resourceServicePrincipal" | ForEach-Object { # 从关联的服务主体中匹配对应AppRoleId的应用角色 $matchedRole = $_.ResourceServicePrincipal.AppRoles | Where-Object { $_.Id -eq $_.AppRoleId } # 输出需要的信息,可按需调整字段 [PSCustomObject]@{ 应用角色Value = $matchedRole.Value 资源服务主体名称 = $_.ResourceServicePrincipal.DisplayName 应用角色名称 = $matchedRole.DisplayName 分配ID = $_.Id } }
方案2:批量缓存服务主体提升效率
如果需要处理大量分配,先批量获取所有关联的资源服务主体再匹配,减少API调用次数:
$targetSpId = "你的服务主体ID" # 获取所有应用角色分配 $assignments = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $targetSpId # 收集所有唯一的资源服务主体ID并批量获取 $resourceSpIds = $assignments.ResourceId | Select-Object -Unique $resourceSps = $resourceSpIds | ForEach-Object { Get-MgServicePrincipal -ServicePrincipalId $_ } # 遍历分配并匹配对应的应用角色 $assignments | ForEach-Object { $currentSp = $resourceSps | Where-Object { $_.Id -eq $_.ResourceId } $matchedRole = $currentSp.AppRoles | Where-Object { $_.Id -eq $_.AppRoleId } [PSCustomObject]@{ 应用角色Value = $matchedRole.Value 资源服务主体名称 = $currentSp.DisplayName 应用角色名称 = $matchedRole.DisplayName } }
关键说明
服务主体是应用的实例化对象,它的AppRoles属性与对应应用的AppRoles完全一致,因此无需额外查询应用对象,直接通过资源服务主体即可获取应用角色的value值。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

