我不能在這個主題上找到任何示例,我想知道如何去做。 任何人都可以告訴我一個例子或指向我一個關於如何在PowerShell中使用Invoke web請求做分頁的鏈接嗎?我面臨的挑戰是我正在對一次只返回100行的服務器進行API調用。爲了獲得更多的行,我必須再次打電話給服務器。我不知道該怎麼做。 如果有幫助,這裏是Canvas LMS提供的鏈接和我迄今爲止的代碼。Invoke-WebRequest Canvas LMS API分頁
分頁
請求返回多個項目將通過 默認分頁到10個項目。您可以使用?per_page 參數設置每頁自定義金額。對於每頁可設置多少個頁面有多大的限制是不確定的,因此請務必始終檢查鏈接標題。
要檢索其他頁面,返回的鏈接標頭應使用 。這些鏈接應該被視爲不透明。它們將是絕對的 網址,其中包含檢索所需 當前,下一個,上一個,第一個或最後一個頁面所需的全部參數。有一個例外是 ,如果發送access_token參數進行認證,則 不會包含在返回的鏈接中,並且必須重新附加。
分頁信息在鏈接頭提供:
Link: <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueA>; rel="current", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueB>;> rel="next", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueC>;> rel="first", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueD>;> rel="last"
可能的相對值是:
電流 - 鏈接結果的當前頁。下一步 - 鏈接到下一個 頁面的結果。上一頁 - 鏈接到結果的上一頁。第一個 - 鏈接到結果的第一頁。最後 - 鏈接到 結果的最後一頁。只有在相關時纔會包含這些內容。例如,對於 示例,結果的第一頁將不包含rel =「prev」鏈接。 rel =「last」也可能被排除,如果總計數過於昂貴,則對每個請求計算 。
初產品
$curlly=""
$url_main="https://[instance].instructure.com/api/v1/accounts/1/courses?per_page=1"
$security_token="imhungry"
$header = @{"Authorization"="Bearer "+ $security_token; "rel"="last"}
$curlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly = ConvertFrom-Json $curlly.Content
foreach($course in $curlly)
{
$course.name
}
$curlly.Count
最終產品
##This is an example on how to use pagination in powershell
$url_main="https://[instance].instructure.com/api/v1/accounts/1/courses?per_page=100"
$security_token="boyimhungry"
$header = @{"Authorization"="Bearer "+ $security_token}
$purlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly = ConvertFrom-Json $purlly.Content
$url_main = $purlly.Headers.Link.Split(",")[1].Replace("<","").Replace(">","") ## you can get away with just doing one replace("<","") but it looks neater this way
while(!$url_main.Contains("prev"))
{
$purlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly += ConvertFrom-Json $purlly.Content
$url_main = $purlly.Headers.Link.Split(",")[1].Replace("<","").Replace(">","")
cls
$curlly.Count
$url_main
}
foreach($course in $curlly)
{
$course.name
}
$curlly.Count