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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:42:27