Script repository

Update report drop-down parameter with Microsoft 365 licenses

Updated on: Jan 18, 2026, Views: 2024

Reports, Microsoft 365

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 and add a managed domain to the Activity Scope of the task. The domain will only be used to trigger execution of the scheduled task.

Parameters

  • $reportDN - 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 - the name of the report parameter to update. The name should include the param- prefix.
$reportDN = "CN=My Report,CN=Reports,CN=Reports Root,CN=Configuration Objects,CN=Adaxes Configuration,CN=Adaxes" # TODO: modfy me
$parameterName = "param-Licenses" # TODO: modfy me

# Find all Microsoft 365 tenants.
$configurationContainerPath = $Context.GetWellKnownContainerPath("CloudServicesO365")
$tenantSearcher = $Context.BindToObject($configurationContainerPath)
$tenantSearcher.Criteria = New-AdmCriteria "adm-O365Tenant"
$tenantSearcher.SearchScope = "ADS_SCOPE_SUBTREE"
$tenantSearcher.ReferralChasing = "ADS_CHASE_REFERRALS_NEVER"

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)

Comments 0

You must be signed in to comment.

    Got questions?

    Support Questions & Answers

    We use cookies to improve your experience.
    By your continued use of this site you accept such use.
    For more details please see our privacy policy and cookies policy.