Forum Discussion
API Limitations using Get commands "TooManyRequests" Error
Hi! Thank you for this script. I could use it after I created a workspaces array to hold the workspaces.
Well, have you managed to find a good solution since this post?
I am currently experimenting with the Start-Sleep -seconds powershell script with 4 seconds between each call. The script above runs but then I run another one for the users with 1 call for each reportdataset and that fails. By the way I even had to use the Resolve-Error command to get the TooManyRequests error, because without it, I only get an aggregate error. Bertalan
- Anonymous4 years agoNot applicable
Hello! Unfortunately I don't recall having a good solution for this issue. However, it appears I've made some changes to the script since I first asked for help. I believe I tinkered with the start-sleep time both inside and outside of the foreach loop and that seemed to have helped.
################################# # Reports # ################################# # Loops through each workspace and lists the reports in the workspace. $ReportsStopWatch = New-Object -TypeName System.Diagnostics.Stopwatch $ReportsStopWatch.Start() $ReportListExportPath = $exportPath + "ReportList" + $exportPathFileType Write-Host "" Write-Host "Starting Reports extract..." -ForegroundColor green $ReportsIncrementalCounter = 0 Start-Sleep -Seconds 300 $ReportList = ForEach ($workspace in $Workspaces) { $ReportsIncrementalCounter ++ Write-Host $ReportsIncrementalCounter " of " $Workspaces.Count " total workspaces. Fetching reports in workspace: " $workspace.Name #The script has to be paused to work around the API rate limitations error "too many requests". Start-Sleep -Seconds 10 ForEach ($report in (Get-PowerBIReport -Scope Organization -WorkspaceId $workspace.Id)) { [pscustomobject]@{ WorkspaceID = $workspace.Id WorkspaceName = $workspace.Name ReportID = $report.Id ReportName = $report.Name ReportURL = $report.WebUrl ReportDatasetID = $report.DatasetId } } } $ReportList if ($?) { Write-Host "Successfully retrieved report variables." -ForegroundColor green Write-Host "Exporting report information to .csv file." -ForegroundColor green $ReportList | Export-CSV $ReportListExportPath -NoTypeInformation -Encoding UTF8 if ($?) { Write-Host "Successfully saved PowerBIReportList_$currentDate to C:\users\$env:USERNAME\Desktop" -ForegroundColor green } else { write-host "Failed to save PowerBIReportList file to C:\users\$env:USERNAME\Desktop" -ForegroundColor yellow } } else { Write-Host "Failed to login to PowerBI. NOTE: Must have Global Admin, within Office 365 or Azure AD, or be a Power BI service administrator." -ForegroundColor yellow break } $ReportsElapsedTime = $ReportsStopWatch.Elapsed.Ticks $ReportsStopWatch.Reset()- bertalan_ronai4 years agoAdvocate I
Thanks! Wow, that Stopwatch feature is really useful.