###### Necessário Pacote MicrosoftPowerBIMgmt
###### Ao Logar tenha certeza de utilizar um usuário com permissão de Administrador
### Informar abaixo onde deseja salvar o arquivo de retorno
$Pasta = "c:\temp\"
Connect-PowerBIServiceAccount
$Workspaces = Invoke-PowerBIRestMethod -Url 'https://api.powerbi.com/v1.0/myorg/admin/groups?$filter=state eq ''Active''&$top=1000' -Method Get | ConvertFrom-Json | Select value
$tamanho = 30
$linha = 0
$DadosWorkspaces = @()
while ($linha -lt $Workspaces.value.Count) {
$chunk = $Workspaces.value[$linha..($linha + $tamanho - 1)]
$Objeto = [PSCustomObject]@{
workspaces = $chunk.id
}
$Body = $Objeto | ConvertTo-Json
$API = 'https://api.powerbi.com/v1.0/myorg/admin/workspaces/getInfo?lineage=False&datasourceDetails=False&datasetSchema=False&datasetExpressions=False'
$Retorno = Invoke-PowerBIRestMethod -Url $API -Body $Body -Method Post | ConvertFrom-Json
Write-Host "Verificando Status do Scan"
$Status = Invoke-PowerBIRestMethod -Url "admin/workspaces/scanStatus/$($Retorno[0].id)" -Method Get | ConvertFrom-Json
while ($Status.status -ne 'Succeeded') {
$Status = Invoke-PowerBIRestMethod -Url "admin/workspaces/scanStatus/$($Retorno[0].id)" -Method Get | ConvertFrom-Json
Start-Sleep -Seconds 5
}
$Info = Invoke-PowerBIRestMethod -Url "admin/workspaces/scanResult/$($Retorno[0].id)" -Method Get | ConvertFrom-Json
$DadosWorkspaces += $Info.workspaces
Write-host $linha
$linha += $tamanho
}
$Reports = $DadosWorkspaces | Select-Object -Property @{N='WorkspaceName';E={$_.name}}, @{N='WorkspaceId';E={$_.id}} -ExpandProperty reports
$DataSets = $DadosWorkspaces | Select-Object @{N='WorkspaceName';E={$_.name}}, @{N='WorkspaceId';E={$_.id}} -ExpandProperty datasets
$DataFlows = $DadosWorkspaces | Select-Object @{N='WorkspaceName';E={$_.name}}, @{N='WorkspaceId';E={$_.id}} -ExpandProperty dataflows
$DataMarts = $DadosWorkspaces | Select-Object @{N='WorkspaceName';E={$_.name}}, @{N='WorkspaceId';E={$_.id}} -ExpandProperty datamarts
$Workspaces = $DadosWorkspaces | Select-Object id, name, type, state, isOnDedicatedCapacity
$DashBoards = $DadosWorkspaces | Select-Object @{N='WorkspaceName';E={$_.name}}, @{N='WorkspaceId';E={$_.id}} -ExpandProperty dashboards
Out-File -FilePath $($Pasta + 'Reports.json') -InputObject ($Reports | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force
Out-File -FilePath $($Pasta + 'DataSets.Json') -InputObject ($DataSets | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force
Out-File -FilePath $($Pasta + 'DataFlows.Json') -InputObject ($DataFlows | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force
Out-File -FilePath $($Pasta + 'DataMarts.Json') -InputObject ($DataMarts | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force
Out-File -FilePath $($Pasta + 'Workspaces.Json') -InputObject ($Workspaces | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force
Out-File -FilePath $($Pasta + 'DashBoards.Json') -InputObject ($DashBoards | ConvertTo-Json -Depth 10) -Encoding UTF8 -Force