使用rest api循环显示意外结果

时间:2017-03-23 10:08:01

标签: powershell wordpress-rest-api

我正在向数组添加一些结果(设备),然后在脚本中稍后进行过滤和操作:

$Devurl = "https://my-site.com/internal/api"
$restResults = Invoke-RestMethod -uri "$Devurl/$device" -UseDefaultCredentials -Method Get -ContentType "application/json"

$resultpages = $restResults.Pages
$incpages = ''
$testarray = @()

Do {
    [int]$incpages += 1
    $url = ($restResults.nexturl) -replace 'page=1',"page=$incpages"
    $getresults = Invoke-RestMethod -uri $url -UseDefaultCredentials -Method Get -ContentType "application/json"
    $testarray += $getresults.Models
    $resultpages -= 1
    } while ($resultpages -gt 0)

我可以做类似的事情:

$testarray | where {$_.os -like '*windows*'} | select hostname,os

哪个有效,但是我很困惑为什么这些数量(设备总数)不同:

$testarray.Count 
11434

$restResults.Count 
11534

原始$restResults有116页,我添加了代码来验证从第1页到第116页的循环增量。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您似乎忘了将第一页的内容添加到$testarray。首次传递do-while-loop时,您可以通过调用$restResults.nextUrl来加载第二页,以便跳过第一页。我建议按如下方式调整脚本代码

$devurl = "https://my-site.com/internal/api";
$restResults = Invoke-RestMethod -Method Get -uri "$devurl/$device" -UseDefaultCredentials;

$resultpages = $restResults.Pages;
$testarray = @();
$testarray += $restResults.Models;

Do {
    $restResults = Invoke-RestMethod -Method Get -uri $restResults.nexturl -UseDefaultCredentials;
    $testarray += $restResults.Models;
    $resultpages -= 1
} while ($resultpages -gt 0)