DSCResources/MSFT_SCInsiderRiskPolicy/MSFT_SCInsiderRiskPolicy.psm1

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $Name,

        [Parameter(Mandatory = $true)]
        [System.String]
        $InsiderRiskScenario,

        [Parameter()]
        [System.Boolean]
        $Anonymization,

        [Parameter()]
        [System.Boolean]
        $DLPUserRiskSync,

        [Parameter()]
        [System.Boolean]
        $OptInIRMDataExport,

        [Parameter()]
        [System.Boolean]
        $RaiseAuditAlert,

        [Parameter()]
        [System.String]
        $FileVolCutoffLimits,

        [Parameter()]
        [System.String]
        $AlertVolume,

        [Parameter()]
        [System.Boolean]
        $AnomalyDetections,

        [Parameter()]
        [System.Boolean]
        $CopyToPersonalCloud,

        [Parameter()]
        [System.Boolean]
        $CopyToUSB,

        [Parameter()]
        [System.Boolean]
        $CumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $EmailExternal,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedEmployeePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedFamilyData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedHighVolumePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedNeighbourData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedRestrictedData,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToChildAbuseSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCriminalActivitySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCultSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToGamblingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHackingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHateIntoleranceSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToIllegalSoftwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToKeyloggerSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToLlmSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToMalwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPhishingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPornographySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToUnallowedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToViolenceSites,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToClipboardFromSensitiveFile,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToNetworkShare,

        [Parameter()]
        [System.Boolean]
        $EpoFileArchived,

        [Parameter()]
        [System.Boolean]
        $EpoFileCopiedToRemoteDesktopSession,

        [Parameter()]
        [System.Boolean]
        $EpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromBlacklistedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromEnterpriseDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileRenamed,

        [Parameter()]
        [System.Boolean]
        $EpoFileStagedToCentralLocation,

        [Parameter()]
        [System.Boolean]
        $EpoHiddenFileCreated,

        [Parameter()]
        [System.Boolean]
        $EpoRemovableMediaMount,

        [Parameter()]
        [System.Boolean]
        $EpoSensitiveFileRead,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppDownload,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileDelete,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileSharing,

        [Parameter()]
        [System.Boolean]
        $McasActivityFromInfrequentCountry,

        [Parameter()]
        [System.Boolean]
        $McasImpossibleTravel,

        [Parameter()]
        [System.Boolean]
        $McasMultipleFailedLogins,

        [Parameter()]
        [System.Boolean]
        $McasMultipleStorageDeletion,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMCreation,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMDeletion,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousAdminActivities,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudCreation,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudTrailLoggingChange,

        [Parameter()]
        [System.Boolean]
        $McasTerminatedEmployeeActivity,

        [Parameter()]
        [System.Boolean]
        $OdbDownload,

        [Parameter()]
        [System.Boolean]
        $OdbSyncDownload,

        [Parameter()]
        [System.Boolean]
        $PeerCumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $PhysicalAccess,

        [Parameter()]
        [System.Boolean]
        $PotentialHighImpactUser,

        [Parameter()]
        [System.Boolean]
        $Print,

        [Parameter()]
        [System.Boolean]
        $PriorityUserGroupMember,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertDefenseEvasion,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertUnwantedSoftware,

        [Parameter()]
        [System.Boolean]
        $SpoAccessRequest,

        [Parameter()]
        [System.Boolean]
        $SpoApprovedAccess,

        [Parameter()]
        [System.Boolean]
        $SpoDownload,

        [Parameter()]
        [System.Boolean]
        $SpoDownloadV2,

        [Parameter()]
        [System.Boolean]
        $SpoFileAccessed,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelDowngraded,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoFileSharing,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSiteExternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteInternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoSiteSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSyncDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChatFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsFileDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsFolderSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsSensitiveMessage,

        [Parameter()]
        [System.Boolean]
        $UserHistory,

        [Parameter()]
        [System.Boolean]
        $AWSS3BlockPublicAccessDisabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3BucketDeleted,

        [Parameter()]
        [System.Boolean]
        $AWSS3PublicAccessEnabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3ServerLoggingDisabled,

        [Parameter()]
        [System.Boolean]
        $AzureElevateAccessToAllSubscriptions,

        [Parameter()]
        [System.Boolean]
        $AzureResourceThreatProtectionSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerAuditingSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleDeleted,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureStorageAccountOrContainerDeleted,

        [Parameter()]
        [System.Boolean]
        $BoxContentAccess,

        [Parameter()]
        [System.Boolean]
        $BoxContentDelete,

        [Parameter()]
        [System.Boolean]
        $BoxContentDownload,

        [Parameter()]
        [System.Boolean]
        $BoxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $CCFinancialRegulatoryRiskyTextSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateContentSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateImagesSent,

        [Parameter()]
        [System.Boolean]
        $DropboxContentAccess,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDelete,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDownload,

        [Parameter()]
        [System.Boolean]
        $DropboxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentAccess,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentDelete,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $PowerBIDashboardsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDownloaded,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsExported,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsViewed,

        [Parameter()]
        [System.Boolean]
        $PowerBISemanticModelsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelDowngradedForArtifacts,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelRemovedFromArtifacts,

        [Parameter()]
        [System.String]
        $HistoricTimeSpan,

        [Parameter()]
        [System.String]
        $InScopeTimeSpan,

        [Parameter()]
        [System.Boolean]
        $EnableTeam,

        [Parameter()]
        [System.Boolean]
        $AnalyticsNewInsightEnabled,

        [Parameter()]
        [System.Boolean]
        $AnalyticsTurnedOffEnabled,

        [Parameter()]
        [System.Boolean]
        $HighSeverityAlertsEnabled,

        [Parameter()]
        [System.String[]]
        $HighSeverityAlertsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $PoliciesHealthEnabled,

        [Parameter()]
        [System.String[]]
        $PoliciesHealthRoleGroups,

        [Parameter()]
        [System.Boolean]
        $NotificationDetailsEnabled,

        [Parameter()]
        [System.String[]]
        $NotificationDetailsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $ClipDeletionEnabled,

        [Parameter()]
        [System.Boolean]
        $SessionRecordingEnabled,

        [Parameter()]
        [System.String]
        $RecordingTimeframePreEventInSec,

        [Parameter()]
        [System.String]
        $RecordingTimeframePostEventInSec,

        [Parameter()]
        [System.String]
        $BandwidthCapInMb,

        [Parameter()]
        [System.String]
        $OfflineRecordingStorageLimitInMb,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionEnabled,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionHighProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionHighProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionMediumProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionMediumProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionLowProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionLowProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $ProfileInscopeTimeSpan,

        [Parameter()]
        [System.UInt32]
        $LookbackTimeSpan,

        [Parameter()]
        [System.Boolean]
        $RetainSeverityAfterTriage,

        [Parameter()]
        [System.String[]]
        $MDATPTriageStatus,

        [Parameter()]
        [System.UInt32]
        $CPUUtilizationLimit,

        [Parameter()]
        [System.UInt32]
        $GPUUtilizationLimit,

        [Parameter()]
        [ValidateSet('Present', 'Absent')]
        [System.String]
        $Ensure = 'Present',

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $Credential,

        [Parameter()]
        [System.String]
        $ApplicationId,

        [Parameter()]
        [System.String]
        $TenantId,

        [Parameter()]
        [System.String]
        $CertificateThumbprint,

        [Parameter()]
        [Switch]
        $ManagedIdentity,

        [Parameter()]
        [System.String[]]
        $AccessTokens
    )

    New-M365DSCConnection -Workload 'SecurityComplianceCenter' `
        -InboundParameters $PSBoundParameters | Out-Null

    #Ensure the proper dependencies are installed in the current environment.
    Confirm-M365DSCDependencies

    #region Telemetry
    $ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
    $CommandName = $MyInvocation.MyCommand
    $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
        -CommandName $CommandName `
        -Parameters $PSBoundParameters
    Add-M365DSCTelemetryEvent -Data $data
    #endregion

    $nullResult = $PSBoundParameters
    $nullResult.Ensure = 'Absent'
    try
    {
        if ($null -ne $Script:exportedInstances -and $Script:ExportMode)
        {
            $instance = $Script:exportedInstances | Where-Object -FilterScript {$_.Name -eq $Name}
        }
        else
        {
            $instance = Get-InsiderRiskPolicy -Identity $Name
        }

        if ($null -eq $instance)
        {
            return $nullResult
        }

        $results = @{
            Name                  = $instance.Name
            InsiderRiskScenario   = $instance.InsiderRiskScenario
            Ensure                = 'Present'
            Credential            = $Credential
            ApplicationId         = $ApplicationId
            TenantId              = $TenantId
            CertificateThumbprint = $CertificateThumbprint
            ManagedIdentity       = $ManagedIdentity.IsPresent
            AccessTokens          = $AccessTokens
        }

        if (-not [System.String]::IsNullOrEmpty($instance.SessionRecordingSettings))
        {
            $SessionRecordingSettings = ConvertFrom-Json $instance.SessionRecordingSettings
            $forensicSettingsHash = @{
                ClipDeletionEnabled              = [Boolean]($SessionRecordingSettings.ClipDeletionEnabled)
                SessionRecordingEnabled          = [Boolean]($SessionRecordingSettings.Enabled)
                RecordingTimeframePreEventInSec  = $SessionRecordingSettings.RecordingTimeframePreEventInSec
                RecordingTimeframePostEventInSec = $SessionRecordingSettings.RecordingTimeframePostEventInSec
                BandwidthCapInMb                 = $SessionRecordingSettings.BandwidthCapInMb
                OfflineRecordingStorageLimitInMb = $SessionRecordingSettings.OfflineRecordingStorageLimitInMb
                GPUUtilizationLimit              = $SessionRecordingSettings.GPUUtilizationLimit
                CPUUtilizationLimit              = $SessionRecordingSettings.CPUUtilizationLimit
            }
            $results += $forensicSettingsHash
        }

        if (-not [System.String]::IsNullOrEmpty($instance.TenantSettings) -and $instance.TenantSettings.Length -gt 0)
        {
            $tenantSettings = ConvertFrom-Json $instance.TenantSettings[0]

            $DLPUserRiskSyncValue = $null
            if (-not [System.String]::IsNullOrEmpty($tenantSettings.FeatureSettings.DLPUserRiskSync))
            {
                $DLPUserRiskSyncValue = [Boolean]::Parse($tenantSettings.FeatureSettings.DLPUserRiskSync)
            }

            $AnonymizationValue = $null
            if (-not [System.String]::IsNullOrEmpty($tenantSettings.FeatureSettings.Anonymization))
            {
                $AnonymizationValue = [Boolean]::Parse($tenantSettings.FeatureSettings.Anonymization)
            }

            $OptInIRMDataExportValue = $null
            if (-not [System.String]::IsNullOrEmpty($tenantSettings.FeatureSettings.OptInIRMDataExport))
            {
                $OptInIRMDataExportValue = [Boolean]::Parse($tenantSettings.FeatureSettings.OptInIRMDataExport)
            }

            $RaiseAuditAlertValue = $null
            if (-not [System.String]::IsNullOrEmpty($tenantSettings.FeatureSettings.RaiseAuditAlert))
            {
                $RaiseAuditAlertValue = [Boolean]::Parse($tenantSettings.FeatureSettings.RaiseAuditAlert)
            }

            $tenantSettingsHash = @{
                Anonymization                                 = $AnonymizationValue
                DLPUserRiskSync                               = $DLPUserRiskSyncValue
                OptInIRMDataExport                            = $OptInIRMDataExportValue
                RaiseAuditAlert                               = $RaiseAuditAlertValue
                FileVolCutoffLimits                           = $tenantSettings.IntelligentDetections.FileVolCutoffLimits
                AlertVolume                                   = $tenantSettings.IntelligentDetections.AlertVolume
                MDATPTriageStatus                             = $tenantSettings.IntelligentDetections.MDATPTriageStatus
                AnomalyDetections                             = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'AnomalyDetections'}).Enabled
                CopyToPersonalCloud                           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'CopyToPersonalCloud'}).Enabled
                CopyToUSB                                     = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'CopyToUSB'}).Enabled
                CumulativeExfiltrationDetector                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'CumulativeExfiltrationDetector'}).Enabled
                EmailExternal                                 = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmailExternal'}).Enabled
                EmployeeAccessedEmployeePatientData           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmployeeAccessedEmployeePatientData'}).Enabled
                EmployeeAccessedFamilyData                    = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmployeeAccessedFamilyData'}).Enabled
                EmployeeAccessedHighVolumePatientData         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmployeeAccessedHighVolumePatientData'}).Enabled
                EmployeeAccessedNeighbourData                 = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmployeeAccessedNeighbourData'}).Enabled
                EmployeeAccessedRestrictedData                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EmployeeAccessedRestrictedData'}).Enabled
                EpoBrowseToChildAbuseSites                    = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToChildAbuseSites'}).Enabled
                EpoBrowseToCriminalActivitySites              = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToCriminalActivitySites'}).Enabled
                EpoBrowseToCultSites                          = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToCultSites'}).Enabled
                EpoBrowseToGamblingSites                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToGamblingSites'}).Enabled
                EpoBrowseToHackingSites                       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToHackingSites'}).Enabled
                EpoBrowseToHateIntoleranceSites               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToHateIntoleranceSites'}).Enabled
                EpoBrowseToIllegalSoftwareSites               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToIllegalSoftwareSites'}).Enabled
                EpoBrowseToKeyloggerSites                     = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToKeyloggerSites'}).Enabled
                EpoBrowseToLlmSites                           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToLlmSites'}).Enabled
                EpoBrowseToMalwareSites                       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToMalwareSites'}).Enabled
                EpoBrowseToPhishingSites                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToPhishingSites'}).Enabled
                EpoBrowseToPornographySites                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToPornographySites'}).Enabled
                EpoBrowseToUnallowedDomain                    = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToUnallowedDomain'}).Enabled
                EpoBrowseToViolenceSites                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoBrowseToViolenceSites'}).Enabled
                EpoCopyToClipboardFromSensitiveFile           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoCopyToClipboardFromSensitiveFile'}).Enabled
                EpoCopyToNetworkShare                         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoCopyToNetworkShare'}).Enabled
                EpoFileArchived                               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileArchived'}).Enabled
                EpoFileCopiedToRemoteDesktopSession           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileCopiedToRemoteDesktopSession'}).Enabled
                EpoFileDeleted                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileDeleted'}).Enabled
                EpoFileDownloadedFromBlacklistedDomain        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileDownloadedFromBlacklistedDomain'}).Enabled
                EpoFileDownloadedFromEnterpriseDomain         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileDownloadedFromEnterpriseDomain'}).Enabled
                EpoFileRenamed                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileRenamed'}).Enabled
                EpoFileStagedToCentralLocation                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoFileStagedToCentralLocation'}).Enabled
                EpoHiddenFileCreated                          = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoHiddenFileCreated'}).Enabled
                EpoRemovableMediaMount                        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoRemovableMediaMount'}).Enabled
                EpoSensitiveFileRead                          = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'EpoSensitiveFileRead'}).Enabled
                Mcas3rdPartyAppDownload                       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'Mcas3rdPartyAppDownload'}).Enabled
                Mcas3rdPartyAppFileDelete                     = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'Mcas3rdPartyAppFileDelete'}).Enabled
                Mcas3rdPartyAppFileSharing                    = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'Mcas3rdPartyAppFileSharing'}).Enabled
                McasActivityFromInfrequentCountry             = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasActivityFromInfrequentCountry'}).Enabled
                McasImpossibleTravel                          = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasImpossibleTravel'}).Enabled
                McasMultipleFailedLogins                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasMultipleFailedLogins'}).Enabled
                McasMultipleStorageDeletion                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasMultipleStorageDeletion'}).Enabled
                McasMultipleVMCreation                        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasMultipleVMCreation'}).Enabled
                McasMultipleVMDeletion                        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasMultipleVMDeletion'}).Enabled
                McasSuspiciousAdminActivities                 = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasSuspiciousAdminActivities'}).Enabled
                McasSuspiciousCloudCreation                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasSuspiciousCloudCreation'}).Enabled
                McasSuspiciousCloudTrailLoggingChange         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasSuspiciousCloudTrailLoggingChange'}).Enabled
                McasTerminatedEmployeeActivity                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'McasTerminatedEmployeeActivity'}).Enabled
                OdbDownload                                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'OdbDownload'}).Enabled
                OdbSyncDownload                               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'OdbSyncDownload'}).Enabled
                PeerCumulativeExfiltrationDetector            = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'PeerCumulativeExfiltrationDetector'}).Enabled
                PhysicalAccess                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'PhysicalAccess'}).Enabled
                PotentialHighImpactUser                       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'PotentialHighImpactUser'}).Enabled
                Print                                         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'Print'}).Enabled
                PriorityUserGroupMember                       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'PriorityUserGroupMember'}).Enabled
                SecurityAlertDefenseEvasion                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SecurityAlertDefenseEvasion'}).Enabled
                SecurityAlertUnwantedSoftware                 = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SecurityAlertUnwantedSoftware'}).Enabled
                SpoAccessRequest                              = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoAccessRequest'}).Enabled
                SpoApprovedAccess                             = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoApprovedAccess'}).Enabled
                SpoDownload                                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoDownload'}).Enabled
                SpoDownloadV2                                 = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoDownloadV2'}).Enabled
                SpoFileAccessed                               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileAccessed'}).Enabled
                SpoFileDeleted                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileDeleted'}).Enabled
                SpoFileDeletedFromFirstStageRecycleBin        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileDeletedFromFirstStageRecycleBin'}).Enabled
                SpoFileDeletedFromSecondStageRecycleBin       = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileDeletedFromSecondStageRecycleBin'}).Enabled
                SpoFileLabelDowngraded                        = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileLabelDowngraded'}).Enabled
                SpoFileLabelRemoved                           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileLabelRemoved'}).Enabled
                SpoFileSharing                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFileSharing'}).Enabled
                SpoFolderDeleted                              = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFolderDeleted'}).Enabled
                SpoFolderDeletedFromFirstStageRecycleBin      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFolderDeletedFromFirstStageRecycleBin'}).Enabled
                SpoFolderDeletedFromSecondStageRecycleBin     = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFolderDeletedFromSecondStageRecycleBin'}).Enabled
                SpoFolderSharing                              = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoFolderSharing'}).Enabled
                SpoSiteExternalUserAdded                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoSiteExternalUserAdded'}).Enabled
                SpoSiteInternalUserAdded                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoSiteInternalUserAdded'}).Enabled
                SpoSiteLabelRemoved                           = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoSiteLabelRemoved'}).Enabled
                SpoSiteSharing                                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoSiteSharing'}).Enabled
                SpoSyncDownload                               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'SpoSyncDownload'}).Enabled
                TeamsChannelFileSharedExternal                = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsChannelFileSharedExternal'}).Enabled
                TeamsChannelMemberAddedExternal               = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsChannelMemberAddedExternal'}).Enabled
                TeamsChatFileSharedExternal                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsChatFileSharedExternal'}).Enabled
                TeamsFileDownload                             = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsFileDownload'}).Enabled
                TeamsFolderSharedExternal                     = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsFolderSharedExternal'}).Enabled
                TeamsMemberAddedExternal                      = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsMemberAddedExternal'}).Enabled
                TeamsSensitiveMessage                         = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'TeamsSensitiveMessage'}).Enabled
                UserHistory                                   = ($tenantSettings.Indicators | Where-Object -FilterScript {$_.Name -eq 'UserHistory'}).Enabled
                AWSS3BlockPublicAccessDisabled                = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AWSS3BlockPublicAccessDisabled'}).Enabled
                AWSS3BucketDeleted                            = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AWSS3BucketDeleted'}).Enabled
                AWSS3PublicAccessEnabled                      = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AWSS3PublicAccessEnabled'}).Enabled
                AWSS3ServerLoggingDisabled                    = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AWSS3ServerLoggingDisabled'}).Enabled
                AzureElevateAccessToAllSubscriptions          = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureElevateAccessToAllSubscriptions'}).Enabled
                AzureResourceThreatProtectionSettingsUpdated  = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureResourceThreatProtectionSettingsUpdated'}).Enabled
                AzureSQLServerAuditingSettingsUpdated         = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureSQLServerAuditingSettingsUpdated'}).Enabled
                AzureSQLServerFirewallRuleDeleted             = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureSQLServerFirewallRuleDeleted'}).Enabled
                AzureSQLServerFirewallRuleUpdated             = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureSQLServerFirewallRuleUpdated'}).Enabled
                AzureStorageAccountOrContainerDeleted         = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'AzureStorageAccountOrContainerDeleted'}).Enabled
                BoxContentAccess                              = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'BoxContentAccess'}).Enabled
                BoxContentDelete                              = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'BoxContentDelete'}).Enabled
                BoxContentDownload                            = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'BoxContentDownload'}).Enabled
                BoxContentExternallyShared                    = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'BoxContentExternallyShared'}).Enabled
                CCFinancialRegulatoryRiskyTextSent            = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'CCFinancialRegulatoryRiskyTextSent'}).Enabled
                CCInappropriateContentSent                    = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'CCInappropriateContentSent'}).Enabled
                CCInappropriateImagesSent                     = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'CCInappropriateImagesSent'}).Enabled
                DropboxContentAccess                          = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'DropboxContentAccess'}).Enabled
                DropboxContentDelete                          = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'DropboxContentDelete'}).Enabled
                DropboxContentDownload                        = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'DropboxContentDownload'}).Enabled
                DropboxContentExternallyShared                = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'DropboxContentExternallyShared'}).Enabled
                GoogleDriveContentAccess                      = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'GoogleDriveContentAccess'}).Enabled
                GoogleDriveContentDelete                      = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'GoogleDriveContentDelete'}).Enabled
                GoogleDriveContentExternallyShared            = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'GoogleDriveContentExternallyShared'}).Enabled
                PowerBIDashboardsDeleted                      = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBIDashboardsDeleted'}).Enabled
                PowerBIReportsDeleted                         = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBIReportsDeleted'}).Enabled
                PowerBIReportsDownloaded                      = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBIReportsDownloaded'}).Enabled
                PowerBIReportsExported                        = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBIReportsExported'}).Enabled
                PowerBIReportsViewed                          = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBIReportsViewed'}).Enabled
                PowerBISemanticModelsDeleted                  = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBISemanticModelsDeleted'}).Enabled
                PowerBISensitivityLabelDowngradedForArtifacts = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBISensitivityLabelDowngradedForArtifacts'}).Enabled
                PowerBISensitivityLabelRemovedFromArtifacts   = ($tenantSettings.ExtensibleIndicators | Where-Object -FilterScript {$_.Name -eq 'PowerBISensitivityLabelRemovedFromArtifacts'}).Enabled
                HistoricTimeSpan                              = $tenantSettings.TimeSpan.HistoricTimeSpan
                InScopeTimeSpan                               = $tenantSettings.TimeSpan.InScopeTimeSpan
                EnableTeam                                    = [Boolean]($tenantSettings.FeatureSettings.EnableTeam)
            }

            $AnalyticsNewInsight = $tenantSettings.NotificationPreferences | Where-Object -FilterScript {$_.NotificationType -eq 'AnalyticsNewInsight'}
            if ($null -ne $AnalyticsNewInsight)
            {
                $tenantSettingsHash.Add('AnalyticsNewInsightEnabled', [Boolean]$AnalyticsNewInsight.Enabled)
            }

            $AnalyticsTurnedOff = $tenantSettings.NotificationPreferences | Where-Object -FilterScript {$_.NotificationType -eq 'AnalyticsTurnedOff'}
            if ($null -ne $AnalyticsTurnedOff)
            {
                $tenantSettingsHash.Add('AnalyticsTurnedOffEnabled', [Boolean]$AnalyticsTurnedOff.Enabled)
            }

            $highSeverityAlerts = $tenantSettings.NotificationPreferences | Where-Object -FilterScript {$_.NotificationType -eq 'HighSeverityAlerts'}
            if ($null -ne $highSeverityAlerts)
            {
                $tenantSettingsHash.Add('HighSeverityAlertsEnabled', [Boolean]$highSeverityAlerts.Enabled)
                $tenantSettingsHash.Add('HighSeverityAlertsRoleGroups', [Array]$highSeverityAlerts.RoleGroups)
            }

            $policiesHealth = $tenantSettings.NotificationPreferences | Where-Object -FilterScript {$_.NotificationType -eq 'PoliciesHealth'}
            if ($null -ne $policiesHealth)
            {
                $tenantSettingsHash.Add('PoliciesHealthEnabled', [Boolean]$policiesHealth.Enabled)
                $tenantSettingsHash.Add('PoliciesHealthRoleGroups', [Array]$policiesHealth.RoleGroups)
            }

            if ($null -ne $tenantSettings.FeatureSettings.NotificationDetails)
            {
                $tenantSettingsHash.Add('NotificationDetailsEnabled', $true)
                $tenantSettingsHash.Add('NotificationDetailsRoleGroups', [Array]$tenantSettings.FeatureSettings.NotificationDetails.RoleGroups)
            }
            else
            {
                $tenantSettingsHash.Add('NotificationDetailsEnabled', $false)
            }

            # Adaptive Protection
            $AdaptiveProtectionEnabledValue = $false
            if ($null -ne $tenantSettings.DynamicRiskPreventionSettings -and `
                $null -ne $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings)
            {
                if ($tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.ActivationStatus -eq 0)
                {
                    $AdaptiveProtectionEnabledValue = $true
                }
                else
                {
                    $AdaptiveProtectionEnabledValue = $false
                }

                # High Profile
                if ($null -ne $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.HighProfile)
                {
                    $highProfile = $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.HighProfile
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileSourceType', $highProfile.ProfileSourceType)
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileConfirmedIssueSeverity', $highProfile.ConfirmedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileGeneratedIssueSeverity', $highProfile.GeneratedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileInsightSeverity', $highProfile.InsightSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileInsightCount', $highProfile.InsightCount)
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileInsightTypes', [Array]($highProfile.InsightTypes))
                    $tenantSettingsHash.Add('AdaptiveProtectionHighProfileConfirmedIssue', $highProfile.ConfirmedIssue)
                }

                # Medium Profile
                if ($null -ne $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.MediumProfile)
                {
                    $mediumProfile = $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.MediumProfile
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileSourceType', $mediumProfile.ProfileSourceType)
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileConfirmedIssueSeverity', $mediumProfile.ConfirmedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileGeneratedIssueSeverity', $mediumProfile.GeneratedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileInsightSeverity', $mediumProfile.InsightSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileInsightCount', $mediumProfile.InsightCount)
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileInsightTypes', [Array]($mediumProfile.InsightTypes))
                    $tenantSettingsHash.Add('AdaptiveProtectionMediumProfileConfirmedIssue', $mediumProfile.ConfirmedIssue)
                }

                # Low Profile
                if ($null -ne $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.LowProfile)
                {
                    $lowProfile = $tenantSettings.DynamicRiskPreventionSettings.DynamicRiskScenarioSettings.LowProfile
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileSourceType', $lowProfile.ProfileSourceType)
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileConfirmedIssueSeverity', $lowProfile.ConfirmedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileGeneratedIssueSeverity', $lowProfile.GeneratedIssueSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileInsightSeverity', $lowProfile.InsightSeverity)
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileInsightCount', $lowProfile.InsightCount)
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileInsightTypes', [Array]($lowProfile.InsightTypes))
                    $tenantSettingsHash.Add('AdaptiveProtectionLowProfileConfirmedIssue', $lowProfile.ConfirmedIssue)
                }

                $tenantSettingsHash.Add('ProfileInScopeTimeSpan', $tenantSettings.DynamicRiskPreventionSettings.ProfileInScopeTimeSpan)
                $tenantSettingsHash.Add('LookbackTimeSpan', $tenantSettings.DynamicRiskPreventionSettings.LookbackTimeSpan)
                $tenantSettingsHash.Add('RetainSeverityAfterTriage', $tenantSettings.DynamicRiskPreventionSettings.RetainSeverityAfterTriage)
            }
            $tenantSettingsHash.Add('AdaptiveProtectionEnabled', $AdaptiveProtectionEnabledValue)

            $results += $tenantSettingsHash
        }

        return [System.Collections.Hashtable] $results
    }
    catch
    {
        Write-Verbose -Message $_
        New-M365DSCLogEntry -Message 'Error retrieving data:' `
            -Exception $_ `
            -Source $($MyInvocation.MyCommand.Source) `
            -TenantId $TenantId `
            -Credential $Credential

        return $nullResult
    }
}

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $Name,

        [Parameter(Mandatory = $true)]
        [System.String]
        $InsiderRiskScenario,

        [Parameter()]
        [System.Boolean]
        $Anonymization,

        [Parameter()]
        [System.Boolean]
        $DLPUserRiskSync,

        [Parameter()]
        [System.Boolean]
        $OptInIRMDataExport,

        [Parameter()]
        [System.Boolean]
        $RaiseAuditAlert,

        [Parameter()]
        [System.String]
        $FileVolCutoffLimits,

        [Parameter()]
        [System.String]
        $AlertVolume,

        [Parameter()]
        [System.Boolean]
        $AnomalyDetections,

        [Parameter()]
        [System.Boolean]
        $CopyToPersonalCloud,

        [Parameter()]
        [System.Boolean]
        $CopyToUSB,

        [Parameter()]
        [System.Boolean]
        $CumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $EmailExternal,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedEmployeePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedFamilyData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedHighVolumePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedNeighbourData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedRestrictedData,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToChildAbuseSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCriminalActivitySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCultSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToGamblingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHackingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHateIntoleranceSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToIllegalSoftwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToKeyloggerSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToLlmSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToMalwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPhishingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPornographySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToUnallowedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToViolenceSites,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToClipboardFromSensitiveFile,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToNetworkShare,

        [Parameter()]
        [System.Boolean]
        $EpoFileArchived,

        [Parameter()]
        [System.Boolean]
        $EpoFileCopiedToRemoteDesktopSession,

        [Parameter()]
        [System.Boolean]
        $EpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromBlacklistedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromEnterpriseDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileRenamed,

        [Parameter()]
        [System.Boolean]
        $EpoFileStagedToCentralLocation,

        [Parameter()]
        [System.Boolean]
        $EpoHiddenFileCreated,

        [Parameter()]
        [System.Boolean]
        $EpoRemovableMediaMount,

        [Parameter()]
        [System.Boolean]
        $EpoSensitiveFileRead,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppDownload,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileDelete,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileSharing,

        [Parameter()]
        [System.Boolean]
        $McasActivityFromInfrequentCountry,

        [Parameter()]
        [System.Boolean]
        $McasImpossibleTravel,

        [Parameter()]
        [System.Boolean]
        $McasMultipleFailedLogins,

        [Parameter()]
        [System.Boolean]
        $McasMultipleStorageDeletion,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMCreation,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMDeletion,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousAdminActivities,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudCreation,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudTrailLoggingChange,

        [Parameter()]
        [System.Boolean]
        $McasTerminatedEmployeeActivity,

        [Parameter()]
        [System.Boolean]
        $OdbDownload,

        [Parameter()]
        [System.Boolean]
        $OdbSyncDownload,

        [Parameter()]
        [System.Boolean]
        $PeerCumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $PhysicalAccess,

        [Parameter()]
        [System.Boolean]
        $PotentialHighImpactUser,

        [Parameter()]
        [System.Boolean]
        $Print,

        [Parameter()]
        [System.Boolean]
        $PriorityUserGroupMember,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertDefenseEvasion,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertUnwantedSoftware,

        [Parameter()]
        [System.Boolean]
        $SpoAccessRequest,

        [Parameter()]
        [System.Boolean]
        $SpoApprovedAccess,

        [Parameter()]
        [System.Boolean]
        $SpoDownload,

        [Parameter()]
        [System.Boolean]
        $SpoDownloadV2,

        [Parameter()]
        [System.Boolean]
        $SpoFileAccessed,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelDowngraded,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoFileSharing,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSiteExternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteInternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoSiteSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSyncDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChatFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsFileDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsFolderSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsSensitiveMessage,

        [Parameter()]
        [System.Boolean]
        $UserHistory,

        [Parameter()]
        [System.Boolean]
        $AWSS3BlockPublicAccessDisabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3BucketDeleted,

        [Parameter()]
        [System.Boolean]
        $AWSS3PublicAccessEnabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3ServerLoggingDisabled,

        [Parameter()]
        [System.Boolean]
        $AzureElevateAccessToAllSubscriptions,

        [Parameter()]
        [System.Boolean]
        $AzureResourceThreatProtectionSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerAuditingSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleDeleted,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureStorageAccountOrContainerDeleted,

        [Parameter()]
        [System.Boolean]
        $BoxContentAccess,

        [Parameter()]
        [System.Boolean]
        $BoxContentDelete,

        [Parameter()]
        [System.Boolean]
        $BoxContentDownload,

        [Parameter()]
        [System.Boolean]
        $BoxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $CCFinancialRegulatoryRiskyTextSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateContentSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateImagesSent,

        [Parameter()]
        [System.Boolean]
        $DropboxContentAccess,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDelete,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDownload,

        [Parameter()]
        [System.Boolean]
        $DropboxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentAccess,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentDelete,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $PowerBIDashboardsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDownloaded,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsExported,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsViewed,

        [Parameter()]
        [System.Boolean]
        $PowerBISemanticModelsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelDowngradedForArtifacts,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelRemovedFromArtifacts,

        [Parameter()]
        [System.String]
        $HistoricTimeSpan,

        [Parameter()]
        [System.String]
        $InScopeTimeSpan,

        [Parameter()]
        [System.Boolean]
        $EnableTeam,

        [Parameter()]
        [System.Boolean]
        $AnalyticsNewInsightEnabled,

        [Parameter()]
        [System.Boolean]
        $AnalyticsTurnedOffEnabled,

        [Parameter()]
        [System.Boolean]
        $HighSeverityAlertsEnabled,

        [Parameter()]
        [System.String[]]
        $HighSeverityAlertsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $PoliciesHealthEnabled,

        [Parameter()]
        [System.String[]]
        $PoliciesHealthRoleGroups,

        [Parameter()]
        [System.Boolean]
        $NotificationDetailsEnabled,

        [Parameter()]
        [System.String[]]
        $NotificationDetailsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $ClipDeletionEnabled,

        [Parameter()]
        [System.Boolean]
        $SessionRecordingEnabled,

        [Parameter()]
        [System.String]
        $RecordingTimeframePreEventInSec,

        [Parameter()]
        [System.String]
        $RecordingTimeframePostEventInSec,

        [Parameter()]
        [System.String]
        $BandwidthCapInMb,

        [Parameter()]
        [System.String]
        $OfflineRecordingStorageLimitInMb,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionEnabled,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionHighProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionHighProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionMediumProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionMediumProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionLowProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionLowProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $ProfileInscopeTimeSpan,

        [Parameter()]
        [System.UInt32]
        $LookbackTimeSpan,

        [Parameter()]
        [System.Boolean]
        $RetainSeverityAfterTriage,

        [Parameter()]
        [System.String[]]
        $MDATPTriageStatus,

        [Parameter()]
        [System.UInt32]
        $CPUUtilizationLimit,

        [Parameter()]
        [System.UInt32]
        $GPUUtilizationLimit,

        [Parameter()]
        [ValidateSet('Present', 'Absent')]
        [System.String]
        $Ensure = 'Present',

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $Credential,

        [Parameter()]
        [System.String]
        $ApplicationId,

        [Parameter()]
        [System.String]
        $TenantId,

        [Parameter()]
        [System.String]
        $CertificateThumbprint,

        [Parameter()]
        [Switch]
        $ManagedIdentity,

        [Parameter()]
        [System.String[]]
        $AccessTokens
    )

    #Ensure the proper dependencies are installed in the current environment.
    Confirm-M365DSCDependencies

    #region Telemetry
    $ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
    $CommandName = $MyInvocation.MyCommand
    $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
        -CommandName $CommandName `
        -Parameters $PSBoundParameters
    Add-M365DSCTelemetryEvent -Data $data
    #endregion

    $currentInstance = Get-TargetResource @PSBoundParameters

    $setParameters = Remove-M365DSCAuthenticationParameter -BoundParameters $PSBoundParameters

    $indicatorsProperties = @('AnomalyDetections','CopyToPersonalCloud','CopyToUSB','CumulativeExfiltrationDetector', `
                              'EmailExternal','EmployeeAccessedEmployeePatientData','EmployeeAccessedFamilyData', `
                              'EmployeeAccessedHighVolumePatientData','EmployeeAccessedNeighbourData', `
                              'EmployeeAccessedRestrictedData','EpoBrowseToChildAbuseSites','EpoBrowseToCriminalActivitySites', `
                              'EpoBrowseToCultSites','EpoBrowseToGamblingSites','EpoBrowseToHackingSites', `
                              'EpoBrowseToHateIntoleranceSites','EpoBrowseToIllegalSoftwareSites','EpoBrowseToKeyloggerSites', `
                              'EpoBrowseToLlmSites','EpoBrowseToMalwareSites','EpoBrowseToPhishingSites', `
                              'EpoBrowseToPornographySites','EpoBrowseToUnallowedDomain','EpoBrowseToViolenceSites', `
                              'EpoCopyToClipboardFromSensitiveFile','EpoCopyToNetworkShare','EpoFileArchived', `
                              'EpoFileCopiedToRemoteDesktopSession','EpoFileDeleted','EpoFileDownloadedFromBlacklistedDomain', `
                              'EpoFileDownloadedFromEnterpriseDomain','EpoFileRenamed','EpoFileStagedToCentralLocation', `
                              'EpoHiddenFileCreated','EpoRemovableMediaMount','EpoSensitiveFileRead','Mcas3rdPartyAppDownload', `
                              'Mcas3rdPartyAppFileDelete','Mcas3rdPartyAppFileSharing','McasActivityFromInfrequentCountry', `
                              'McasImpossibleTravel','McasMultipleFailedLogins','McasMultipleStorageDeletion', `
                              'McasMultipleVMCreation','McasMultipleVMDeletion','McasSuspiciousAdminActivities', `
                              'McasSuspiciousCloudCreation','McasSuspiciousCloudTrailLoggingChange','McasTerminatedEmployeeActivity', `
                              'OdbDownload','OdbSyncDownload','PeerCumulativeExfiltrationDetector','PhysicalAccess', `
                              'PotentialHighImpactUser','Print','PriorityUserGroupMember','SecurityAlertDefenseEvasion', `
                              'SecurityAlertUnwantedSoftware','SpoAccessRequest','SpoApprovedAccess','SpoDownload','SpoDownloadV2', `
                              'SpoFileAccessed','SpoFileDeleted','SpoFileDeletedFromFirstStageRecycleBin', `
                              'SpoFileDeletedFromSecondStageRecycleBin','SpoFileLabelDowngraded','SpoFileLabelRemoved', `
                              'SpoFileSharing','SpoFolderDeleted','SpoFolderDeletedFromFirstStageRecycleBin', `
                              'SpoFolderDeletedFromSecondStageRecycleBin','SpoFolderSharing','SpoSiteExternalUserAdded', `
                              'SpoSiteInternalUserAdded','SpoSiteLabelRemoved','SpoSiteSharing','SpoSyncDownload', `
                              'TeamsChannelFileSharedExternal','TeamsChannelMemberAddedExternal','TeamsChatFileSharedExternal', `
                              'TeamsFileDownload','TeamsFolderSharedExternal','TeamsMemberAddedExternal','TeamsSensitiveMessage', `
                              'UserHistory')

    $indicatorValues = @()
    foreach ($indicatorProperty in $indicatorsProperties)
    {
        if ($PSBoundParameters.ContainsKey($indicatorProperty))
        {
            $indicatorValues += "{`"Name`":`"$indicatorProperty`",`"Type`":`"Insight`",`"Enabled`":$(($PSBoundParameters.$indicatorProperty).ToString().ToLower()),`"UseDefault`":true,`"ThresholdMode`":`"Default`"}"
        }
    }

    $extensibleIndicatorsProperties = @('AWSS3BlockPublicAccessDisabled','AWSS3BucketDeleted','AWSS3PublicAccessEnabled',`
        'AWSS3ServerLoggingDisabled','AzureElevateAccessToAllSubscriptions','AzureResourceThreatProtectionSettingsUpdated', `
        'AzureSQLServerAuditingSettingsUpdated','AzureSQLServerFirewallRuleDeleted','AzureSQLServerFirewallRuleUpdated', `
        'AzureStorageAccountOrContainerDeleted','BoxContentAccess','BoxContentDelete','BoxContentDownload','BoxContentExternallyShared', `
        'CCFinancialRegulatoryRiskyTextSent','CCInappropriateContentSent','CCInappropriateImagesSent','DropboxContentAccess', `
        'DropboxContentDelete','DropboxContentDownload','DropboxContentExternallyShared','GoogleDriveContentAccess', `
        'GoogleDriveContentDelete','GoogleDriveContentExternallyShared','PowerBIDashboardsDeleted','PowerBIReportsDeleted', `
        'PowerBIReportsDownloaded','PowerBIReportsExported','PowerBIReportsViewed','PowerBISemanticModelsDeleted', `
        'PowerBISensitivityLabelDowngradedForArtifacts','PowerBISensitivityLabelRemovedFromArtifacts')

    $extensibleIndicatorsValues = @()
    foreach ($extensibleIndicatorsProperty in $extensibleIndicatorsProperties)
    {
        if ($PSBoundParameters.ContainsKey($extensibleIndicatorsProperty))
        {
            $extensibleIndicatorsValues += "{`"Name`":`"$extensibleIndicatorsProperty`",`"Type`":`"ExtensibleInsight`",`"Enabled`":$(($PSBoundParameters.$extensibleIndicatorsProperty).ToString().ToLower()),`"UseDefault`":true,`"ThresholdMode`":`"Default`"}"
        }
    }

    # Tenant Settings
    $featureSettingsValue = "{`"Anonymization`":$($Anonymization.ToString().ToLower()), `"DLPUserRiskSync`":$($DLPUserRiskSync.ToString().ToLower()), `"OptInIRMDataExport`":$($OptInIRMDataExport.ToString().ToLower()), `"RaiseAuditAlert`":$($RaiseAuditAlert.ToString().ToLower()), `"EnableTeam`":$($EnableTeam.ToString().ToLower())}"
    $intelligentDetectionValue = "{`"FileVolCutoffLimits`":`"$($FileVolCutoffLimits)`", `"AlertVolume`":`"$($AlertVolume)`", `"MDATPTriageStatus`": `"$($MDATPTriageStatus)`"}"


    $tenantSettingsValue = "{`"Region`":`"WW`", `"FeatureSettings`":$($featureSettingsValue), " + `
                            "`"IntelligentDetections`":$($intelligentDetectionValue)"
    if ($null -ne $AdaptiveProtectionEnabled)
    {
        Write-Verbose -Message "Adding Adaptive Protection setting to the set parameters."
        $AdaptiveProtectionActivatonStatus = 1
        if ($AdaptiveProtectionEnabled)
        {
            $AdaptiveProtectionActivatonStatus = 0
        }
        $dynamicRiskPreventionSettings = "{`"RetainSeverityAfterTriage`":$($RetainSeverityAfterTriage.ToString().ToLower()),`"ProfileInScopeTimeSpan`":$($ProfileInscopeTimeSpan), `"LookbackTimeSpan`":$($LookbackTimeSpan), `"DynamicRiskScenarioSettings`":[{`"ActivationStatus`":$AdaptiveProtectionActivatonStatus"
        $dynamicRiskPreventionSettings += ", `"HighProfile`":{`"ProfileSourceType`":$($AdaptiveProtectionHighProfileSourceType), `"ConfirmedIssueSeverity`":$($AdaptiveProtectionHighProfileConfirmedIssueSeverity), `"GeneratedIssueSeverity`":$($AdaptiveProtectionHighProfileGeneratedIssueSeverity), `"InsightSeverity`": $($AdaptiveProtectionHighProfileInsightSeverity), `"InsightCount`": $($AdaptiveProtectionHighProfileInsightCount), `"InsightTypes`": [`"$($AdaptiveProtectionHighProfileInsightTypes -join '","')`"], `"ConfirmedIssue`": $($AdaptiveProtectionHighProfileConfirmedIssue.ToString().ToLower())}"
        $dynamicRiskPreventionSettings += ", `"MediumProfile`":{`"ProfileSourceType`":$($AdaptiveProtectionMediumProfileSourceType), `"ConfirmedIssueSeverity`":$($AdaptiveProtectionMediumProfileConfirmedIssueSeverity), `"GeneratedIssueSeverity`":$($AdaptiveProtectionMediumProfileGeneratedIssueSeverity), `"InsightSeverity`": $($AdaptiveProtectionMediumProfileInsightSeverity), `"InsightCount`": $($AdaptiveProtectionMediumProfileInsightCount), `"InsightTypes`": [`"$($AdaptiveProtectionMediumProfileInsightTypes -join '","')`"], `"ConfirmedIssue`": $($AdaptiveProtectionMediumProfileConfirmedIssue.ToString().ToLower())}"
        $dynamicRiskPreventionSettings += ", `"LowProfile`":{`"ProfileSourceType`":$($AdaptiveProtectionLowProfileSourceType), `"ConfirmedIssueSeverity`":$($AdaptiveProtectionLowProfileConfirmedIssueSeverity), `"GeneratedIssueSeverity`":$($AdaptiveProtectionLowProfileGeneratedIssueSeverity), `"InsightSeverity`": $($AdaptiveProtectionLowProfileInsightSeverity), `"InsightCount`": $($AdaptiveProtectionLowProfileInsightCount), `"InsightTypes`": [`"$($AdaptiveProtectionLowProfileInsightTypes -join '","')`"], `"ConfirmedIssue`": $($AdaptiveProtectionLowProfileConfirmedIssue.ToString().ToLower())}"
        $dynamicRiskPreventionSettings += '}]}'
        $tenantSettingsValue += ", `"DynamicRiskPreventionSettings`":$dynamicRiskPreventionSettings"
    }

    $tenantSettingsValue += "}"

    # CREATE
    if ($Ensure -eq 'Present' -and $currentInstance.Ensure -eq 'Absent')
    {
        Write-Verbose -Message "Creating new Insider Risk Policy {$Name} with values:`r`nIndicators: $($indicatorValues)`r`n`r`nExtensibleIndicators: $($extensibleIndicatorsValues)`r`n`r`nTenantSettings: $($tenantSettingsValue)`r`n`r`nSessionRecordingSettings: $($sessionRecordingValues)"
        New-InsiderRiskPolicy -Name $Name -InsiderRiskScenario $InsiderRiskScenario `
                              -Indicators $indicatorValues `
                              -ExtensibleIndicators $extensibleIndicatorsValues `
                              -TenantSetting $tenantSettingsValue `
                              -HistoricTimeSpan $HistoricTimeSpan `
                              -InScopeTimeSpan $InScopeTimeSpan `
                              -SessionRecordingSettings $sessionRecordingValues
    }
    # UPDATE
    elseif ($Ensure -eq 'Present' -and $currentInstance.Ensure -eq 'Present')
    {
        Write-Verbose -Message "Updating existing Insider Risk Policy {$Name} with values:`r`nIndicators: $($indicatorValues)`r`n`r`nExtensibleIndicators: $($extensibleIndicatorsValues)`r`n`r`nTenantSettings: $($tenantSettingsValue)`r`n`r`nSessionRecordingSettings: $($sessionRecordingValues)"

        if ($InsiderRiskScenario -eq 'SessionRecordingSetting')
        {
            $sessionRecordingValues = "{`"RecordingMode`":`"EventDriven`", `"RecordingTimeframePreEventInSec`":$($RecordingTimeframePreEventInSec),`"RecordingTimeframePostEventInSec`":$($RecordingTimeframePostEventInSec),`"BandwidthCapInMb`":$($BandwidthCapInMb),`"OfflineRecordingStorageLimitInMb`":$($OfflineRecordingStorageLimitInMb),`"ClipDeletionEnabled`":$($ClipDeletionEnabled.ToString().ToLower()),`"Enabled`":$($SessionRecordingEnabled.ToString().ToLower()),`"FpsNumerator`":0,`"FpsDenominator`":0, `"GPUUtilizationLimit`": $($GPUUtilizationLimit), `"CPUUtilizationLimit`": $($CPUUtilizationLimit)}"
            Write-Verbose -Message 'Updating Session Recording Settings'
            Set-InsiderRiskPolicy -Identity $Name -SessionRecordingSettings $sessionRecordingValues | Out-Null
        }
        else
        {
            Set-InsiderRiskPolicy -Identity $Name -Indicators $indicatorValues `
                -ExtensibleIndicators $extensibleIndicatorsValues `
                -TenantSetting $tenantSettingsValue `
                -HistoricTimeSpan $HistoricTimeSpan `
                -InScopeTimeSpan $InScopeTimeSpan
        }
    }
    # REMOVE
    elseif ($Ensure -eq 'Absent' -and $currentInstance.Ensure -eq 'Present')
    {
        Write-Verbose -Message "Removing Insider Risk Policy {$Name}"
        Remove-InsiderRiskPolicy -Identity $Name -Confirm:$false
    }
}

function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $Name,

        [Parameter(Mandatory = $true)]
        [System.String]
        $InsiderRiskScenario,

        [Parameter()]
        [System.Boolean]
        $Anonymization,

        [Parameter()]
        [System.Boolean]
        $DLPUserRiskSync,

        [Parameter()]
        [System.Boolean]
        $OptInIRMDataExport,

        [Parameter()]
        [System.Boolean]
        $RaiseAuditAlert,

        [Parameter()]
        [System.String]
        $FileVolCutoffLimits,

        [Parameter()]
        [System.String]
        $AlertVolume,

        [Parameter()]
        [System.Boolean]
        $AnomalyDetections,

        [Parameter()]
        [System.Boolean]
        $CopyToPersonalCloud,

        [Parameter()]
        [System.Boolean]
        $CopyToUSB,

        [Parameter()]
        [System.Boolean]
        $CumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $EmailExternal,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedEmployeePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedFamilyData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedHighVolumePatientData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedNeighbourData,

        [Parameter()]
        [System.Boolean]
        $EmployeeAccessedRestrictedData,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToChildAbuseSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCriminalActivitySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToCultSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToGamblingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHackingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToHateIntoleranceSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToIllegalSoftwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToKeyloggerSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToLlmSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToMalwareSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPhishingSites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToPornographySites,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToUnallowedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoBrowseToViolenceSites,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToClipboardFromSensitiveFile,

        [Parameter()]
        [System.Boolean]
        $EpoCopyToNetworkShare,

        [Parameter()]
        [System.Boolean]
        $EpoFileArchived,

        [Parameter()]
        [System.Boolean]
        $EpoFileCopiedToRemoteDesktopSession,

        [Parameter()]
        [System.Boolean]
        $EpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromBlacklistedDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileDownloadedFromEnterpriseDomain,

        [Parameter()]
        [System.Boolean]
        $EpoFileRenamed,

        [Parameter()]
        [System.Boolean]
        $EpoFileStagedToCentralLocation,

        [Parameter()]
        [System.Boolean]
        $EpoHiddenFileCreated,

        [Parameter()]
        [System.Boolean]
        $EpoRemovableMediaMount,

        [Parameter()]
        [System.Boolean]
        $EpoSensitiveFileRead,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppDownload,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileDelete,

        [Parameter()]
        [System.Boolean]
        $Mcas3rdPartyAppFileSharing,

        [Parameter()]
        [System.Boolean]
        $McasActivityFromInfrequentCountry,

        [Parameter()]
        [System.Boolean]
        $McasImpossibleTravel,

        [Parameter()]
        [System.Boolean]
        $McasMultipleFailedLogins,

        [Parameter()]
        [System.Boolean]
        $McasMultipleStorageDeletion,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMCreation,

        [Parameter()]
        [System.Boolean]
        $McasMultipleVMDeletion,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousAdminActivities,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudCreation,

        [Parameter()]
        [System.Boolean]
        $McasSuspiciousCloudTrailLoggingChange,

        [Parameter()]
        [System.Boolean]
        $McasTerminatedEmployeeActivity,

        [Parameter()]
        [System.Boolean]
        $OdbDownload,

        [Parameter()]
        [System.Boolean]
        $OdbSyncDownload,

        [Parameter()]
        [System.Boolean]
        $PeerCumulativeExfiltrationDetector,

        [Parameter()]
        [System.Boolean]
        $PhysicalAccess,

        [Parameter()]
        [System.Boolean]
        $PotentialHighImpactUser,

        [Parameter()]
        [System.Boolean]
        $Print,

        [Parameter()]
        [System.Boolean]
        $PriorityUserGroupMember,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertDefenseEvasion,

        [Parameter()]
        [System.Boolean]
        $SecurityAlertUnwantedSoftware,

        [Parameter()]
        [System.Boolean]
        $SpoAccessRequest,

        [Parameter()]
        [System.Boolean]
        $SpoApprovedAccess,

        [Parameter()]
        [System.Boolean]
        $SpoDownload,

        [Parameter()]
        [System.Boolean]
        $SpoDownloadV2,

        [Parameter()]
        [System.Boolean]
        $SpoFileAccessed,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelDowngraded,

        [Parameter()]
        [System.Boolean]
        $SpoFileLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoFileSharing,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeleted,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromFirstStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderDeletedFromSecondStageRecycleBin,

        [Parameter()]
        [System.Boolean]
        $SpoFolderSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSiteExternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteInternalUserAdded,

        [Parameter()]
        [System.Boolean]
        $SpoSiteLabelRemoved,

        [Parameter()]
        [System.Boolean]
        $SpoSiteSharing,

        [Parameter()]
        [System.Boolean]
        $SpoSyncDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChannelMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsChatFileSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsFileDownload,

        [Parameter()]
        [System.Boolean]
        $TeamsFolderSharedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsMemberAddedExternal,

        [Parameter()]
        [System.Boolean]
        $TeamsSensitiveMessage,

        [Parameter()]
        [System.Boolean]
        $UserHistory,

        [Parameter()]
        [System.Boolean]
        $AWSS3BlockPublicAccessDisabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3BucketDeleted,

        [Parameter()]
        [System.Boolean]
        $AWSS3PublicAccessEnabled,

        [Parameter()]
        [System.Boolean]
        $AWSS3ServerLoggingDisabled,

        [Parameter()]
        [System.Boolean]
        $AzureElevateAccessToAllSubscriptions,

        [Parameter()]
        [System.Boolean]
        $AzureResourceThreatProtectionSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerAuditingSettingsUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleDeleted,

        [Parameter()]
        [System.Boolean]
        $AzureSQLServerFirewallRuleUpdated,

        [Parameter()]
        [System.Boolean]
        $AzureStorageAccountOrContainerDeleted,

        [Parameter()]
        [System.Boolean]
        $BoxContentAccess,

        [Parameter()]
        [System.Boolean]
        $BoxContentDelete,

        [Parameter()]
        [System.Boolean]
        $BoxContentDownload,

        [Parameter()]
        [System.Boolean]
        $BoxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $CCFinancialRegulatoryRiskyTextSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateContentSent,

        [Parameter()]
        [System.Boolean]
        $CCInappropriateImagesSent,

        [Parameter()]
        [System.Boolean]
        $DropboxContentAccess,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDelete,

        [Parameter()]
        [System.Boolean]
        $DropboxContentDownload,

        [Parameter()]
        [System.Boolean]
        $DropboxContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentAccess,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentDelete,

        [Parameter()]
        [System.Boolean]
        $GoogleDriveContentExternallyShared,

        [Parameter()]
        [System.Boolean]
        $PowerBIDashboardsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsDownloaded,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsExported,

        [Parameter()]
        [System.Boolean]
        $PowerBIReportsViewed,

        [Parameter()]
        [System.Boolean]
        $PowerBISemanticModelsDeleted,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelDowngradedForArtifacts,

        [Parameter()]
        [System.Boolean]
        $PowerBISensitivityLabelRemovedFromArtifacts,

        [Parameter()]
        [System.String]
        $HistoricTimeSpan,

        [Parameter()]
        [System.String]
        $InScopeTimeSpan,

        [Parameter()]
        [System.Boolean]
        $EnableTeam,

        [Parameter()]
        [System.Boolean]
        $AnalyticsNewInsightEnabled,

        [Parameter()]
        [System.Boolean]
        $AnalyticsTurnedOffEnabled,

        [Parameter()]
        [System.Boolean]
        $HighSeverityAlertsEnabled,

        [Parameter()]
        [System.String[]]
        $HighSeverityAlertsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $PoliciesHealthEnabled,

        [Parameter()]
        [System.String[]]
        $PoliciesHealthRoleGroups,

        [Parameter()]
        [System.Boolean]
        $NotificationDetailsEnabled,

        [Parameter()]
        [System.String[]]
        $NotificationDetailsRoleGroups,

        [Parameter()]
        [System.Boolean]
        $ClipDeletionEnabled,

        [Parameter()]
        [System.Boolean]
        $SessionRecordingEnabled,

        [Parameter()]
        [System.String]
        $RecordingTimeframePreEventInSec,

        [Parameter()]
        [System.String]
        $RecordingTimeframePostEventInSec,

        [Parameter()]
        [System.String]
        $BandwidthCapInMb,

        [Parameter()]
        [System.String]
        $OfflineRecordingStorageLimitInMb,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionEnabled,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionHighProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionHighProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionHighProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionMediumProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionMediumProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionMediumProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileSourceType,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileConfirmedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileGeneratedIssueSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightSeverity,

        [Parameter()]
        [System.UInt32]
        $AdaptiveProtectionLowProfileInsightCount,

        [Parameter()]
        [System.String[]]
        $AdaptiveProtectionLowProfileInsightTypes,

        [Parameter()]
        [System.Boolean]
        $AdaptiveProtectionLowProfileConfirmedIssue,

        [Parameter()]
        [System.UInt32]
        $ProfileInscopeTimeSpan,

        [Parameter()]
        [System.UInt32]
        $LookbackTimeSpan,

        [Parameter()]
        [System.Boolean]
        $RetainSeverityAfterTriage,

        [Parameter()]
        [System.String[]]
        $MDATPTriageStatus,

        [Parameter()]
        [System.UInt32]
        $CPUUtilizationLimit,

        [Parameter()]
        [System.UInt32]
        $GPUUtilizationLimit,

        [Parameter()]
        [ValidateSet('Present', 'Absent')]
        [System.String]
        $Ensure = 'Present',

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $Credential,

        [Parameter()]
        [System.String]
        $ApplicationId,

        [Parameter()]
        [System.String]
        $TenantId,

        [Parameter()]
        [System.String]
        $CertificateThumbprint,

        [Parameter()]
        [Switch]
        $ManagedIdentity,

        [Parameter()]
        [System.String[]]
        $AccessTokens
    )

    #Ensure the proper dependencies are installed in the current environment.
    Confirm-M365DSCDependencies

    #region Telemetry
    $ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
    $CommandName = $MyInvocation.MyCommand
    $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
        -CommandName $CommandName `
        -Parameters $PSBoundParameters
    Add-M365DSCTelemetryEvent -Data $data
    #endregion

    $CurrentValues = Get-TargetResource @PSBoundParameters
    $ValuesToCheck = ([Hashtable]$PSBoundParameters).Clone()

    Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)"
    Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $ValuesToCheck)"

    $testResult = Test-M365DSCParameterState -CurrentValues $CurrentValues `
        -Source $($MyInvocation.MyCommand.Source) `
        -DesiredValues $PSBoundParameters `
        -ValuesToCheck $ValuesToCheck.Keys

    Write-Verbose -Message "Test-TargetResource returned $testResult"

    return $testResult
}

function Export-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.String])]
    param
    (
        [Parameter()]
        [System.Management.Automation.PSCredential]
        $Credential,

        [Parameter()]
        [System.String]
        $ApplicationId,

        [Parameter()]
        [System.String]
        $TenantId,

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $ApplicationSecret,

        [Parameter()]
        [System.String]
        $CertificateThumbprint,

        [Parameter()]
        [Switch]
        $ManagedIdentity,

        [Parameter()]
        [System.String[]]
        $AccessTokens
    )

    $ConnectionMode = New-M365DSCConnection -Workload 'SecurityComplianceCenter' `
        -InboundParameters $PSBoundParameters

    #Ensure the proper dependencies are installed in the current environment.
    Confirm-M365DSCDependencies

    #region Telemetry
    $ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
    $CommandName = $MyInvocation.MyCommand
    $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
        -CommandName $CommandName `
        -Parameters $PSBoundParameters
    Add-M365DSCTelemetryEvent -Data $data
    #endregion

    try
    {
        $Script:ExportMode = $true
        [array] $Script:exportedInstances = Get-InsiderRiskPolicy -ErrorAction Stop

        $dscContent = ''
        $i = 1
        if ($Script:exportedInstances.Length -eq 0)
        {
            Write-Host $Global:M365DSCEmojiGreenCheckMark
        }
        else
        {
            Write-Host "`r`n" -NoNewline
        }
        foreach ($config in $Script:exportedInstances)
        {
            if ($null -ne $Global:M365DSCExportResourceInstancesCount)
            {
                $Global:M365DSCExportResourceInstancesCount++
            }
            $displayedKey = $config.Name
            Write-Host " |---[$i/$($Script:exportedInstances.Count)] $displayedKey" -NoNewline
            $params = @{
                Name                  = $config.Name
                InsiderRiskScenario   = $config.InsiderRiskScenario
                Credential            = $Credential
                ApplicationId         = $ApplicationId
                TenantId              = $TenantId
                CertificateThumbprint = $CertificateThumbprint
                ManagedIdentity       = $ManagedIdentity.IsPresent
                AccessTokens          = $AccessTokens
            }

            $Results = Get-TargetResource @Params
            $Results = Update-M365DSCExportAuthenticationResults -ConnectionMode $ConnectionMode `
                -Results $Results

            $currentDSCBlock = Get-M365DSCExportContentForResource -ResourceName $ResourceName `
                -ConnectionMode $ConnectionMode `
                -ModulePath $PSScriptRoot `
                -Results $Results `
                -Credential $Credential
            $dscContent += $currentDSCBlock
            Save-M365DSCPartialExport -Content $currentDSCBlock `
                -FileName $Global:PartialExportFileName
            Write-Host $Global:M365DSCEmojiGreenCheckMark
            $i++
        }
        return $dscContent
    }
    catch
    {
        Write-Host $Global:M365DSCEmojiRedX

        New-M365DSCLogEntry -Message 'Error during Export:' `
            -Exception $_ `
            -Source $($MyInvocation.MyCommand.Source) `
            -TenantId $TenantId `
            -Credential $Credential

        return ''
    }
}

Export-ModuleMember -Function *-TargetResource