我正在尝试使用AzurePowerShell@5任务通过Azure DevOps YAML管道将用户管理员AD角色分配给Azure Function应用管理的身份。这是我尝试过的,但它给了我:##[error]对象引用未设置为对象的示例。
[CmdletBinding()]
param (
$functionAppDeltaSyncName,
$logicAppName_d365hrpublisher,
$logicAppName_d365hrsubscriber,
$resourceGroupName
)
Install-Module -Name AzureADPreview -Force
$appArray = $functionAppDeltaSyncName, $logicAppName_d365hrpublisher, $logicAppName_d365hrsubscriber
$aadAccessToken = Get-AzAccessToken -ResourceTypeName AadGraph
$context = Get-AzContext
Connect-AzureAD -AadAccessToken $aadAccessToken.Token -AccountId $context.Account.Id -TenantId $context.tenant.id
For ($x=0; $x -lt $appArray.Length; $x++)
{
$managedIdentityObjectId = (Get-AzFunctionApp -Name $appArray[$x] -ResourceGroupName $resourceGroupName).IdentityPrincipalId
$roleUserAdministrator = Get-AzureADMSRoleDefinition -Filter "displayName eq 'User Administrator'"
$IsAppRoleAssigned_UserAdministrator = Get-AzureADMSRoleAssignment -Id $managedIdentityObjectId |
Where-Object { $_.RoleDefinitionId -eq $roleUserAdministrator.Id }
if ($null -eq $IsAppRoleAssigned) {
New-AzureADMSRoleAssignment `
-DirectoryScopeId '/' `
-RoleDefinitionId $IsAppRoleAssigned_UserAdministrator.Id `
-PrincipalId $managedIdentityObjectId
}
}
1条答案
按热度按时间cgh8pdjw1#
在您提供的代码中,检查“if condition”>
if ($null -eq $IsAppRoleAssigned)
Powershell:
其中
$IsAppRoleAssigned
没有声明,但**$IsAppRoleAssigned_UserAdministrator
是声明的变量。它几乎可以纠正它来解决错误。
此外,当
$IsAppRoleAssigned_UserAdministrator
为null**且没有值时,$IsAppRoleAssigned_UserAdministrator.RoleDefinitionId
不包含任何值,在这种情况下,以下命令不起作用,因为RoleDefinitionId将为null。这就是你可能得到“Object reference not set to an instance of an object”的地方:
检查正确的代码
在if条件下创建新角色分配时,使用以下命令(
$roledefId_UserAdmin
)获取要分配的用户管理员的角色definitionId。检查角色是否已分配给服务主体:
Get-AzureADDirectoryRoleMember -ObjectId “942fxxx-xxx699449b8”
这里ObjectId是角色“用户管理员”的objectId
参考:Get-AzureADMSRoleAssignment (AzureAD) | Microsoft Learn