Private/Initialize-MPThreats.ps1

function Initialize-MPThreats {
    
    try {
        #Write-Verbose "Initializing MP Threats..."
        # Get threat detection and threat information
        $Script:mptd = Get-MpThreatDetection | Select-Object -Property InitialDetectionTime, ThreatID, Resources, ProcessName
        $Script:mpt = Get-MpThreat | Select-Object -Property ThreatID, ThreatName
        
        # Add ThreatName property to each threat detection
        foreach ($item in $mptd) 
        {
            foreach ($obj in $item) 
            {
                try {
                    $obj | Add-Member -MemberType NoteProperty -Name 'ThreatName' -Value ($mpt | Where-Object { $_.ThreatID -eq $obj.ThreatID }).ThreatName
                }
                catch {
                    Write-Warning "Initialize-MPThreats Failed to add ThreatName to threat: $($obj.ThreatID). Error: $_"
                }
            }
        }
        
        # Process and organize the data
        $Script:mpdetected = $mptd | Select-Object -Property InitialDetectionTime, ThreatID, ThreatName, Resources, ProcessName | Sort-Object -Property InitialDetectionTime
        $Script:mpthreats = $mpdetected | Select-Object -Property ThreatID, ThreatName -Unique
        $Script:mpallow = Get-MpPreference | Select-Object -Property ThreatIDDefaultAction_Ids, ThreatIDDefaultAction_Actions -Unique
        
        #Write-Verbose "MP Threats initialization completed successfully."
        return $true
    }
    catch {
        Write-Error "Initialize-MPThreats Failed to initialize MP Threats: $_"
        return $false
    }
}