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

如何高效获取Azure各资源上月月度消费总额?

高效获取Azure资源月度聚合消费成本的方案

方法1:让Azure服务端直接聚合(最优)

使用Get-AzConsumptionUsageDetail的-GroupBy参数,指定按资源维度分组,让Azure在服务端完成聚合,直接返回每个资源的月度总成本,大幅减少返回的数据量和本地处理时间:

# 获取上月的计费周期格式(yyyyMM)
$lastMonth = Get-Date (Get-Date).AddMonths(-1) -Format "yyyyMM"

# 按ResourceId和ResourceName分组,聚合月度总成本
$aggregatedCosts = Get-AzConsumptionUsageDetail -BillingPeriod $lastMonth `
    -GroupBy "ResourceId", "ResourceName" `
    -Aggregation @{ Name = "PreTaxCost"; Function = "Sum" }

这个命令会直接返回每个资源的汇总成本,不需要本地处理10万条原始记录,运行时间会大幅缩短,也避免了遍历Get-AzResource的开销。

方法2:本地快速聚合原始数据(如果服务端聚合不适用)

如果因为权限或其他原因无法使用服务端聚合,可以先获取原始数据,然后用PowerShell的Group-Object结合计算属性快速本地聚合,比遍历Get-AzResource高效得多:

$lastMonth = Get-Date (Get-Date).AddMonths(-1) -Format "yyyyMM"
$data = Get-AzConsumptionUsageDetail -BillingPeriod $lastMonth

# 按ResourceId分组,计算每个资源的总成本
$resourceCosts = $data | Group-Object -Property ResourceId | ForEach-Object {
    [PSCustomObject]@{
        ResourceId   = $_.Name
        ResourceName = $_.Group[0].ResourceName
        TotalCost    = ($_.Group | Measure-Object -Property PreTaxCost -Sum).Sum
    }
}

这种方法不需要额外调用Get-AzResource,直接从原始账单数据中提取资源名称和计算成本,200个资源的处理时间会降到几秒内。

额外优化建议

  • 避免单独调用Get-AzResource遍历匹配:原始账单数据已经包含ResourceId和ResourceName,完全不需要再调用资源查询API,既节省时间又避免触发Azure API调用阈值。
  • 按需筛选数据:如果只需要特定资源类型/区域的成本,可以在Get-AzConsumptionUsageDetail中添加-Filter参数提前过滤,进一步减少返回数据量,例如:
    # 只筛选华东地区的虚拟机成本
    $data = Get-AzConsumptionUsageDetail -BillingPeriod $lastMonth -Filter "Location eq 'eastasia' and ResourceType eq 'Microsoft.Compute/virtualMachines'"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:33:16