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) {
                $setClauses = @(); $params = @{ id = $obj.Id }
                $setClauses += "principal_id = @principal_id"; $params.principal_id = $obj.PrincipalId
                $setClauses += "principal_type = @principal_type"; $params.principal_type = $obj.PrincipalType
                $setClauses += "principal_display_name = @principal_display_name"; $params.principal_display_name = $obj.PrincipalDisplayName
                $setClauses += "original_principal_id = @original_principal_id"; $params.original_principal_id = $obj.OriginalPrincipalId
                $setClauses += "original_principal_type = @original_principal_type"; $params.original_principal_type = $obj.OriginalPrincipalType
                $setClauses += "role_definition_id = @role_definition_id"; $params.role_definition_id = $obj.RoleDefinitionId
                $setClauses += "role_name = @role_name"; $params.role_name = $obj.RoleName
                $setClauses += "scope = @scope"; $params.scope = $obj.Scope
                $setClauses += "permissions_json = @permissions_json"; $params.permissions_json = $obj.PermissionsJson
                $setClauses += "computed_at = @computed_at"; $params.computed_at = $obj.ComputedAt
                Invoke-CIEMQuery -Query "UPDATE azure_effective_role_assignments SET $($setClauses -join ', ') WHERE id = @id" -Parameters $params -AsNonQuery | Out-Null
                if ($PassThru) { Get-CIEMAzureEffectiveRoleAssignment -Id $obj.Id }
            }
        } else {
            $setClauses = @(); $params = @{ id = $Id }
            $columnMap = @{
                PrincipalDisplayName = 'principal_display_name'
                RoleName             = 'role_name'
                PermissionsJson      = 'permissions_json'
                ComputedAt           = 'computed_at'
            }
            foreach ($paramName in $columnMap.Keys) {
                if ($PSBoundParameters.ContainsKey($paramName)) {
                    $col = $columnMap[$paramName]
                    $setClauses += "$col = @$col"
                    $params[$col] = $PSBoundParameters[$paramName]
                }
            }
            if ($setClauses.Count -gt 0) {
                Invoke-CIEMQuery -Query "UPDATE azure_effective_role_assignments SET $($setClauses -join ', ') WHERE id = @id" -Parameters $params -AsNonQuery | Out-Null
            }
            if ($PassThru) { Get-CIEMAzureEffectiveRoleAssignment -Id $Id }
        }
    }
}