使用Microsoft Graph中的报表时遇到麻烦-getOneDriveUsageAccountDetail

时间:2019-04-30 15:22:39

标签: rest powershell microsoft-graph

我正在尝试从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个结果。

https://docs.microsoft.com/en-us/graph/api/reportroot-getonedriveusageaccountdetail?view=graph-rest-1.0

唯一的参数是期间和日期。

我有一个Initialize-Authorization函数来创建$ script:APIHeader来存储访问令牌。效果很好。

这是我用来生成报告的功能。

&%24top=10000

2 个答案:

答案 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
}