public/cis/Test-MtCisZAP.ps1

<#
.SYNOPSIS
    Checks if the Zero-hour auto purge (ZAP) for Microsoft Teams is enabled

.DESCRIPTION
    Zero-hour auto purge (ZAP) should be enabled for Microsoft Teams
    CIS Microsoft 365 Foundations Benchmark v5.0.0

.EXAMPLE
    Test-MtCisZAP

    Returns true if Zero-hour auto purge (ZAP) is enabled

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

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

    if (!(Test-MtConnection Teams)) {
        Add-MtTestResultDetail -SkippedBecause NotConnectedTeams
        return $null
    }

    try {
        Write-Verbose 'Get TeamsProtectionPolicy'
        $teamsProtectionPolicy = Get-TeamsProtectionPolicy | Select-Object ZapEnabled

        Write-Verbose 'Add policy to result if ZAP is not enabled'
        $result = $teamsProtectionPolicy | Where-Object { $_.ZapEnabled -ne 'True' }

        $testResult = ($result | Measure-Object).Count -eq 0
        if ($testResult) {
            $testResultMarkdown = "Well done. Your tenant has Zero-hour auto purge (ZAP) enabled for Microsoft Teams:`n`n%TestResult%"
        } else {
            $testResultMarkdown = "Your tenant does not have Zero-hour auto purge (ZAP) enabled for Microsoft Teams:`n`n%TestResult%"
        }

        $resultMd = "| Zero-hour auto purge (ZAP) |`n"
        $resultMd += "| --- |`n"
        if ($testResult) {
            $itemResult = '✅ Enabled'
        } else {
            $itemResult = '❌ Not Enabled'
        }
        $resultMd += "| $($itemResult) |`n"

        $testResultMarkdown = $testResultMarkdown -replace '%TestResult%', $resultMd

        Add-MtTestResultDetail -Result $testResultMarkdown
        return $testResult
    } catch {
        Add-MtTestResultDetail -SkippedBecause Error -SkippedError $_
        return $null
    }
}