Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
1 year ago
Solved

Get Datasources as Admin

I have 66K+ Datasets ids with me , I'm in need to find the datasets which belongs to particular Gateway. I currently use Get Datasources as a admin giving Dataset as parameter every single time. Can ...
  • Sahir_Maharaj's avatar
    1 year ago

    Hello Anonymous,

     

    Can you please try using PowerShell, which supports looping and API requests:

    $clientId = "Your-Client-ID"
    $tenantId = "Your-Tenant-ID"
    $clientSecret = "Your-Client-Secret"
    $datasets = @("DatasetID1", "DatasetID2", "DatasetID3")
    $gatewayId = "Your-Gateway-ID"
    
    $tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
    $apiUrlBase = "https://api.powerbi.com/v1.0/myorg/admin/datasets"
    
    $body = @{
        grant_type = "client_credentials"
        client_id = $clientId
        client_secret = $clientSecret
        scope = "https://analysis.windows.net/powerbi/api/.default"
    }
    
    $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
    $accessToken = $tokenResponse.access_token
    
    $datasetDataSources = @()
    
    foreach ($datasetId in $datasets) {
        $apiUrl = "$apiUrlBase/$datasetId/datasources"
    
        $response = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers @{ Authorization = "Bearer $accessToken" }
    
        foreach ($dataSource in $response.value) {
            if ($dataSource.gatewayId -eq $gatewayId) {
                $datasetDataSources += [PSCustomObject]@{
                    DatasetId = $datasetId
                    DataSource = $dataSource
                }
            }
        }
    }
    
    $datasetDataSources | Format-Table -AutoSize

    Hope this helps.