使用Azure PowerShell分配AD角色

xoshrz7s  于 2023-06-06  发布在  Shell
关注(0)|答案(1)|浏览(231)

我正在尝试使用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
    }
        
}
cgh8pdjw

cgh8pdjw1#

在您提供的代码中,检查“if condition”> if ($null -eq $IsAppRoleAssigned)
Powershell:

$IsAppRoleAssigned_UserAdministrator = Get-AzureADMSRoleAssignment -Filter "principalId eq '$managedIdentityObjectId' " |
        Where-Object { $_.RoleDefinitionId -eq $aadDirectoryRole.Id }

    if ($null -eq $IsAppRoleAssigned) {
        New-AzureADMSRoleAssignment `
            -DirectoryScopeId '/' 
            -RoleDefinitionId   `
            -PrincipalId $managedIdentityObjectId
    }

其中$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。

$functionApp = Get-AzFunctionApp -ResourceGroupName $resourceGroupName -Name $functionApp
       
 $functionApp.IdentityPrincipalId
        
        $managedIdentityObjectId=$functionApp.IdentityPrincipalId
        
Write-host “function App principal id is fetched"
  
  $roleUserAdministrator=Get-AzureADMSRoleDefinition -Filter "displayName eq 'User Administrator'" 
  
  $roledefId_UserAdmin=Get-AzureADMSRoleAssignment  |Where-Object { 
$_.RoleDefinitionId -eq $aadDirectoryRole.Id } 
    
     
   $IsAppRoleAssigned_UserAdministrator = Get-AzureADMSRoleAssignment -Filter "principalId eq '$managedIdentityObjectId' " |
      Where-Object { $_.RoleDefinitionId -eq $roleUserAdministrator.Id }
    
        if ($IsAppRoleAssigned_UserAdministrator -eq $null   ) {
            New-AzureADMSRoleAssignment `
                -DirectoryScopeId '/' `
                -RoleDefinitionId '$roledefId_UserAdmin.RoleDefinitionId'`
                -PrincipalId '$managedIdentityObjectId'`
        }

检查角色是否已分配给服务主体:


Get-AzureADDirectoryRoleMember -ObjectId “942fxxx-xxx699449b8”
这里ObjectId是角色“用户管理员”的objectId

参考:Get-AzureADMSRoleAssignment (AzureAD) | Microsoft Learn

相关问题