The script updates the specified drop-down list parameter with display names and SKU Part Numbers of Microsoft 365 licenses in all the registered tenants. To execute the script, create a scheduled task configured for the Domain object type with a managed domain in the Activity Scope.
Parameters:
- $reportDN - Specifies the distinguished name (DN) of the report whose parameter will be updated. For information on how to get an object DN, see Get the DN of a directory object.
- $parameterName - Specifies the name of the report parameter to update. The name should include the param- prefix.
PowerShell
$reportDN = "CN=My Report,CN=Reports,CN=Reports Root,CN=Configuration Objects,CN=Adaxes Configuration,CN=Adaxes" # TODO: modfy me
$parameterName = "License" # TODO: modfy me
# Find all Microsoft 365 Tenants
$configurationContainerPath = $Context.GetWellKnownContainerPath("CloudServicesO365")
$tenantSearcher = $Context.BindToObject($configurationContainerPath)
$tenantSearcher.SearchFilter = "(objectClass=adm-O365Tenant)"
$tenantSearcher.SearchScope = "ADS_SCOPE_SUBTREE"
try
{
    $tenantSearchResultIterator = $tenantSearcher.ExecuteSearch()
    $tenants = $tenantSearchResultIterator.FetchAll()
    
    $licenseNameToSkuPartNumber = @{}
    foreach ($tenantID in $tenants)
    {
        # Bind to the Tenant
        $tenant = $Context.BindToObject($tenantID.AdsPath)
        
        foreach ($sku in $tenant.Skus)
        {
            if (!$sku.Enabled)
            {
                continue
            }
            
            # Get license plan display name
            if (-not([System.String]::IsNullOrEmpty($sku.CustomDisplayName)))
            {
                $skuDisplayName = $sku.CustomDisplayName
            }
            else
            {
                $skuDisplayName = $sku.DefaultDisplayName
            }
            
            if ($licenseNameToSkuPartNumber.Contains($skuDisplayName))
            {
                continue
            }
            
            $licenseNameToSkuPartNumber.Add($skuDisplayName, $sku.SkuPartNumber)
        }
    }
}
finally
{
    if ($tenantSearchResultIterator){ $tenantSearchResultIterator.Dispose() }
}
# Get report parameters
$report = $Context.BindToObjectByDN($reportDN)
$configuration = $report.GetConfiguration()
$parameters = $configuration.Parameters
# Update the parameter values
foreach ($parameter in $parameters)
{
    if ($parameter.Name -ne $parameterName)
    {
        continue
    }
    
    $parameterValues = @()
    foreach ($lcienseName in $licenseNameToSkuPartNumber.Keys)
    {        
        $parameterValue = $parameter.CreateValue()
        $parameterValue.DisplayName = $lcienseName
        $parameterValue.Value = $licenseNameToSkuPartNumber[$lcienseName]
        $parameterValues += $parameterValue
    }
    $parameter.Values = $parameterValues
}
# Save changes
$configuration.Parameters = $parameters
$report.SetConfiguration($configuration)