Functions/Get-M365UsageReport.ps1

function Get-M365UsageReport{
    [CmdletBinding()]
    param (        
        [Parameter(Mandatory)]
        [ValidateSet('D7','D30', 'D90', 'D180')]
        $Period,
        [Parameter(Mandatory)]
        [ValidateSet(
           'TeamsTeamActivityDetail',
           'TeamsDeviceUsageUserCounts',
           'TeamsDeviceUsageTotalUserCounts',
           'TeamsDeviceUsageDistributionUserCounts',
           'TeamsDeviceUsageDistributionTotalUserCounts',
           'TeamsUserActivityUserDetail',
           'TeamsUserActivityCounts',
           'TeamsUserActivityTotalCounts',
           'TeamsUserActivityUserCounts',
           'TeamsUserActivityTotalUserCounts',
           'TeamsUserActivityDistributionUserCounts',
           'TeamsUserActivityDistributionTotalUserCounts',
           'TeamsUserActivityTotalDistributionCounts',
           'TeamsTeamActivityDetail',
           'TeamsTeamActivityCounts',
           'TeamsTeamActivityDistributionCounts',
           'EmailActivityUserDetail',
           'EmailActivityCounts',
           'EmailActivityUserCounts',
           'EmailAppUsageUserDetail',
           'EmailAppUsageAppsUserCounts',
           'EmailAppUsageUserCounts',
           'EmailAppUsageVersionsUserCounts',
           'MailboxUsageDetail',
           'MailboxUsageMailboxCounts',
           'MailboxUsageQuotaStatusMailboxCounts',
           'MailboxUsageStorage',
           'Office365ActiveUserDetail',
           'Office365ActiveUserCounts',
           'Office365ServicesUserCounts',
           'M365AppUserDetail',
           'M365AppUserCounts',
           'M365AppPlatformUserCounts',
           'BrowserUserDetail',
           'BrowserUserCounts',
           'BrowserDistributionUserCounts',
           'Office365GroupsActivityDetail',
           'Office365GroupsActivityCounts',
           'Office365GroupsActivityGroupCounts',
           'Office365GroupsActivityStorage',
           'Office365GroupsActivityFileCounts',
           'OneDriveActivityUserDetail',
           'OneDriveActivityUserCounts',
           'OneDriveActivityFileCounts',
           'OneDriveActivityUserDetail',
           'OneDriveActivityUserCounts',
           'OneDriveActivityFileCounts',
           'OneDriveUsageAccountDetail',
           'OneDriveUsageAccountCounts',
           'OneDriveUsageFileCounts',
           'OneDriveUsageStorage',
           'SharePointActivityUserDetail',
           'SharePointActivityFileCounts',
           'SharePointActivityUserCounts',
           'SharePointActivityPages',
           'SharePointSiteUsageDetail',
           'SharePointSiteUsageFileCounts',
           'SharePointSiteUsageSiteCounts',
           'SharePointSiteUsageStorage',
           'SharePointSiteUsagePages'
        )]
        [String]$ReportArea
    )
    # Check admin report settings
    $DisplayConcealedNames = (Get-M365AdminReportSettings).displayConcealedNames 
    if ($DisplayConcealedNames -eq $true)
    {
        Write-Warning "Names are currently concealed in Admin report settings."
        $prompt = Read-Host "Would you like update report settings to show names on the report? Y/N"
        if ($prompt -eq 'Y'){
        Set-M365AdminReportSettings -ShowNames
        }
    }
    $RequiredScopes = 'Reports.Read.All'
    Set-M365MGGraphConnectionScopes -RequiredScopes $RequiredScopes
    try
    {
        $getReport = 'get' + $ReportArea
        $tempfile = New-TemporaryFile
        Invoke-MgGraphRequest -Uri "/beta/reports/$getReport(period='$Period'`)`?`$format=text/csv" -ErrorAction Stop -OutputFilePath $tempfile
        $TeamsReport = Import-csv $tempfile        
    }
    Catch
    {
        throw $_ ; break
    }
    Remove-Item $tempfile    
    $TeamsReport
    Write-Warning "Please remember to disconnect from the Microsoft Graph by using 'Disconnect-MGGraph'"
}