使用Microsoft Graph和PowerShell通过组分配Office365许可证遇400错误求助
排查PowerShell调用Graph API为组分配Office 365许可证时的400 Bad Request错误
错误核心原因
你的请求体格式不符合Microsoft Graph groups/assignLicense API的要求。该接口需要特定的嵌套结构,而非直接传入单独的SkuId字段。
修正步骤
- 调整请求体结构:
assignLicenseAPI要求请求体必须包含两个数组:addLicenses:要分配的许可证SKU对象数组,每个对象需包含skuIdremoveLicenses:要移除的许可证SKU ID数组(无需移除则传空数组)
- 避免手动拼接JSON:用PowerShell哈希表定义结构后转成JSON,减少语法错误概率
- 确认API权限:确保应用注册已分配以下应用权限(非委派权限)并完成管理员同意:
Group.ReadWrite.AllDirectory.ReadWrite.All(或更细粒度的License.ReadWrite.All)
修正后的完整脚本
$connectiondetails = @{ # Tenant ID here 'tenantid' = "" # Application (client) ID here 'clientid' = "" # Secret id here 'ClientSecret' = "" | ConvertTo-SecureString -AsPlainText -Force } $token = Get-MsalToken @connectiondetails $tokenid_ = $token.AccessToken $uri = "https://graph.microsoft.com/v1.0/groups/ffbabc6f-aa87-40f3-8665-9d140e4a7adb/assignLicense" # 构建符合API要求的请求体结构 $body = @{ addLicenses = @( @{ skuId = "cbdc14ab-d96c-4c30-b9f4-6ada7cdc1d46" } ) removeLicenses = @() } | ConvertTo-Json -Compress # 调用API分配许可证 Invoke-RestMethod -Uri $uri -Body $body -ContentType "application/json" -Method Post -Headers @{Authorization=("bearer {0}" -f $tokenid_)}
额外排查点
- 确认目标组ID(
ffbabc6f-aa87-40f3-8665-9d140e4a7adb)有效且存在于你的租户中 - 确认SKU ID(
cbdc14ab-d96c-4c30-b9f4-6ada7cdc1d46)是租户中可用的许可证SKU - 可以添加
-Verbose参数到Invoke-RestMethod,查看更详细的请求/响应信息辅助排查
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

