public/cis/Test-MtCisFormsPhishingProtectionEnabled.ps1

function Test-MtCisFormsPhishingProtectionEnabled {
    <#
    .SYNOPSIS
        Checks if the internal phishing protection for Microsoft Forms is enabled.
    
    .DESCRIPTION
        The internal phishing protection for Microsoft Forms should be enabled.
        CIS Microsoft 365 Foundations Benchmark v6.0.1
    
    .EXAMPLE
        Test-MtCisFormsPhishingProtectionEnabled
    
        Returns true if the internal phishing protection for Microsoft Forms is enabled.
    
    .LINK
        https://maester.dev/docs/commands/Test-MtCisFormsPhishingProtectionEnabled
    #>

    [CmdletBinding()]
    [OutputType([bool])]
    param()

    if (!(Test-MtConnection Graph)) {
        Add-MtTestResultDetail -SkippedBecause NotConnectedGraph
        return $null
    }

    $scopes = (Get-MgContext).Scopes
    $permissionMissing = "OrgSettings-Forms.Read.All" -notin $scopes
    if ($permissionMissing) {
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason "Missing Scope OrgSettings-Forms.Read.All"
        return $null
    }

    try {
        Write-Verbose 'Getting settings...'
        $settings = Invoke-MtGraphRequest -ApiVersion beta -RelativeUri "admin/forms/settings" -DisableCache

        Write-Verbose 'Executing checks'
        $CheckIsInOrgFormsPhishingScanEnabled = $settings | Where-Object { $_.isInOrgFormsPhishingScanEnabled -eq $true }

        $testResult = (($CheckIsInOrgFormsPhishingScanEnabled | Measure-Object).Count -ge 1)

        if ($testResult) {
            $testResultMarkdown = "Well done. Your tenant settings comply with CIS recommendations.`n`n%TestResult%"
        }
        else {
            $testResultMarkdown = "Your tenant settings do not comply with CIS recommendations.`n`n%TestResult%"
        }

        $resultMd = "| Setting | Result |`n"
        $resultMd += "| --- | --- |`n"

        if ($CheckIsInOrgFormsPhishingScanEnabled) {
            $CheckIsInOrgFormsPhishingScanEnabledResult = '✅ Pass'
        }
        else {
            $CheckIsInOrgFormsPhishingScanEnabledResult = '❌ Fail'
        }

        $resultMd += "| Add internal phishing protection | $CheckIsInOrgFormsPhishingScanEnabledResult |`n"

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

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