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

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

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$PsuJobId,

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

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

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

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

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$ArmTypeCount,

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$ArmRowCount,

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$EntraTypeCount,

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$EntraRowCount,

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$WarningCount,

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

        [Parameter(ParameterSetName = 'ByProperties')]
        [switch]$PassThru,

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

    process {
        if ($PSCmdlet.ParameterSetName -eq 'InputObject') {
            foreach ($obj in $InputObject) {
                $parameters = @{
                    id               = $obj.Id
                    psu_job_id       = $obj.PsuJobId
                    scope            = $obj.Scope
                    status           = $obj.Status
                    started_at       = $obj.StartedAt
                    completed_at     = $obj.CompletedAt
                    arm_type_count   = $obj.ArmTypeCount
                    arm_row_count    = $obj.ArmRowCount
                    entra_type_count = $obj.EntraTypeCount
                    entra_row_count  = $obj.EntraRowCount
                    warning_count    = $obj.WarningCount
                    error_message    = $obj.ErrorMessage
                }

                Invoke-CIEMQuery -Query @"
UPDATE azure_discovery_runs
SET psu_job_id = @psu_job_id, scope = @scope, status = @status, started_at = @started_at,
    completed_at = @completed_at, arm_type_count = @arm_type_count, arm_row_count = @arm_row_count,
    entra_type_count = @entra_type_count, entra_row_count = @entra_row_count,
    warning_count = @warning_count, error_message = @error_message
WHERE id = @id
"@
 -Parameters $parameters -AsNonQuery | Out-Null
            }
            return
        }

        $columnMap = @{
            PsuJobId       = 'psu_job_id'
            Scope          = 'scope'
            Status         = 'status'
            StartedAt      = 'started_at'
            CompletedAt    = 'completed_at'
            ArmTypeCount   = 'arm_type_count'
            ArmRowCount    = 'arm_row_count'
            EntraTypeCount = 'entra_type_count'
            EntraRowCount  = 'entra_row_count'
            WarningCount   = 'warning_count'
            ErrorMessage   = 'error_message'
        }

        $setClauses = @()
        $parameters = @{ id = $Id }

        foreach ($paramName in $columnMap.Keys) {
            if ($PSBoundParameters.ContainsKey($paramName)) {
                $col = $columnMap[$paramName]
                $setClauses += "$col = @$col"
                $parameters[$col] = $PSBoundParameters[$paramName]
            }
        }

        if ($setClauses.Count -eq 0) {
            if ($PassThru) { Get-CIEMAzureDiscoveryRun -Id $Id }
            return
        }

        $sql = "UPDATE azure_discovery_runs SET " + ($setClauses -join ', ') + " WHERE id = @id"
        Invoke-CIEMQuery -Query $sql -Parameters $parameters -AsNonQuery | Out-Null

        if ($PassThru) {
            Get-CIEMAzureDiscoveryRun -Id $Id
        }
    }
}