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

通过PowerShell调用Graph API创建Entra角色时遇JSON格式错误

解决Graph API创建Entra角色时的Request_BadRequest错误

错误核心原因

这个错误是因为你传入的JSON中,某个要求数组类型的字段被传成了单个值(PrimitiveValue)。Graph API创建自定义Entra角色时,rolePermissions.allowedResourceActions、resourceScopes等字段必须是数组格式,但你的PSCustomObject定义中可能把这些字段写成了单个字符串,导致序列化后的JSON不符合API要求。

正确实现代码

1. 构造符合类型要求的角色定义对象

确保数组类型的字段用@()包裹:

# 构造合规的自定义角色对象
$roleDefinition = [PSCustomObject]@{
    displayName = "自定义Entra测试角色"
    description = "拥有目录读取权限的自定义角色"
    rolePermissions = @(
        [PSCustomObject]@{
            allowedResourceActions = @("Microsoft.Authorization/*/read") # 必须用@()包裹成数组
            condition = $null # 可选字段,若使用需注意格式
        }
    )
    resourceScopes = @("/") # 资源范围必须是数组类型
    isEnabled = $true
}

2. 正确序列化JSON

PowerShell默认ConvertTo-Json的深度是2,嵌套结构需指定足够的Depth避免序列化截断:

$jsonBody = $roleDefinition | ConvertTo-Json -Depth 10

3. 调用Graph API接口

必须指定Content-Type为application/json:

$token = "你的有效访问令牌"
$uri = "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"

Invoke-RestMethod -Uri $uri -Method Post -Headers @{Authorization = "Bearer $token"} -Body $jsonBody -ContentType "application/json"

关键排查点

  • 直接输出$jsonBody查看序列化结果,确认allowedResourceActions、resourceScopes等字段是数组格式(如["Microsoft.Authorization/*/read"]),而非单个字符串
  • 核对官方文档,确认所有必填字段的类型,尤其是rolePermissions内部的嵌套数组字段
  • 即使只有一条权限规则,rolePermissions本身也必须用@()包裹成数组

内容的提问来源于stack exchange,提问作者thekevinkalis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:12