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

PowerShell脚本SKUName列重复问题:实现每行仅显示一次

解决PowerShell统计M365租户SKU许可证时SKUName重复显示的问题

你的PowerShell脚本在统计Microsoft 365租户内各公司的SKU许可证分配情况时,出现了SKUName列随Count数值重复显示相同许可证名称的问题(比如Count为4时,重复4次"Power Bi Pro"),核心原因是脚本未对相同公司+SKU的记录做分组聚合,而是直接遍历每条授权记录输出,导致重复显示。以下是针对性的修改方案:

常见错误脚本示例

如果你的原脚本类似下面的写法,就会出现重复问题:

# 错误示例:直接遍历每条用户授权记录,未做分组
$users = Get-MsolUser -All | Where-Object {$_.IsLicensed -eq $true}
foreach ($user in $users) {
    foreach ($license in $user.Licenses) {
        [PSCustomObject]@{
            CompanyName = $user.CompanyName
            SKUName     = $license.AccountSkuId.Split(':')[1]
            Count       = 1
        }
    }
} | Sort-Object CompanyName, SKUName

修改后的正确脚本

使用Msol模块的版本

# 分组聚合统计各公司SKU分配数量
$users = Get-MsolUser -All | Where-Object {$_.IsLicensed -eq $true}

# 先收集所有用户的公司与SKU关联记录
$licenseRecords = $users | ForEach-Object {
    $currentCompany = $_.CompanyName
    $_.Licenses | ForEach-Object {
        [PSCustomObject]@{
            CompanyName = $currentCompany
            SKUName     = $_.AccountSkuId.Split(':')[1]
        }
    }
}

# 按公司+SKU分组,统计数量并输出
$licenseRecords | Group-Object CompanyName, SKUName | ForEach-Object {
    [PSCustomObject]@{
        CompanyName = $_.Group[0]
        SKUName     = $_.Group[1]
        Count       = $_.Count
    }
} | Sort-Object CompanyName, SKUName

使用AzureAD模块的版本

如果你的环境使用AzureAD模块而非Msol模块,可使用以下脚本:

# AzureAD模块下的分组统计
$users = Get-AzureADUser -All $true | Where-Object {$_.AssignedLicenses -ne $null}

$licenseRecords = $users | ForEach-Object {
    $currentCompany = $_.CompanyName
    $_.AssignedLicenses | ForEach-Object {
        $skuInfo = Get-AzureADSubscribedSku -ObjectId $_.SkuId
        [PSCustomObject]@{
            CompanyName = $currentCompany
            SKUName     = $skuInfo.SkuPartNumber
        }
    }
}

$licenseRecords | Group-Object CompanyName, SKUName | ForEach-Object {
    [PSCustomObject]@{
        CompanyName = $_.Group[0]
        SKUName     = $_.Group[1]
        Count       = $_.Count
    }
} | Sort-Object CompanyName, SKUName

关键修改逻辑

  1. 收集基础记录:先提取所有已授权用户的公司名称和对应SKU信息,生成用户-许可证的关联记录
  2. 分组聚合:用Group-Object CompanyName, SKUName将相同公司下的同一SKU记录合并
  3. 生成统计结果:遍历分组后的结果,提取公司名、SKU名,用$_.Count获取该SKU的总分配数量
  4. 排序输出:最后按公司和SKU排序,保证结果整洁

期望输出示例

CompanyName SKUName       Count
----------- -------       -----
Contoso     Power Bi Pro      4
Contoso     Office 365 E3    12
Fabrikam    Power Bi Free     8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:53