azure - Powershell 获取所有 Azure 资源的每月消耗量

标签 azure powershell

我正在尝试获取 Azure 中每种资源上个月的成本。我知道 cmdlet Get-AzConsumUsageDetail 并且我能够使用以下命令获取所需的信息,该信息获取最后一个完整计费周期的费用:

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

该命令运行大约需要 4 分钟,并且利用我们数千个资源返回超过 100,000 条记录。鉴于我们拥有大量资源,我意识到对每个资源甚至每个资源组进行单独的调用是不可行的。使用 Get-AzConsumUsageDetail 循环访问每个资源组超出了 Azure 允许的调用阈值。

最终目标是计算每个单独资源的每月总成本。由于我无法对每个资源进行单独的调用,因此我决定使用上面显示的命令来一次获取所有内容。但是,如果我将 $Resource 定义为

$Resources = Get-AzResource

并运行以下命令,由于 $data 的大小,$Resources 中所有资源的小样本花费了 57 秒:

measure-command {
    $Resources | select-object -first 200 | foreach-object -parallel {
        $test = $using:data | where-object InstanceName -eq $psitem.Name
    }
}

我的问题是:有没有办法在数据已显示每月总计的情况下获取此定价/消费信息?这将大大减少 $data 中的记录总数,并大大加快速度。至少,有什么方法可以更有效地获取信息吗?

最佳答案

PowerShell get monthly consumption for all Azure resources: -

Get-AzConsumUsageDetail 通常在 PowerShell 中用于收集 Azure 资源的成本使用详细信息。但是,如果您有大量数据/资源,则应该使用其他 Cost details solutions如给定的 MSDoc 中详细说明。正如 @mclayton 提到的,消费使用信息 API 已被弃用,将不再存在。对于庞大的数据集,您可以使用 Power BI成本导出。您可以轻松使用 Portal downloadPowerShell 命令来获取较少种类的数据。

我的 Azure 环境中有一些资源,但不多。我尝试使用下面的循环提取每个单独的成本信息,并成功了。

$cost=Get-AzConsumptionUsageDetail -StartDate 2023-08-07 -EndDate 2023-08-08 -Top 10 -IncludeMeterDetails
$cost | Group-Object -Property InstanceName | ForEach-Object {
   $totalCost = ($_.Group | Measure-Object -Property PretaxCost -Sum).Sum
   Write-Output "$($_.Name) - Total monthly cost: $totalCost"
}

enter image description here

您也可以引用 Cost API requests 数据量较少的样本。

关于azure - Powershell 获取所有 Azure 资源的每月消耗量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76854888/

相关文章:

excel - 如何使用 Powershell 强制格式化 Excel 列?

sql-server-2008 - 在本地模拟/模拟 SQL Azure?

c# - 当项目“"Could not load file or assembly ' Microsoft.Extensions.Logging.Abstractions”时我还能做什么,除了手动清空bin和obj

c# - Entity Framework Core 和 Cosmos DB。使用 LINQ 表达式读取实体

PowerShell 列的多个自定义 header

amazon-web-services - 如何在用户数据中重新启动后运行多个 PowerShell 命令?

azure - 从 Microsoft 托管构建代理连接到 Azure 订阅

Azure Web 作业监控和警报

powershell - 在 Azure 自动化中编译包含 Get-NetAdapter 的 DSC 配置

powershell - 为什么 SmtpClient 不会在我的 powershell 脚本中进行身份验证?