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
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.