编写PowerShell脚本获取Azure资源成本(含VM及AKS)
PowerShell脚本获取Azure资源成本(重点VM与AKS)
前置准备
- 安装Azure PowerShell模块:
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force - 登录Azure账户:
Connect-AzAccount
核心脚本
以下脚本会查询过去30天内VM和AKS资源的累计成本,并格式化输出:
# 定义查询时间范围(过去30天) $startDate = (Get-Date).AddDays(-30).ToString("yyyy-MM-dd") $endDate = (Get-Date).ToString("yyyy-MM-dd") # 获取当前订阅ID(如需指定其他订阅,直接替换为目标订阅ID即可) $subscriptionId = (Get-AzContext).Subscription.Id # 查询Cost Management数据,过滤VM和AKS资源 $costQueryResult = Get-AzCostManagementQuery -Scope "/subscriptions/$subscriptionId" ` -TimePeriod @{Start = $startDate; End = $endDate} ` -Dataset @{ Aggregation = @{TotalCost = @{Name = 'PreTaxCost'; Function = 'Sum'}} Grouping = @( @{Type = 'Dimension'; Name = 'ResourceType'}, @{Type = 'Dimension'; Name = 'ResourceName'} ) Filter = @{ Or = @( @{Dimension = @{Name = 'ResourceType'; Operator = 'In'; Values = @('Microsoft.Compute/virtualMachines', 'Microsoft.ContainerService/managedClusters')}} ) } } # 格式化输出为易读表格 $costQueryResult.Properties.Rows | ForEach-Object { [PSCustomObject]@{ 资源类型 = $_[0] 资源名称 = $_[1] 累计成本 = "$([math]::Round($_[2], 2)) USD" } } | Format-Table -AutoSize
脚本说明
- 时间范围调整:修改
AddDays(-30)可以自定义查询的时间段,比如改为AddDays(-7)查询过去7天的成本 - 资源过滤:脚本中通过
ResourceType过滤了VM(Microsoft.Compute/virtualMachines)和AKS(Microsoft.ContainerService/managedClusters),如需添加其他资源类型,直接在Values数组中补充即可 - 成本精度:使用
[math]::Round($_[2], 2)将成本保留两位小数,提升可读性 - 导出到CSV:如果需要保存结果,在脚本最后添加
| Export-Csv -Path "Azure_VM_AKS_Cost.csv" -NoTypeInformation -Encoding UTF8即可生成CSV报告
注意事项
- Azure成本数据存在一定延迟,建议查询至少24小时前的时间段,确保数据完整
- 如果有多订阅需求,可循环遍历订阅ID,逐个执行查询逻辑
- 执行脚本需要拥有对应订阅的Cost Management Reader或更高权限
内容的提问来源于stack exchange,提问作者vishnu
相关产品推荐
相关产品推荐

