Public/Monitor/Get-TBMonitorResult.ps1

function Get-TBMonitorResult {
    <#
    .SYNOPSIS
        Gets monitoring results for configuration monitors.
    .DESCRIPTION
        Retrieves the run results and errors from UTCM configuration monitoring.
        Can filter by monitor ID.
    .PARAMETER MonitorId
        Optional monitor ID to filter results.
    .PARAMETER Top
        Maximum number of results to return.
    .EXAMPLE
        Get-TBMonitorResult
    .EXAMPLE
        Get-TBMonitorResult -MonitorId '00000000-...'
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [Alias('Id')]
        [string]$MonitorId,

        [Parameter()]
        [int]$Top
    )

    process {
        $baseUri = Get-TBApiBaseUri
        $uri = '{0}/configurationMonitoringResults' -f $baseUri

        $queryParams = [System.Collections.ArrayList]::new()

        if ($MonitorId) {
            $null = $queryParams.Add("`$filter=monitorId eq '$MonitorId'")
        }

        if ($Top -gt 0) {
            $null = $queryParams.Add("`$top=$Top")
        }

        if ($queryParams.Count -gt 0) {
            $uri = '{0}?{1}' -f $uri, ($queryParams -join '&')
        }

        Write-TBLog -Message ('Getting monitor results: {0}' -f $uri)
        $items = Invoke-TBGraphPagedRequest -Uri $uri

        foreach ($item in $items) {
            if ($item -is [hashtable]) {
                $obj = [PSCustomObject]$item
            }
            else {
                $obj = $item
            }

            [PSCustomObject]@{
                PSTypeName            = 'TenantBaseline.MonitorResult'
                Id                    = if ($obj.PSObject.Properties['id']) { $obj.id } else { $null }
                MonitorId             = if ($obj.PSObject.Properties['monitorId']) { $obj.monitorId } else { $null }
                TenantId              = if ($obj.PSObject.Properties['tenantId']) { $obj.tenantId } else { $null }
                RunStatus             = if ($obj.PSObject.Properties['runStatus']) { $obj.runStatus } else { $null }
                RunInitiationDateTime = if ($obj.PSObject.Properties['runInitiationDateTime']) { $obj.runInitiationDateTime } else { $null }
                RunCompletionDateTime = if ($obj.PSObject.Properties['runCompletionDateTime']) { $obj.runCompletionDateTime } else { $null }
                DriftsCount           = if ($obj.PSObject.Properties['driftsCount']) { $obj.driftsCount } else { 0 }
                ErrorDetails          = if ($obj.PSObject.Properties['errorDetails']) { $obj.errorDetails } else { @() }
                RawResponse           = $item
            }
        }
    }
}