如何将AzureADUser的AssignedLicenses类转换为可用对象?
问题描述
使用带-UseWindowsPowershell参数导入的AzureAD模块执行Get-AzureADUser时,其AssignedLicenses属性返回的内容显示为类定义样式(如下),而非直观可操作的对象:
class AssignedLicense { DisabledPlans: System.Collections.Generic.List`1[System.String] SkuId: zzzzzzzz-2c81-4ef7-yyyy-5b5392b571df} class AssignedLicense { DisabledPlans: System.Collections.Generic.List`1[System.String] SkuId: zzzzzzz-fae0-4ca2-xxxx-7a907fd6c235 }
尝试用ConvertFrom-JSON转换报错,且PowerShell无内置ConvertFrom-Class命令;手动提取SkuId因DisabledPlans长度不固定难以实现。执行的命令如下:
$userList = Get-AzureADUser -filter "AccountEnabled eq true" foreach ($u in $userList) { $Assigned = ($u | Select-Object AssignedLicenses).AssignedLicenses }
解决方案
实际上这些返回的是**.NET类实例集合**,并非不可操作,只是默认输出格式显示为类定义,可直接通过属性访问获取数据,或转换为PowerShell原生自定义对象:
方法1:直接访问属性
无需额外转换,直接通过.操作符访问每个许可证实例的SkuId和DisabledPlans属性:
$userList = Get-AzureADUser -Filter "AccountEnabled eq true" foreach ($u in $userList) { foreach ($license in $u.AssignedLicenses) { # 直接获取SkuId Write-Host "许可证SKU ID:$($license.SkuId)" # 获取禁用的计划列表,可按需处理(比如转为逗号分隔字符串) Write-Host "禁用的服务计划:$($license.DisabledPlans -join ', ')`n" } }
方法2:转换为PowerShell自定义对象
如果需要更符合PowerShell习惯的对象格式,可将每个许可证实例包装为PSCustomObject:
$userList = Get-AzureADUser -Filter "AccountEnabled eq true" foreach ($u in $userList) { $processedLicenses = $u.AssignedLicenses | ForEach-Object { [PSCustomObject]@{ UserPrincipalName = $u.UserPrincipalName SkuId = $_.SkuId DisabledPlans = $_.DisabledPlans # 保留List类型,或用-join转为字符串 } } # 输出处理后的对象,可直接用于后续筛选、导出等操作 $processedLicenses | Format-Table -AutoSize }
内容的提问来源于stack exchange,提问作者Fimlore
相关产品推荐
相关产品推荐

