我正在向数组添加一些结果(设备),然后在脚本中稍后进行过滤和操作:
$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页的循环增量。
我错过了什么?
答案 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)