Public/Get-KritTcmMonitor.ps1

function Get-KritTcmMonitor {
    <#
    .SYNOPSIS
        List or read TCM configuration monitors.
    #>

    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipelineByPropertyName)][Alias('Id')][string]$MonitorId,
        [string]$Filter,
        [int]$Top,
        [switch]$IncludeBaseline
    )

    process {
        $uri = if ($MonitorId) {
            "https://graph.microsoft.com/v1.0/admin/configurationManagement/configurationMonitors/$MonitorId"
        } else {
            'https://graph.microsoft.com/v1.0/admin/configurationManagement/configurationMonitors'
        }

        $query = [System.Collections.Generic.List[string]]::new()
        if ($Filter) { $query.Add("`$filter=$([uri]::EscapeDataString($Filter))") }
        if ($Top -gt 0) { $query.Add("`$top=$Top") }
        if ($IncludeBaseline) { $query.Add("`$expand=baseline") }
        if ($query.Count -gt 0) { $uri = '{0}?{1}' -f $uri, ($query -join '&') }

        $response = Invoke-MgGraphRequest -Method GET -Uri $uri -ErrorAction Stop
        if ($MonitorId) {
            return [pscustomobject]@{
                Id = $response.id
                DisplayName = $response.displayName
                Description = $response.description
                Status = $response.status
                Mode = $response.mode
                Created = $response.createdDateTime
                Modified = $response.lastModifiedDateTime
                RawResponse = $response
            }
        }

        @($response.value | ForEach-Object {
            [pscustomobject]@{
                Id = $_.id
                DisplayName = $_.displayName
                Description = $_.description
                Status = $_.status
                Mode = $_.mode
                Created = $_.createdDateTime
                Modified = $_.lastModifiedDateTime
                RawResponse = $_
            }
        })
    }
}