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

PowerShell调用Usage Details API导出CSV数据出现截断问题如何解决

解决Invoke-RestMethod调用Azure Usage Details API导出CSV数据缺失问题

根因分析

  • 分页未拉取完整:Azure Usage Details API单次返回数据上限为1000条,超出部分需通过返回体中的nextLink字段循环拉取。Postman、Thunder Client默认开启自动跟进分页链接的配置,因此能拿到全量数据,而PowerShell的Invoke-RestMethod无自动分页处理逻辑,仅能拿到第一页数据。
  • 嵌套结构未扁平化:接口返回的核心业务字段全部嵌套在properties属性下,直接将原始响应对象导出CSV时,PowerShell仅会保留第一层顶层属性,嵌套内容会被识别为自定义对象无法正常写入CSV,表现为对应字段数据丢失。
  • 列结构不统一:若多页返回的对象属性存在差异,Export-Csv默认以第一页首个对象的属性作为CSV列列表,后续对象的独有属性会被直接忽略,导致对应字段数据丢失。

解决方案代码

直接使用以下标准化请求流程即可解决问题,按需替换占位符参数即可:

# 替换为实际鉴权令牌、订阅ID
$token = "<你的Azure访问令牌>"
$subscriptionId = "<你的订阅ID>"
$apiVersion = "2023-05-01"
$exportPath = "C:\temp\usage_details.csv"

$headers = @{
    Authorization = "Bearer $token"
}
$requestUri = "https://management.azure.com/subscriptions/$subscriptionId/providers/Microsoft.Consumption/usageDetails?api-version=$apiVersion"

# 全量数据存储数组
$allData = @()
$currentUri = $requestUri

# 循环拉取所有分页
do {
    $response = Invoke-RestMethod -Uri $currentUri -Headers $headers -Method Get -ContentType "application/json"
    $allData += $response.value
    $currentUri = $response.nextLink
} while ($null -ne $currentUri)

# 扁平化嵌套属性
$exportData = $allData | ForEach-Object {
    $output = [PSCustomObject]@{}
    # 写入顶层属性
    $_.PSObject.Properties | Where-Object { $_.Name -ne "properties" } | ForEach-Object {
        $output | Add-Member -NotePropertyName $_.Name -NotePropertyValue $_.Value -Force
    }
    # 写入嵌套的properties属性
    $_.properties.PSObject.Properties | ForEach-Object {
        $output | Add-Member -NotePropertyName $_.Name -NotePropertyValue $_.Value -Force
    }
    $output
}

# 导出CSV,指定UTF8编码适配多语言场景
$exportData | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation -Force

额外优化建议

  • 若拉取3个月以上的历史数据,建议通过请求参数的$filter参数按日/周拆分请求,避免单次请求超时或内存占用过高
  • 如需获取计费项、附加信息等扩展字段,可在请求Uri中追加&$expand=properties/meterDetails,properties/additionalInfo拉取展开后的可读内容
  • 如果导出的CSV用Excel打开出现乱码,可将-Encoding UTF8替换为-Encoding UTF8BOM适配Excel的编码识别逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:03