Microsoft引入了一个强大的cmdlet,称为Invoke-AzCostManagementQuery
,它是Az.CostManagement
模块的一部分,这使得生成所有可能维度的自定义成本报告成为可能。
参数(实际上)非常简单:
1. The scope to be surveyed
2. the desired time period
3. the aggregation of the costs
4. the granularity
5. if necessary, grouping according to specifications
不幸的是,documentation太差了,甚至微软的支持团队在发出正确的命令时也有问题。
到目前为止,我能够成功地创建以下查询:
首先,我设置所需的范围:
$scope = "/subscriptions/xxxxxx"
其次,我定义了成本的合计:
$aggregation = @{
totalCost = @{
name = "Cost"
function = "SUM"
}
}
第三,我运行以下命令:
Invoke-AzCostManagementQuery `
-Scope $scope `
-Timeframe 'DateToMonth' `
-Type 'Usage' `
-DatasetGranularity "Daily" `
-DatasetAggregation $aggregation
我收到定义范围内的每日成本:
Column Row
------ ---
{Cost, UsageDate, Currency} {922,7007638124661 20230301 EUR, 944,695760723976 20230302 EUR, 870,8345694362154 20230303 EUR, 731,7461005886661 20230304 EUR…}
添加分组筛选器时:
$grouping = @{
name = "azcosts"
type = "TagKey"
}
我在调试日志中收到了所需的输出,但查询以错误Invoke-AzCostManagementQuery: You cannot call a method on a null-valued expression.
结束
1条答案
按热度按时间ia2d9nvy1#
要按已在资源上定义的单个标记对其进行分组,您可以执行以下操作:
在我的资源中,它有一个名为owner的标签
在我的例子中,它返回如下内容:
我确实没有一个简单的方法来解释我是如何发现的,但可以尝试一下。
如果您转到azure门户,然后转到成本管理,并在准备好继续查询后配置查询,请按F12并转到“网络”。
在那里,你会发现从你的电脑到网站的所有通信和它运行的查询。
它应该看起来像这样:
按下它并转到Payload,在这里您可以看到浏览器如何为您的结果构建有效负载,如下所示:
在本例中,我看到的是名为“costcenter”的标记
如果你想要更多的话,你可以把分组放在一个数组里,然后你想加多少就加多少