2017-03-23 3 views
0

予期しない結果を示したの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.Count 
11434 

$restResults.Count 
11534 

:しかし、私はこれらのカウント(デバイスの合計数)が異なる理由として困惑してる作品

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

元の$restResultsには116ページあり、1ページから116ページまでループの増分を確認するためのコードを追加しました。

何が欠けていますか?

答えて

1

最初のページの内容を$testarrayに追加するのを忘れたようです。最初にdo-while-loopを渡すときには、$restResults.nextUrlを呼び出して2番目のページをロードするので、最初のページはスキップされます。スクリプトコードを次のように調整することをお勧めします。

$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) 
+0

ありがとうございましたrufer7は、そのトリックをしました! – J1raya

関連する問題