Private/Get-SDLicenseAssignment.ps1
|
function Get-SDLicenseAssignment { <# .SYNOPSIS Splits a user's licenses into directly assigned and group-assigned SKU IDs. .DESCRIPTION Only direct assignments can be removed with Set-MgUserLicense. Group-based licenses disappear when the user leaves the licensing group. If licenseAssignmentStates is empty, all assignedLicenses are treated as direct. #> [CmdletBinding()] [OutputType([pscustomobject])] param( [AllowNull()][object[]]$LicenseAssignmentStates, [AllowNull()][object[]]$AssignedLicenses ) $states = @($LicenseAssignmentStates | Where-Object { $null -ne $_ }) if ($states.Count -gt 0) { $direct = @($states | Where-Object { -not (Get-SDPropertyValue -InputObject $_ -Name 'AssignedByGroup') } | ForEach-Object { [string]$_.SkuId } | Select-Object -Unique) $inherited = @($states | Where-Object { Get-SDPropertyValue -InputObject $_ -Name 'AssignedByGroup' } | ForEach-Object { [string]$_.SkuId } | Where-Object { $direct -notcontains $_ } | Select-Object -Unique) } else { $direct = @($AssignedLicenses | Where-Object { $null -ne $_ } | ForEach-Object { [string]$_.SkuId } | Select-Object -Unique) $inherited = @() } [pscustomobject]@{ Direct = $direct Inherited = $inherited } } |