首页 > 解决方案 > 使用 Powershell 运行多个迭代 API 调用

问题描述

我需要为 1000 个不同的 URI 运行 1000 个 API 调用。我尝试一次性运行 1000 个不同的 URI,如下所示,但 API 限制为 1000 行。有没有一种方法可以运行此代码 1000 次,生成 1000 个单独的 JSON 文件或在一个 JSON 文件中,而我不必单独使用 powershell 脚本运行 URI。

$access_token ="dfdfgdfgf45h5676rdffghfghfbazbfgjvdrtwsffrgr"
$LogPath ='C:\StackOVerflow'

$URI = 'https://api.web.ser/audits/a_80weqwepeopeoA'
       'https://api.web.ser/audits/a_B0980kdfl;skfd'
       'https://api.web.ser/audits/a_Csdfsdfsjlksdc'
       'https://api.web.ser/audits/a_Tlksdjfalkjdff'
       'https://api.web.ser/audits/a_Fldkfjlsfjdfdl'
       'https://api.web.ser/audits/a_Fsdfsdfsdfsd34'
       'https://api.web.ser/audits/a_G34gfgf4ffsdrf'
       'https://api.web.ser/audits/a_Haere34534fdgf'
       'https://api.web.ser/audits/a_Ifdl023lererew'
       'https://api.web.ser/audits/a_Afrererl45645w'

$headers = @{“authorization” = “Bearer $access_token”}

$result = Invoke-RestMethod -Uri $URI -Headers $headers |ConvertTo-Json| out-file "$LogPath\id_ExtractLogs$(((get-date).ToString("yyyyMMdd"))).json"


$result

标签: jsonpowershell

解决方案


您不能将数组传递uriInvoke-RestMethodcmdlet;它们必须被迭代。

这是一个有效的解决方案:

$uri = 'https://api.web.ser/audits'
$reportList = @(
    'a_80weqwepeopeoA'
    'a_B0980kdfl;skfd'
    # .. etc.
)

$token = 'secret'
$headers = @{ Headers = @{ Authorization = "Bearer $token" }}

$logPath = 'C:\StackOverflow'

foreach ($report in $reportList) {
    $stamp = Get-Date -Format FileDateTime
    Invoke-RestMethod -Uri "$uri/$report" -OutFile "$logPath\id_$stamp.json" @headers
}

推荐阅读