modules/Azure/Discovery/Public/Update-CIEMAzureEffectiveRoleAssignment.ps1

function Update-CIEMAzureEffectiveRoleAssignment {
    [CmdletBinding(DefaultParameterSetName = 'ByProperties')]
    [OutputType('CIEMAzureEffectiveRoleAssignment[]')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ByProperties')]
        [int]$Id,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$PrincipalDisplayName,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$RoleName,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$PermissionsJson,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$ComputedAt,

        [Parameter(Mandatory, ParameterSetName = 'InputObject', ValueFromPipeline)]
        [PSObject[]]$InputObject,

        [switch]$PassThru
    )

    process {
        $ErrorActionPreference = 'Stop'
        if ($PSCmdlet.ParameterSetName -eq 'InputObject') {
            foreach ($obj in $InputObject) {
                UpdateCIEMAzureEntity -Entity 'EffectiveRoleAssignment' -Filters @{ Id = $obj.Id } -Values @{
                    PrincipalId = $obj.PrincipalId
                    PrincipalType = $obj.PrincipalType
                    PrincipalDisplayName = $obj.PrincipalDisplayName
                    OriginalPrincipalId = $obj.OriginalPrincipalId
                    OriginalPrincipalType = $obj.OriginalPrincipalType
                    RoleDefinitionId = $obj.RoleDefinitionId
                    RoleName = $obj.RoleName
                    Scope = $obj.Scope
                    PermissionsJson = $obj.PermissionsJson
                    ComputedAt = $obj.ComputedAt
                }
                if ($PassThru) { Get-CIEMAzureEffectiveRoleAssignment -Id $obj.Id }
            }
        } else {
            $values = @{}
            foreach ($paramName in @('PrincipalDisplayName', 'RoleName', 'PermissionsJson', 'ComputedAt')) {
                if ($PSBoundParameters.ContainsKey($paramName)) {
                    $values[$paramName] = $PSBoundParameters[$paramName]
                }
            }
            if ($values.Count -gt 0) {
                UpdateCIEMAzureEntity -Entity 'EffectiveRoleAssignment' -Filters @{ Id = $Id } -Values $values
            }
            if ($PassThru) { Get-CIEMAzureEffectiveRoleAssignment -Id $Id }
        }
    }
}