所以我很快就会面临一个问题,我在 Vcloud director Rest API 中的当前查询,我留下来自动化,不会得到所有结果,因为它会超过 100 个项目的页面大小限制。
我可以硬编码来搜索第 2 页,但我实际上希望能够检查它是否有多个页面,如果有的话,有多少页面,并获得所有页面的调用并输出所有页面。我不想每次需要扩展到另一个页面时都必须进行硬编码。
与以下
$adminvm = Invoke-RestMethod -Uri "https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=10&format=records" -Method Get -Headers $headers
注意第 1 页
我通过解析$adminvm.QueryResultRecords
xmlns : http://www.vmware.com/vcloud/v1.5
name : adminVM
page : 1
pageSize : 100
total : 62
href : https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=100&format=records
type : application/vnd.vmware.vcloud.query.records+xml
xsi : http://www.w3.org/2001/XMLSchema-instance
schemaLocation : http://www.vmware.com/vcloud/v1.5 http://vcloud.example.com/api/v1.5/schema/master.xsd
Link : {Link, Link}
AdminVMRecord : {TBGRCFS01, Windows Server 2008 R2 Datacenter, sagebe01, LAB-CC-DC01...}
现在,当$adminvm.QueryResultRecords.pagesize小于$adminvm.QueryResultRecords.total 时:
$adminvm.QueryResultRecords.link来自
rel href
--- ----
alternate https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=100&format=references
alternate https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=100&format=idrecords
至
rel href
--- ----
nextPage https://vcloud.example.com/api/query?type=adminVM&page=2&pageSize=100&format=records
lastPage https://vcloud.example.com/api/query?type=adminVM&page=2&pageSize=100&format=records
alternate https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=100&format=references
alternate https://vcloud.example.com/api/query?type=adminVM&page=1&pageSize=100&format=idrecords
对于那些不熟悉 Vcloud Rest 组织的人,所有内容往往都在$Restcall.QueryRecords.SomethingRecord中,并且将包含一页数据......所以在这种情况下,它将是$adminvm.QueryResultRecords.AdminVMRecord
现在我应该如何解决这个问题......即使作为一个函数......我被卡住了
我应该如何处理这个?
目标是让它自动检查是否有多个页面,并为每个额外的页面获取数据,并将所有数据一起输出。
我想我应该从 if pagesize is less than total 开始......但不确定方法......我的意思是我知道我必须在每个页面上进行 REST 调用......但是如何公式化地做到这一点?