我正在尝试从PowerShell中获取getOneDriveUsageAccountDetail REST GET的数据。麻烦的是,默认情况下它将仅返回200个项目,我设法使其返回10000个项目,我认为这是一个硬限制。但是我需要获取所有项目,或者能够查询一个用户或一批用户的报告。看来不可能。
我发现可以将 If custom_color_scheme = true Then
Dim back_color_bits() As String = this_dialog_backcolor.Replace(" ", "").Split(",")
If Not this_dialog_backcolor = "" Then
new_dialog.BackColor = Color.FromArgb(Convert.ToInt32(back_color_bits(0)), _
Convert.ToInt32(back_color_bits(1)), Convert.ToInt32(back_color_bits(2)))
End If
添加到URI中以返回10000个结果。
唯一的参数是期间和日期。
我有一个Initialize-Authorization函数来创建$ script:APIHeader来存储访问令牌。效果很好。
这是我用来生成报告的功能。
&%24top=10000
答案 0 :(得分:0)
大多数图端点返回paged data:
某些针对Microsoft Graph的查询由于服务器端分页或由于使用
$top
查询参数专门限制请求中的页面大小而返回多页数据。当结果集跨越多个页面时,Microsoft Graph在响应中返回一个@odata.nextLink
属性,其中包含指向下一页结果的URL。
您需要在结果中跟随nextLink
才能检索下一页(最后一页是没有nextLink
的第一个结果)。
答案 1 :(得分:0)
这是我的最终代码:
Function Get-GraphOneDriveUsageAccountDetail {
$AccountDetail = Invoke-RestMethod `
-Method get `
-Uri "https://graph.microsoft.com/beta/reports/getOneDriveUsageAccountDetail(period='D180')?%24format=application%2Fjson&%24top=10000" `
-ContentType 'application/json' `
-Headers $script:APIHeader `
-ErrorAction Stop
$result = $AccountDetail.value
While($AccountDetail.'@odata.nextLink')
{
Write-Verbose "Next Link $($AccountDetail.'@odata.nextLink')" -Verbose
$AccountDetail = Invoke-RestMethod `
-Method get `
-Uri $AccountDetail.'@odata.nextLink' `
-ContentType 'application/json' `
-Headers $script:APIHeader `
-ErrorAction Stop
$result += $AccountDetail.value
}
return $result
}