如何处理PowerShell中Microsoft Graph的节流



我在一个csv文件中有大约300万用户,我正在尝试使用使用PowerShell cmdlets(不是SDK)的图形API在Azure AD B2C中创建它们我想在azure广告b2c中创建它们,当时还需要记录b2c接受和拒绝的用户在PowerShell脚本中执行的步骤:

  1. 使用Import-CSV导入CSV
  2. 创建用于存储已接受用户的同步数组列表
  3. 创建用于存储拒绝用户的同步数组列表
  4. 在图形API中使用批处理创建批请求(每次20个)
  5. 使用for-each object -parallel - throttllimit 100为每个批调用图形API
  6. 对于每个请求,检查接受和错误的状态码,并将用户添加到相应的Arraylist中7.导出为CSV

但是当遵循这些步骤时,微软图形API抛出了节流问题

谁能指导我如何处理节流在这种情况下?或者是否有其他替代方法来实现这一目标?

请检查参考资料

处理节流的最佳实践

当您实现错误处理时,使用HTTP错误代码429或当批处理本身失败时使用(Failed Dependency)代码424来检测节流。失败的响应包含Retry-After响应头。

使用Retry-After延迟回退请求是从节流中恢复的最快方法,因为Microsoft Graph在客户端被节流时继续记录资源使用情况。

  1. WaitRetry-After报头中指定的秒数。
  2. Retry请求。如果它是由于批处理而进行的节流,则可以在最长的重试后重试新批处理中重试所有失败的请求价值。
  3. 如果请求再次失败并返回429/424错误码,您仍然被限制。继续使用推荐的Retry-After延迟并重试请求until it succeeds.

Graph-Powershell

,

foreach($Response in $BatchResponse.responses){                        
if([Int32]$Response.status -eq 201){
//...success logic
}else{
$rptObject.ErrorCount++
$rptObject.Errors += $Response.status
if([Int32]$Response.status -eq 429){
$rptObject.ThrottleCount++                               
if(!$TimeOutServed){
Write-Verbose($Response.Headers.'Retry-After')
Write-Verbose("Serving Throttling Timeout " + $Response.Headers.'Retry-After')
Start-sleep -Seconds $Response.Headers.'Retry-After'
$TimeOutServed = $true
}
}

引用:

  1. Microsoft Graph节流指南- Microsoft Graph | Microsoft Docs
  2. 微软的。net图形SDK自动处理速率限制吗?-栈溢出
  3. (github.com) microsoftgraph powershell问题

相关内容

最新更新