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

PowerShell循环调用参数化REST API加载历史数据异常问题

解决PowerShell循环调用REST API批量获取历史数据的问题

原代码的问题分析

代码示例1的错误

  • 错误使用脚本块{}直接管道ConvertTo-Json,脚本块未执行,仅将脚本块本身转为JSON,无法获取数据
  • 循环条件错误:用未定义的$i作为判断条件,实际应使用循环变量$year
  • URL拼接错误:硬编码Year/未替换为变量,且字符串连接方式不符合PowerShell语法
  • 参数变量大小写不匹配:定义的是$Parameters,调用时用了@params(PowerShell变量区分大小写)
  • GET请求携带Body:多数REST API的GET接口不支持Body参数,可能导致请求失败

代码示例2的错误

  • URL硬编码Year/未替换为目标年份变量
  • 参数变量大小写不匹配:同样将$Parameters写成@params
  • 年份范围未按需求设置:未从2010年开始,也未自动获取当前年份
  • 未处理API调用可能的异常(如网络超时、接口报错)

修正后的完整代码

# 初始化请求头
$Header = @{
    "authorization" = "Bearer $token"
}

# 定义API请求参数(GET请求移除Body,避免接口报错)
$Parameters = @{
    Method      = "GET"
    Headers     = $Header
    ContentType = "application/json"
    # GET请求一般不需要Body,若API特殊要求请保留并验证格式
    # Body        = $BodyJson
}

# 设置年份范围:2010年至当前年份
$startYear = 2010
$endYear = (Get-Date).Year

# 初始化空数组存储所有数据
$Data = @()

# 循环调用API,按年份获取数据并追加到$Data
foreach ($year in $startYear..$endYear) {
    # 正确拼接URL:用PowerShell双引号插值替换年份变量
    $url = "https://api.mysite.com/v1/data/year/$year"
    
    try {
        # 调用API,使用正确的参数变量名$Parameters
        $yearData = Invoke-RestMethod -Uri $url @Parameters -DisableKeepAlive -ErrorAction Stop
        # 将当前年份的数据追加到总数据数组
        $Data += $yearData
        Write-Host "成功获取$year年数据"
    }
    catch {
        # 捕获异常并输出错误信息,避免循环中断
        Write-Error "获取$year年数据失败:$_"
    }
}

# 若需要将总数据转为JSON格式
$jsonData = $Data | ConvertTo-Json -Depth 10
# 可选:保存到文件
# $jsonData | Out-File -Path "历史数据.json" -Encoding UTF8

关键修正点说明

  • 年份范围自动适配:用(Get-Date).Year动态获取当前年份,无需手动修改endYear
  • URL正确拼接:使用PowerShell双引号插值$year,避免硬编码和错误的字符串连接
  • 参数变量一致性:统一使用$Parameters,确保变量大小写匹配
  • 异常处理:加入try/catch块捕获请求异常,避免单个年份请求失败导致整个循环终止
  • 数据追加逻辑:初始化空数组$Data,每次将单年份数据追加进去,确保所有年份数据汇总
  • GET请求优化:移除不必要的Body参数,符合REST API通用规范(若你的API必须用GET带Body,可重新添加并验证格式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:27:07