internal/orca/Get-ORCACollection.ps1

# Generated by .\build\orca\Update-OrcaTests.ps1

[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
param()

Function Get-ORCACollection
{
    Param (
        [Boolean]$SCC
    )

    $Collection = @{}

    [ORCAService]$Collection["Services"] = [ORCAService]::EOP

    # Determine if MDO is available by checking for presence of an MDO command
    if($(Get-command Get-AtpPolicyForO365 -ErrorAction:SilentlyContinue))
    {
        $Collection["Services"] += [ORCAService]::MDO
    } 

    If(!$Collection["Services"] -band [ORCAService]::MDO)
    {
        Write-Verbose "$(Get-Date) Microsoft Defender for Office 365 is not detected - these checks will be skipped!" -ForegroundColor Red
    }

    Write-Verbose "$(Get-Date) Getting Anti-Spam Settings"
    $Collection["HostedConnectionFilterPolicy"] = Get-MtExo -Request HostedConnectionFilterPolicy
    $Collection["HostedContentFilterPolicy"] = Get-MtExo -Request HostedContentFilterPolicy
    $Collection["HostedContentFilterRule"] = Get-MtExo -Request HostedContentFilterRule
    $Collection["HostedOutboundSpamFilterPolicy"] = Get-MtExo -Request HostedOutboundSpamFilterPolicy
    $Collection["HostedOutboundSpamFilterRule"] = Get-MtExo -Request HostedOutboundSpamFilterRule

    If($Collection["Services"] -band [ORCAService]::MDO)
    {
        Write-Verbose "$(Get-Date) Getting MDO Preset Policy Settings"
        $Collection["ATPProtectionPolicyRule"] = Get-MtExo -Request ATPProtectionPolicyRule
        $Collection["ATPBuiltInProtectionRule"] = Get-MtExo -Request ATPBuiltInProtectionRule
    }

    if($SCC -and $Collection["Services"] -band [ORCAService]::MDO)
    {
        Write-Verbose "$(Get-Date) Getting Protection Alerts"
        $Collection["ProtectionAlert"] = Get-ProtectionAlert | Where-Object {$_.IsSystemRule}
    }

    Write-Verbose "$(Get-Date) Getting EOP Preset Policy Settings"
    $Collection["EOPProtectionPolicyRule"] = Get-MtExo -Request EOPProtectionPolicyRule

    Write-Verbose "$(Get-Date) Getting Quarantine Policy Settings"
    $Collection["QuarantinePolicy"] =  Get-MtExo -Request QuarantinePolicy
    $Collection["QuarantinePolicyGlobal"]  = Get-QuarantinePolicy -QuarantinePolicyType GlobalQuarantinePolicy

    If($Collection["Services"] -band [ORCAService]::MDO)
    {
        Write-Verbose "$(Get-Date) Getting Anti Phish Settings"
        $Collection["AntiPhishPolicy"] = Get-MtExo -Request AntiphishPolicy
        $Collection["AntiPhishRules"] = Get-MtExo -Request AntiPhishRule
    }

    Write-Verbose "$(Get-Date) Getting Anti-Malware Settings"
    $Collection["MalwareFilterPolicy"] = Get-MtExo -Request MalwareFilterPolicy
    $Collection["MalwareFilterRule"] = Get-MtExo -Request MalwareFilterRule

    Write-Verbose "$(Get-Date) Getting Transport Rules"
    $Collection["TransportRules"] = Get-MtExo -Request TransportRule

    If($Collection["Services"] -band [ORCAService]::MDO)
    {
        Write-Verbose "$(Get-Date) Getting MDO Policies"
        $Collection["SafeAttachmentsPolicy"] = Get-MtExo -Request SafeAttachmentPolicy
        $Collection["SafeAttachmentsRules"] = Get-MtExo -Request SafeAttachmentRule
        $Collection["SafeLinksPolicy"] = Get-MtExo -Request SafeLinksPolicy
        $Collection["SafeLinksRules"] = Get-MtExo -Request SafeLinksRule
        $Collection["AtpPolicy"] = Get-MtExo -Request AtpPolicyForO365
    }

    Write-Verbose "$(Get-Date) Getting Accepted Domains"
    $Collection["AcceptedDomains"] = Get-MtExo -Request AcceptedDomain

    Write-Verbose "$(Get-Date) Getting DKIM Configuration"
    $Collection["DkimSigningConfig"] = Get-MtExo -Request DkimSigningConfig

    Write-Verbose "$(Get-Date) Getting Connectors"
    $Collection["InboundConnector"] = Get-MtExo -Request InboundConnector

    Write-Verbose "$(Get-Date) Getting Outlook External Settings"
    $Collection["ExternalInOutlook"] = Get-MtExo -Request ExternalInOutlook

    # Required for Enhanced Filtering checks
    Write-Verbose "$(Get-Date) Getting MX Reports for all domains"
    $Collection["MXReports"] = @()
    ForEach($d in $Collection["AcceptedDomains"])
    {
        Try
        {
            $Collection["MXReports"] += Get-MxRecordReport -Domain $($d.DomainName) -ErrorAction:SilentlyContinue
        }
        Catch
        {
            Write-Verbose "$(Get-Date) Failed to get MX report for domain $($d.DomainName)"
        }
        
    }

    # ARC Settings
    Write-Verbose "$(Get-Date) Getting ARC Config"
    $Collection["ARCConfig"] = Get-MtExo -Request ArcConfig

    # Determine policy states
    Write-Verbose "$(Get-Date) Determining applied policy states"

    $Collection["PolicyStates"] = Get-PolicyStates -AntiphishPolicies $Collection["AntiPhishPolicy"] -AntiphishRules $Collection["AntiPhishRules"] -AntimalwarePolicies $Collection["MalwareFilterPolicy"] -AntimalwareRules $Collection["MalwareFilterRule"] -AntispamPolicies $Collection["HostedContentFilterPolicy"] -AntispamRules $Collection["HostedContentFilterRule"] -SafeLinksPolicies $Collection["SafeLinksPolicy"] -SafeLinksRules $Collection["SafeLinksRules"] -SafeAttachmentsPolicies $Collection["SafeAttachmentsPolicy"] -SafeAttachmentRules $Collection["SafeAttachmentsRules"] -ProtectionPolicyRulesATP $Collection["ATPProtectionPolicyRule"] -ProtectionPolicyRulesEOP $Collection["EOPProtectionPolicyRule"] -OutboundSpamPolicies $Collection["HostedOutboundSpamFilterPolicy"] -OutboundSpamRules $Collection["HostedOutboundSpamFilterRule"] -BuiltInProtectionRule $Collection["ATPBuiltInProtectionRule"]
    $Collection["AnyPolicyState"] = Get-AnyPolicyState -PolicyStates $Collection["PolicyStates"]

    # Add IsPreset properties for Preset policies (where applicable)
    Add-IsPresetValue -CollectionEntity $Collection["HostedContentFilterPolicy"]
    Add-IsPresetValue -CollectionEntity $Collection["EOPProtectionPolicyRule"]

    If($Collection["Services"] -band [ORCAService]::MDO)
    {
        Add-IsPresetValue -CollectionEntity $Collection["ATPProtectionPolicyRule"]
        Add-IsPresetValue -CollectionEntity $Collection["AntiPhishPolicy"]
        Add-IsPresetValue -CollectionEntity $Collection["SafeAttachmentsPolicy"]
        Add-IsPresetValue -CollectionEntity $Collection["SafeLinksPolicy"] 
    }

    Return $Collection
}