簡體   English   中英

帶有 Powershell 的 Power BI 推送數據集; 如何在單個 HTTP 調用中推送多個值/對象?

[英]Power BI Push Dataset w/ Powershell; How to push multiple values/objects in a single HTTP call?

我有一個 powershell 腳本,它查詢數據庫以檢索具有多個不同列的單行。 我需要在每次添加到數組的多個服務器上運行此查詢,並最終構建一個 json object 其中每個 object 包含 Z466DEEC7146ECDF5FCA6ZD38

  1. 日期
  2. 時間
  3. 總阻塞時間
  4. 服務器名稱

在每個循環中為單個服務器調用 rest 方法時,我可以成功地讓它工作,但我需要先獲取每個服務器的所有數據,然后通過調用 Invoke-C 推送 JSON ZA8CFDE6331BD59EB666F891Z 的數組

$endpoint = "https://api.powerbi.com/MyEndpoint"

$ServerList = ('localhost', 'dev')

while($true)
{
    foreach ($Server in $ServerList)
    {
    $QueryResults = Invoke-DbaQuery -SqlInstance $Server -Database "Master" -Query "
    SELECT 
    SUM(wt.wait_duration_ms) as TotalBlockTime, @@SERVERNAME as ServerName
    FROM sys.dm_tran_locks AS tm
    INNER JOIN sys.dm_os_waiting_tasks as wt ON tm.lock_owner_address = wt.resource_address
    "
    Write-Host 'Query Executed' 
  
    $TotalBlockTime = $QueryResults.TotalBlockTime

    $ServerName = $QueryResults.ServerName

    $Date = Get-Date -DisplayHint Date -Format MM/dd/yyyy

    $Time = Get-Date -DisplayHint Time -Format HH:mm:ss
    }
    Write-Host 'Building Payload'
    $payload = @{
    "Date" = $Date
    "Time" = $Time
    "TotalBlockTime" = $TotalBlockTime
    "ServerName" = $ServerName
    }

    Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($payload))

    write-host $payload.TotalBlockTime $payload.ServerName

    Write-Host "Date: " $Date " Time: " $Time " TotalBlockTime: " $TotalBlockTime " ServerName: " $ServerName
    sleep 2
}

您必須將每個服務器的查詢結果累積在某個東西(例如數組)中,然后按照文檔中的指定構造一個 JSON ,其屬性為rows ,它是一個值數組:

{
  "rows": [
    {
      "ProductID": 1,
      "Name": "Adjustable Race",
      "Category": "Components",
      "IsCompete": true,
      "ManufacturedOn": "07/30/2014"
    },
    {
      "ProductID": 2,
      "Name": "LL Crankarm",
      "Category": "Components",
      "IsCompete": true,
      "ManufacturedOn": "07/30/2014"
    },
    {
      "ProductID": 3,
      "Name": "HL Mountain Frame - Silver",
      "Category": "Bikes",
      "IsCompete": true,
      "ManufacturedOn": "07/30/2014"
    }
  ]
}

如果我修改你的代碼,它可能是這樣的:

$endpoint = "https://api.powerbi.com/MyEndpoint"

$ServerList = ('localhost', 'dev')

while($true)
{
    $ServerResults = @() # Results from each of the servers will be stored here

    foreach ($Server in $ServerList)
    {
        $QueryResults = Invoke-DbaQuery -SqlInstance $Server -Database "Master" -Query "
        SELECT 
        SUM(wt.wait_duration_ms) as TotalBlockTime, @@SERVERNAME as ServerName
        FROM sys.dm_tran_locks AS tm
        INNER JOIN sys.dm_os_waiting_tasks as wt ON tm.lock_owner_address = wt.resource_address
        "
        Write-Host 'Query Executed' 

        $TotalBlockTime = $QueryResults.TotalBlockTime

        $ServerName = $QueryResults.ServerName

        $Date = Get-Date -DisplayHint Date -Format MM/dd/yyyy

        $Time = Get-Date -DisplayHint Time -Format HH:mm:ss

        Write-Host 'Building Payload'
        $row = @{
            "Date" = $Date
            "Time" = $Time
            "TotalBlockTime" = $TotalBlockTime
            "ServerName" = $ServerName
        }

        Write-Host $row.TotalBlockTime $row.ServerName

        Write-Host "Date: " $Date " Time: " $Time " TotalBlockTime: " $TotalBlockTime " ServerName: " $ServerName
        $ServerResults += $row
    }

    $payload = @{ rows = $ServerResults }

    Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json $payload)

    Write-Host "Date: " $Date " Time: " $Time " TotalBlockTime: " $TotalBlockTime " ServerName: " $ServerName
    sleep 2
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM