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

使用ApplicationId替代ObjectId调用New-AzRoleAssignment失败求助

问题:使用ApplicationId执行New-AzRoleAssignment报错'PrincipalId' cannot be null

问题场景

尝试用ApplicationId替代ObjectId执行New-AzRoleAssignment命令失败,执行代码:

$appId = 'f9f6b23d-eff8-48e1-a7f9-fd636a32e62c' # 示例应用ID
$roleName='Azure Service Bus Data Owner'

New-AzRoleAssignment -ApplicationId $appId -RoleDefinitionName $roleName

报错信息:

New-AzRoleAssignment: 'PrincipalId' cannot be null.

原因分析

-ApplicationId参数需要模块通过应用ID匹配对应的服务主体ObjectId(即PrincipalId),但如果未指定角色分配的作用域(Scope),模块无法精准定位到目标服务主体,导致无法自动填充PrincipalId,进而触发该错误。另外,角色分配本身必须明确作用域(订阅/资源组/具体资源层级),这是隐含的必填项。

解决方法

方法1:先获取服务主体ObjectId再执行分配

  1. 通过ApplicationId查询对应的服务主体ID:
$sp = Get-AzADServicePrincipal -ApplicationId $appId
$principalId = $sp.Id
  1. 指定作用域执行角色分配(示例为Service Bus命名空间层级):
# 替换为实际的订阅ID、资源组、命名空间名称
$scope = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.ServiceBus/namespaces/{ServiceBus命名空间名称}"
New-AzRoleAssignment -ObjectId $principalId -RoleDefinitionName $roleName -Scope $scope

方法2:直接指定ApplicationId和Scope

无需提前查询ObjectId,直接在命令中补充作用域参数,模块会自动匹配对应的服务主体:

$scope = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.ServiceBus/namespaces/{ServiceBus命名空间名称}"
New-AzRoleAssignment -ApplicationId $appId -RoleDefinitionName $roleName -Scope $scope

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:31:05