public/maester/azuredevops/Test-AzdoAuditStream.ps1

<#
.SYNOPSIS
    Returns a boolean depending on the configuration.

.DESCRIPTION
    Sends auditing data to Security Incident and Event Management (SIEM) tools and opens new possibilities,
    such as the ability to trigger alerts for specific events, create views on auditing data, and perform
    anomaly detection. Setting up a stream also allows you to store more than 90-days of auditing data,
    which is the maximum amount of data that Azure DevOps keeps for your organizations.

    https://learn.microsoft.com/en-us/azure/devops/organizations/audit/auditing-streaming?view=azure-devops

.EXAMPLE
    ```
    Test-AzdoAuditStream
    ```

    Returns a boolean depending on the configuration.

.LINK
    https://maester.dev/docs/commands/Test-AzdoAuditStream
#>


function Test-AzdoAuditStream {
    [CmdletBinding()]
    [OutputType([bool])]
    param()

    if ($null -eq (Get-ADOPSConnection)['Organization']) {
        Write-Verbose 'Not connected to Azure DevOps'
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason 'Not connected to Azure DevOps'
        return $null
    }

    $AuditStreams = Get-ADOPSAuditStreams -ErrorAction SilentlyContinue

    if ($null -eq $AuditStreams) {
        $Message = "Audit Streams was not found. This may be due to insufficient permissions or the Azure DevOps Organization is not backed by an Entra ID tenant.
        Please see [Manage Audit Streams](https://learn.microsoft.com/en-us/azure/devops/organizations/audit/auditing-streaming?view=azure-devops#prerequisites)"

        Write-Verbose $Message
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason $Message
        return $null
    } else {
        if ($AuditStreams) {
            if ('Enabled' -in $AuditStreams.status) {
                $resultMarkdown = "Audit logs have been configured for long-term storage and purge protection."
                $result = $true
            } else {
                $resultMarkdown = "Audit Streams have been configured for long-term storage and purge protection but is not enabled."
                $result = $false
            }
        } else {
            $resultMarkdown = "Audit Streams have not been configured for long-term storage and purge protection."
            $result = $false
        }

        Add-MtTestResultDetail -Result $resultMarkdown

        return $result
    }

}