public/maester/entra/Test-MtCaLicenseUtilization.ps1
| 
                                <# .SYNOPSIS Test Conditional Access License Utilization and return stats on usage for the specific license. .DESCRIPTION Utilization is validated using the insights provided by Microsoft Graph. Learn more: https://techcommunity.microsoft.com/t5/microsoft-entra-blog/introducing-microsoft-entra-license-utilization-insights/ba-p/3796393 .EXAMPLE Test-MtCaLicenseUtilization -License P1 This example tests the utilization of P1 licenses in the tenant. Test-MtCaLicenseUtilization -License P2 This example tests the utilization of P2 licenses in the tenant. .LINK https://maester.dev/docs/commands/Test-MtCaLicenseUtilization #> function Test-MtCaLicenseUtilization { [CmdletBinding()] param ( # The type of license to check. Currently supports 'P1' and 'P2' [Parameter(Mandatory = $true)] [ValidateSet('P1', 'P2')] [string]$License ) if (( Get-MtLicenseInformation EntraID ) -eq 'Free') { if ($License -eq 'P1') { Add-MtTestResultDetail -SkippedBecause NotLicensedEntraIDP1 } elseif ($License -eq 'P2') { Add-MtTestResultDetail -SkippedBecause NotLicensedEntraIDP2 } return $null } try { # Get the total number of users in the tenant $TotalUserCount = Get-MtTotalEntraIdUserCount # Get insights about the premium license utilization $EIDPremiumLicenseInsight = Invoke-MtGraphRequest -RelativeUri 'reports/azureADPremiumLicenseInsight' -ApiVersion beta # Calculate the total number of users with P1 and P2 licenses $entitledP1LicenseCount = $EIDPremiumLicenseInsight.entitledP1LicenseCount + $EIDPremiumLicenseInsight.entitledP2LicenseCount $entitledP2LicenseCount = $EIDPremiumLicenseInsight.entitledP2LicenseCount $P1FeatureUtilizations = $EIDPremiumLicenseInsight.p1FeatureUtilizations.conditionalAccess.userCount + $EIDPremiumLicenseInsight.p1FeatureUtilizations.conditionalAccessGuestUsers.userCount $P2FeatureUtilizations = $EIDPremiumLicenseInsight.p2FeatureUtilizations.riskBasedConditionalAccess.userCount + $EIDPremiumLicenseInsight.p2FeatureUtilizations.riskBasedConditionalAccessGuestUsers.userCount Write-Verbose -Message "Total user count: $TotalUserCount & Entitled P1 license count: $entitledP1LicenseCount & Entitled P2 license count: $entitledP2LicenseCount" if ($License -eq 'P1') { # Calculate the maximum number of users that can be covered by the P1 license $MaxP1UserCount = $entitledP1LicenseCount if ($entitledP1LicenseCount -ge $TotalUserCount) { $MaxP1UserCount = $TotalUserCount } $Result = [PSCustomObject]@{ EntitledLicenseCount = $MaxP1UserCount TotalLicensesUtilized = $P1FeatureUtilizations } } elseif ($License -eq 'P2') { # Calculate the maximum number of users that can be covered by the P2 license $MaxP2UserCount = $entitledP2LicenseCount if ($entitledP2LicenseCount -ge $TotalUserCount) { $MaxP2UserCount = $TotalUserCount } $Result = [PSCustomObject]@{ EntitledLicenseCount = $MaxP2UserCount TotalLicensesUtilized = $P2FeatureUtilizations } } $testDescription = "This test checks the utilization of Entra ID $License licenses in the tenant." $testResult = "Total users entitled for Entra ID $($License): **$($Result.EntitledLicenseCount)**`n`nTotal $License licenses utilized: **$($Result.TotalLicensesUtilized)**" Add-MtTestResultDetail -Description $testDescription -Result $testResult return $Result } catch { Add-MtTestResultDetail -SkippedBecause Error -SkippedError $_ return $null } }  |