使用Get-AzConsumptionUsageDetail遇BadRequest,调用Rest API仍失败求助
问题解决:Azure消费报告脚本报错修复
错误原因分析
你遇到的两个核心问题:
- API版本不兼容:错误提示明确说明
2023-03-01-preview版本不支持UsageDetails资源类型,官方支持的有效正式版本为2023-03-01。 - 输出目录缺失:
C:\Reports文件夹未提前创建,导致Export-Csv无法写入文件。
修正后的脚本
Connect-AzAccount $subList = Get-AzSubscription $startDate = "2022-04-01" $endDate = "2022-04-30" $outputDir = "C:\Reports" # 检查并自动创建输出目录 if (-not (Test-Path -Path $outputDir)) { New-Item -ItemType Directory -Path $outputDir | Out-Null } foreach($sub in $subList) { # 使用官方支持的正式API版本 $url = "https://management.azure.com/subscriptions/$($sub.Id)/providers/Microsoft.Consumption/usageDetails?api-version=2023-03-01&`$filter=properties/UsageStart ge '$startDate' and properties/UsageEnd le '$endDate'" $accessToken = (Get-AzAccessToken -ResourceUrl https://management.azure.com).Token $headers = @{ Authorization = "Bearer $accessToken" } try { $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers # 提取API返回的实际消费明细数据(value字段) $response.value | Export-Csv -Path "$outputDir\$($sub.Name).csv" -NoTypeInformation -Encoding UTF8 Write-Host "订阅[$($sub.Name)]的消费报告已成功导出" } catch { Write-Error "处理订阅[$($sub.Name)]时失败: $_" } }
关键修改说明
- API版本调整:将
api-version从预览版改为正式版2023-03-01,匹配Azure Consumption服务的支持范围。 - 目录预创建:新增目录检查逻辑,自动生成缺失的输出文件夹,避免写入失败。
- 数据提取优化:Azure Consumption API返回的响应包含
value字段(实际的消费明细数组),直接导出该字段可获得正确的结构化数据。 - 错误捕获:添加
try-catch块,方便定位单个订阅的处理异常,避免脚本整体中断。
内容的提问来源于stack exchange,提问作者Mantra Reborn
相关产品推荐
相关产品推荐

