src/Public/Invoke-MCSAssessment.ps1

function Invoke-MCSAssessment {
    Param(
    [Alias("Tenant","Tenants")]
    [string]$TenantID,
    [Alias("Subscription","Subscriptions","Subs")]
    [String[]]$SubscriptionID,
    [Alias("Workload","Workloads")]
    [String]$WorkloadName = "Default_Workload",
    [switch]$SkipCompress,
    [switch]$SkipARI,
    [switch]$SkipWARA,
    [switch]$SkipMDC,
    [switch]$SkipMCSB,
    [switch]$SkipPSRule,
    [switch]$FullWARA,
    [switch]$Debug
    )

    if ($Debug.IsPresent) {
        $DebugPreference = "Continue"
    } else {
        $DebugPreference = "SilentlyContinue"
    }

    Write-Host "Starting MCS Assessment for Workload: " -NoNewline
    Write-Host $WorkloadName -ForegroundColor Green
    Write-Debug ((get-date -Format 'yyyy-MM-dd HH:mm:ss') + ' - Setting Variables and Validating Parameters')
    $workingDirectory = (Get-Location).Path
    Write-Debug ((get-date -Format 'yyyy-MM-dd HH:mm:ss') + ' - Working Directory set to: ' + $workingDirectory)
    if ($workingDirectory -eq "C:\") {
        Write-Host "Error: Working Directory cannot be the root of C:\" -ForegroundColor Red
        exit 1
    }

    Write-Debug ((get-date -Format 'yyyy-MM-dd HH:mm:ss') + ' - Validating Parameters')
    if (-Not $TenantID) {
        Write-Host "Error: No TenantID" -ForegroundColor Red
        exit 1
    }

    if (-Not $SubscriptionID) {
        Write-Host "Error: No SubscriptionID" -ForegroundColor Red
        exit 1
    }

    if ($SkipARI.IsPresent) {
        Write-Host "Skipping ARI Data Collection as per user request."
    } else {
        Write-Host "Starting " -NoNewline
        Write-Host "ARI" -NoNewline -ForegroundColor Magenta
        Write-Host " Data Collection"
        Invoke-ARI -ReportDir $workingDirectory -ReportName $WorkloadName -NoAutoUpdate -DiagramFullEnvironment -TenantId $TenantID -SubscriptionId $SubscriptionID -Debug -IncludeCosts -Lite
    }

    $ResourceCollection = @()

    if ($SkipWARA.IsPresent) {
        Write-Host "Skipping WARA Data Collection as per user request."
    } else {
        Write-Host "Starting " -NoNewline
        Write-Host "WARA" -NoNewline -ForegroundColor Magenta
        Write-Host " Data Collection"
        $ResourceCollection += Invoke-MCSWARA -TenantID $TenantID -SubscriptionID $SubscriptionID -WorkloadName $WorkloadName -FullWARA $FullWARA -WorkingDirectory $workingDirectory
    }

    Write-Debug ((get-date -Format 'yyyy-MM-dd HH:mm:ss') + ' - Gathering Full Resource List for further data processing')
    $ResourceList = Invoke-MCSGeneralInventory -SubscriptionID $SubscriptionID

    try
        {
            $RootPath = (get-item $PSScriptRoot).parent

            $AssessmentFiles = Join-Path $RootPath 'Private' 'Assessment'

            $MDCQuery = Get-Content -Path ("$AssessmentFiles\MDC.kql") -Raw -Encoding UTF8
            $MCSBQuery = Get-Content -Path ("$AssessmentFiles\MCSB.kql") -Raw -Encoding UTF8
        }
    catch
        {
            if (!$SkipMDC.IsPresent -and !$SkipMCSB.IsPresent) {
                Write-Host "Error: Could not read MDC or MCSB queries." -ForegroundColor Red
                exit 1
            }
        }

    if ($SkipMDC.IsPresent) {
        Write-Host "Skipping Defender for Cloud Data Collection as per user request."
    } else {
        Write-Host "Starting " -NoNewline
        Write-Host "Defender for Cloud (MDC)" -NoNewline -ForegroundColor Magenta
        Write-Host " Data Collection"
        $ResourceCollection += Invoke-MCSMDC -SubscriptionID $SubscriptionID -MDCQuery $MDCQuery -ResourceList $ResourceList -WorkingDirectory $workingDirectory
        }

    if ($SkipMCSB.IsPresent) {
        Write-Host "Skipping Security Benchmark Data Collection as per user request."
    } else {
        Write-Host "Starting " -NoNewline
        Write-Host "Security Benchmark (MCSB)" -NoNewline -ForegroundColor Magenta
        Write-Host " Data Collection"
        $ResourceCollection += Invoke-MCSMCSB -SubscriptionID $SubscriptionID -MCSBQuery $MCSBQuery -ResourceList $ResourceList -WorkingDirectory $workingDirectory
    }

    if ($SkipPSRule.IsPresent) {
        Write-Host "Skipping PSRule Data Collection as per user request."
    } else {
        Write-Host "Starting " -NoNewline
        Write-Host "PSRule" -NoNewline -ForegroundColor Magenta
        Write-Host " Data Collection"
        $ResourceCollection += Invoke-MCSPSRule -SubscriptionID $SubscriptionID -WorkingDirectory $workingDirectory
    }

    Write-Host "Total Recommendation Lines to Export: " -NoNewline
    Write-Host $($ResourceCollection.Count) -ForegroundColor Cyan

    $ResourceCollection | Export-Csv -Path "$workingDirectory\Consolidated_Assessment_for_Review_$WorkloadName.csv" -NoTypeInformation -Encoding UTF8

    if ($SkipCompress.IsPresent) {
        Write-Host "Skipping compression as per user request." -ForegroundColor Yellow
    } else {
        Write-Host "Compressing generated files into ZIP file..."
        Invoke-MCSCompress -WorkingDirectory $WorkingDirectory
    }

    Remove-MCSFiles -WorkingDirectory $workingDirectory
}