[英]Power BI Push Dataset w/ Powershell; How to push multiple values/objects in a single HTTP call?
我有一個 powershell 腳本,它查詢數據庫以檢索具有多個不同列的單行。 我需要在每次添加到數組的多個服務器上運行此查詢,並最終構建一個 json object 其中每個 object 包含 Z466DEEC7146ECDF5FCA6ZD38
在每個循環中為單個服務器調用 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.