You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell:使用PSCustomObject处理MsolUser属性遇许可证数据缺失问题

问题修正与优化方案

错误原因

你脚本里的LicenseSKU字段语法错误,$msUser.{$_.licenses.accountskuid}这种写法不符合PowerShell对象属性访问规则,导致无法正确提取许可证SKU。另外,Licenses是一个集合(用户可能有多个许可证),需要处理多值场景。

修正后的基础脚本

Import-CSV -Path "C:\Temp\users.csv" | ForEach-Object {
    $msUser = Get-MsolUser -UserPrincipalName $_.UserPrincipalName
    [PSCustomObject]@{
        UserPrincipalName = $msUser.UserPrincipalName
        DisplayName       = $msUser.FullName
        IsLicensed        = $msUser.IsLicensed
        LicenseSKU        = $msUser.Licenses.AccountSkuId -join ', '
    }
} | Export-CSV -Path "C:\temp\output.csv" -Append -NoTypeInformation

关键修正点

  • 把错误的$msUser.{$_.licenses.accountskuid}改为$msUser.Licenses.AccountSkuId,直接访问用户对象的许可证集合属性
  • 用-join ', '将多个许可证SKU合并为字符串,避免CSV导出时显示为数组类型

更简便的实现方法

可以省略中间变量,直接通过管道串联操作,同时利用Select-Object自定义输出属性,代码更简洁:

Import-CSV -Path "C:\Temp\users.csv" | 
    ForEach-Object { Get-MsolUser -UserPrincipalName $_.UserPrincipalName } |
    Select-Object UserPrincipalName,
                  @{Name='DisplayName'; Expression={$_.FullName}},
                  IsLicensed,
                  @{Name='LicenseSKU'; Expression={$_.Licenses.AccountSkuId -join ', '}} |
    Export-CSV -Path "C:\temp\output.csv" -NoTypeInformation

优势

  • 减少变量声明,代码更紧凑
  • 利用Select-Object的计算属性直接构造输出列,逻辑更清晰
  • 去掉-Append(如果不需要追加到现有文件),默认覆盖输出文件,避免重复数据

内容的提问来源于stack exchange,提问作者mannyfresh86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:15:31