Private/Get-ArgusModuleInfo.ps1

function Get-ArgusModuleInfo {
    <#
    .SYNOPSIS
        Reports whether the modules ARGUS uses are installed (required and optional).
    #>

    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param(
        [Parameter()]
        [string[]] $Name = @('Microsoft.Graph.Authentication', 'ExchangeOnlineManagement', 'PnP.PowerShell', 'MSCommerce')
    )

    $purpose = @{
        'Microsoft.Graph.Authentication' = @{ Required = $true; Purpose = 'Microsoft Graph sign-in and requests (all checks)' }
        'ExchangeOnlineManagement'       = @{ Required = $false; Purpose = 'Exchange Online checks and shared/room/equipment mailbox detection' }
        'PnP.PowerShell'                 = @{ Required = $false; Purpose = 'SharePoint tenant sharing settings and classic site administrators' }
        'MSCommerce'                     = @{ Required = $false; Purpose = 'Self-service purchase and trial policies for Copilot (Windows only)' }
    }

    foreach ($moduleName in $Name) {
        $installed = Get-Module -ListAvailable -Name $moduleName -ErrorAction SilentlyContinue | Sort-Object Version -Descending | Select-Object -First 1
        [pscustomobject]@{
            Name      = $moduleName
            Required  = if ($purpose.ContainsKey($moduleName)) { $purpose[$moduleName].Required } else { $false }
            Installed = [bool]$installed
            Version   = if ($installed) { [string]$installed.Version } else { $null }
            Purpose   = if ($purpose.ContainsKey($moduleName)) { $purpose[$moduleName].Purpose } else { '' }
        }
    }
}