我对 MS Graph 的调用运行良好...我们正在尝试提取报告并将其导出。一切工作正常,但当我们将其投入 PROD 时,我们有 17,000 个用户来评估,这可能需要 3-4 小时才能运行。问题出在大约 1/2 路之后(似乎每次超时都不同)。在此之前它工作得很好,所以这似乎是某种软件的超时或节流。我收到的错误是错误 401 未经授权,它拒绝移至下一次使用,请参见下文。
Invoke-WebRequest:远程服务器返回错误:(401)未经授权。 在 C: emp\GatherAzureUsers.ps1:98 字符:18
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ConvertFrom-JSon:无效的 JSON 原语:。 在 C: emp\GatherAzureUsers.ps1:99 字符:32
~~~~~~~~~~~~~~~~
我尝试在整个大 while 循环中定期重新进行身份验证。我尝试强制断开连接(Disconnect-MgGraph)并重新连接。对于连接和重新连接,我们尝试使用应用程序密钥以及使用常规浏览器进行简单的手动身份验证。还是有同样的问题。
注意,在开始超时之前(在 1.5 - 2 小时内),我可能会处理 7000 - 10,000 个用户。所以我不认为我达到了时间限制,因为我在一些地方读到它会有 100 毫秒超时或 100 个项目(作为我能够找到的一些限制的示例)。
我已经查看了下面设置总体超时的方法,但这在我的 PowerShell 命令中不起作用(它会引发错误 The term 'graphServiceClient.HttpProvider.OverallTimeout' is not recognize as the name of a cmdlet...) graphServiceClient.HttpProvider.OverallTimeout = TimeSpan.FromHours(6);
我有同样的问题,有两个错误,我们收到 401 表示断开连接,429 表示限制问题。
用它来检查连接而不是断开/重新连接:
$context = Get-MgContext if (-not $context) { write-host -ForegroundColor 黄色“连接图” Connect-MgGraph -ClientId $ClientID -TenantId $TenantID -Certificate $ClientCertificate -NoWelcome } 别的 { write-host -ForegroundColor 黄色“图表已连接” }
使用它来帮助限制循环中的请求:
#防节流控制 开始-睡眠-毫秒 300
我认为它们是相关问题,即后端 SP 服务器在过度使用而不进行限制时会踢出连接。