Private/Get-ArgusSkuCategory.ps1
|
function Get-ArgusSkuCategory { <# .SYNOPSIS Classifies the tenant's SKUs as Paid, Trial or Free, keyed by lowercase skuId. .DESCRIPTION Free: skuPartNumber in the ignored list (free, viral and developer offers) or a SKU with FreeSeatThreshold or more enabled seats (free offers are provisioned with very large quantities). Trial: every subscription of the SKU in /directory/subscriptions has isTrial = true. Everything else is Paid, including SKUs without subscription information. #> [CmdletBinding()] [OutputType([hashtable])] param( [Parameter(Mandatory)] [AllowEmptyCollection()] [object[]] $SubscribedSku, [Parameter()] [AllowEmptyCollection()] [object[]] $Subscription = @(), [Parameter()] [AllowEmptyCollection()] [string[]] $IgnoredSku = @(), [Parameter()] [int] $FreeSeatThreshold = 10000 ) $trialFlags = @{} foreach ($item in @($Subscription | Where-Object { $_ })) { $id = ([string](Get-ArgusProperty $item 'skuId' '')).ToLowerInvariant() if (-not $id -or (Get-ArgusProperty $item 'status' '') -eq 'Deleted') { continue } if (-not $trialFlags.ContainsKey($id)) { $trialFlags[$id] = [System.Collections.Generic.List[bool]]::new() } $trialFlags[$id].Add([bool](Get-ArgusProperty $item 'isTrial' $false)) } $categories = @{} foreach ($sku in @($SubscribedSku | Where-Object { $_ })) { $id = ([string](Get-ArgusProperty $sku 'skuId' '')).ToLowerInvariant() if (-not $id) { continue } $part = [string](Get-ArgusProperty $sku 'skuPartNumber' '') $enabled = [int](Get-ArgusProperty $sku 'prepaidUnits.enabled' 0) $categories[$id] = if ($part -in $IgnoredSku -or $enabled -ge $FreeSeatThreshold) { 'Free' } elseif ($trialFlags.ContainsKey($id) -and $trialFlags[$id].Count -gt 0 -and $trialFlags[$id] -notcontains $false) { 'Trial' } else { 'Paid' } } $categories } |