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

Azure中按公司名称生成SKU统计表的PowerShell脚本故障排查

故障原因

批量执行失败的核心问题只有一处:

  • 你在定义去重公司列表变量$Company时,管道末尾加了Format-Table命令。这个命令会将原始的PowerShell对象转换为用于控制台显示的格式化输出对象,不再保留原始的Companyname属性值,后续循环里$F.Companyname实际取到的是空值,自然无法筛选出对应数据。

另外还有两个不影响运行但会干扰输出的小问题:

  • 未过滤Companyname为空的用户条目,循环时会额外生成一块无公司名的无效统计
  • -like匹配未使用通配符,实际效果和等值匹配一致,没有发挥模糊匹配的作用
修正后可直接运行的脚本
cls
$Report = [System.Collections.Generic.List[Object]]::new()
$Skus = Get-AzureADSubscribedSku | Select Sku*, ConsumedUnits 
ForEach ($Sku in $Skus) {
    Write-Host "Processing license holders for" $Sku.SkuPartNumber
    $SkuUsers = Get-AzureADUser -All $True | ? { $_.AssignedLicenses -Match $Sku.SkuId }
    ForEach ($User in $SkuUsers) {
        $ReportLine = [PSCustomObject] @{
            User        = $User.DisplayName 
            UPN         = $User.UserPrincipalName
            Companyname = $User.Companyname
            Country     = $User.Country
            SKU         = $Sku.SkuId
            SKUName     = $Sku.SkuPartNumber
        }
        $Report.Add($ReportLine) 
    }
}

# 采集去重公司名,移除空值,不要提前做格式化输出
$Company = $Report | Where-Object Companyname -ne $null | Select-Object Companyname -Unique

# 逐公司生成SKU统计表格
Foreach ($F in $Company) {
    Write-Host "----------------------------------------------------" 
    Write-Host "SKU's for $($F.Companyname)" 
    $Report | Where-Object Companyname -eq $F.Companyname | Group-Object -Property SKU | Select-Object Count, Name, @{Name = 'SKUName' ; expression = { ($_.Group.SKUName) -join ', ' } } | Format-Table
}
补充说明
  • 修正后循环内的统计逻辑和你单独测试单公司的逻辑完全一致,输出的表格格式、字段和你单条执行的预期结果没有区别
  • 如果确实需要模糊匹配公司名,把Where-Object里的-eq换回-like,同时给匹配值加通配符即可,比如-like "*$($F.Companyname)*"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:21:34