Из PowerShell Получить Refre sh History In Group из REST API Power BI и экспортировать в CSV - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить историю обновлений PowerBI через URL-адрес API через Powershell и экспортировать в CSV. Я мало знаю о Powershell, но я пытаюсь изучить его, поскольку он очень полезен в области бизнес-аналитики, где Я работаю, я попытался запустить код через этот сайт ПЛАНОВОЕ ОБНОВЛЕНИЕ POWERBI В ВАШЕЙ ОРГАНИЗАЦИИ , а также попытался отредактировать для извлечения, но безуспешно.

Скрипт сайта работает без ошибок но не возвращает никаких результатов в CSV, это потому, что URL-адрес неправильный?

Сценарий веб-сайта:

$myCred = Get-Credential
Connect-PowerBIServiceAccount -Credential $myCred

$Workspaces = Get-PowerBIWorkspace
$ExportFile =  "D:\Users\F02579\Documents\PowerBIRefreshHistory.csv"
Remove-Item $ExportFile -Force -ErrorAction SilentlyContinue

foreach($workspace in $Workspaces)
{

    $DataSets = Get-PowerBIDataset -WorkspaceId $workspace.Id | where {$_.isRefreshable -eq $true}
    foreach($dataset in $DataSets)
    {

        $URI = "groups/" + $workspace.id + "/datasets/" + $dataset.id + "/refreshes"
        #$OutFile = $ExportFolder + '\' + $workspace.Name + '-' + $dataset.Name + '.json'
        $Results = Invoke-PowerBIRestMethod -Url $URI -Method Get | ConvertFrom-Json

        foreach($result in $Results.value)
        {
            $errorDetails = $result.serviceExceptionJson | ConvertFrom-Json -ErrorAction SilentlyContinue

            $row = New-Object psobject
            $row | Add-Member -Name "Workspace" -Value $workspace.Name -MemberType NoteProperty
            $row | Add-Member -Name "Dataset" -Value $dataset.Name -MemberType NoteProperty
            $row | Add-Member -Name "refreshType" -Value $result.refreshType -MemberType NoteProperty
            $row | Add-Member -Name "startTime" -Value $result.startTime -MemberType NoteProperty
            $row | Add-Member -Name "endTime" -Value $result.endTime -MemberType NoteProperty
            $row | Add-Member -Name "status" -Value $result.status -MemberType NoteProperty
            $row | Add-Member -Name "errorCode" -Value $errorDetails.errorCode -MemberType NoteProperty
            $row | Add-Member -Name "errorDescription" -Value $errorDetails.errorDescription -MemberType NoteProperty
            $row | Export-Csv -Path $ExportFile -Append -Delimiter ';' -NoTypeInformation
        }

    }

}

Я пытался поместить URL-адрес, который Microsoft предоставляет в этой ссылке, но также безуспешно.

Мой сценарий:

Import-Module MicrosoftPowerBIMgmt.Admin

$myCred = Get-Credential
Connect-PowerBIServiceAccount -Credential $myCred

$Session = New-PSSession -ConfigurationName Microsoft.Exchange `
    -ConnectionUri https://outlook.office365.com/powershell-liveid/ `
    -Credential $credential `
    -Authentication Basic `
    -AllowRedirection

Import-PSSession $Session

$Workspaces = Get-PowerBIWorkspace -Scope Organization -All
#Remove-Item $ExportFile -Force -ErrorAction SilentlyContinue

$DataSets =
ForEach ($workspace in $Workspaces)
    {
    Write-Host $workspace.Name
    ForEach ($dataset in (Get-PowerBIDataset -Scope Organization -WorkspaceId $workspace.Id))
        {
            #$URI = "groups/" + $workspace.id + "/datasets/" + $dataset.id + "/refreshes"
            $URI = "https://api.powerbi.com/v1.0/myorg/groups/" + $workspace.id + "/datasets/" + $dataset.id + "/refreshes"
            #$OutFile = $ExportFolder + '\' + $workspace.Name + '-' + $dataset.Name + '.json'
            $Results = Invoke-PowerBIRestMethod -Url $URI -Method Get | ConvertFrom-Json

            foreach($result in $Results.value)
            {
                $errorDetails = $result.serviceExceptionJson | ConvertFrom-Json -ErrorAction SilentlyContinue

                $ItemResult = New-Object System.Object
                $ItemResult | Add-Member -type NoteProperty -name WorkspaceID           -value $workspace.Id
                $ItemResult | Add-Member -type NoteProperty -name DatasetID             -value $dataset.Id
                $ItemResult | Add-Member -type NoteProperty -name RefreshID             -value $result.Id
                $ItemResult | Add-Member -type NoteProperty -name RequestId             -value $result.requestId
                $ItemResult | Add-Member -type NoteProperty -name RefresheType          -Value $result.refreshType              
                $ItemResult | Add-Member -type NoteProperty -name StartTime             -Value $result.startTime                
                $ItemResult | Add-Member -type NoteProperty -name EndTime               -Value $result.endTime                  
                $ItemResult | Add-Member -type NoteProperty -name Status                -Value $result.status                   
                $ItemResult | Add-Member -type NoteProperty -name ErrorCode             -Value $errorDetails.errorCode          
                $ItemResult | Add-Member -type NoteProperty -name ErrorDescription      -Value $errorDetails.errorDescription       

                # Put the item result and append it to the result object
                $Result +=$ItemResult
            }
        }
    }
$DataSets | Export-Csv "D:\Users\F02579\Documents\PowerBIRefreshHistory.csv" -NoTypeInformation -Encoding UTF8

Remove-PSSession $Session

Disconnect-PowerBIServiceAccount

Ошибка в моем сценарии:

PowerShellError

1 Ответ

0 голосов
/ 03 июня 2020

После нескольких звонков в Microsoft с некоторыми инженерами, которые работают с PowerBI и конектором Powershell, я теперь могу получить эту информацию.

Скрипт Powershell:

$authUrl = "https://login.windows.net/common/oauth2/token/"
$clientId = "Your clientID"
$pbiUsername = "Your user email"
$pbiPassword = "Your password"

$body = @{
    "resource" = “https://analysis.windows.net/powerbi/api";
    "client_id" = $clientId;
    "grant_type" = "password";
    "username" = $pbiUsername;
    "password" = $pbiPassword;
    "scope" = "openid"
}
$authResponse = Invoke-RestMethod -Uri $authUrl –Method POST -Body $body

$DatasetID = "Your datasetID"
$restURL = "https://api.powerbi.com/v1.0/myorg/datasets/$DatasetID/refreshes"

$headers = @{
    "Content-Type" = "application/json";
    "Authorization" = $authResponse.token_type + " " + $authResponse.access_token
}

$restResponse = Invoke-RestMethod -Uri $restURL –Method GET -Headers $headers | Select-Object -ExpandProperty value
$restResponse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...