因此,我尝试开发一个从Azure存储队列中读取数据并将其写入Azure存储表的函数。我似乎找不到任何相关的东西。我找到了读取队列的代码:
$in = Get-Content $triggerInput
Write-Output "PowerShell script processed queue message '$in'"
但是没有例子写到桌子上,所以我不知道该怎么做。
答案 0 :(得分:5)
最近我做了同样的功能,你可以找到例子here。您需要函数QueueTrigger-PowerShell
。 HTH
$json = Get-Content $triggerInput | ConvertFrom-Json
Write-Output "PowerShell script processed queue message '$json'"
$title = "PowerShell Table Entity for message {0}" -f $json.id
$entity = [PSObject]@{
Status = 0
Title = $title
}
$entity | ConvertTo-Json | Out-File -Encoding UTF8 $outputTable
要控制写入数据的表,可以使用function.json。对我来说,在那里指定了行和分区键:
{
"type": "table",
"name": "outputTable",
"tableName": "pancakeTable",
"connection": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
"direction": "out",
"partitionKey": "some value",
"rowKey": "I don't remember what was here but it was some form of variable (guid) generated from the request by Azure"
}
这是我的function.json,但最初它将分区和行键值硬编码到其中。现在我使用PowerShell生成那些(从这个帖子中的另一个答案复制粘贴):
PartitionKey = $requestBody.room
RowKey = get-date -Format "yyyy-MM-dd H:m:s.ms"
答案 1 :(得分:2)
如PowerShell storage documentation中所述,为了将实体写入表存储,您需要提供唯一的PartitionKey和RowKey值。因此,除非您在调用函数的任何地方管理RowKeys,否则我发现日期时间戳有用。考虑到这一点,像这样的传入json体:
{
"room": "Boardroom",
"temp": "21.24"
}
提供给您的PowerShell功能(提供WebHook和Queue触发器示例):
# WebHook example
$requestBody = Get-Content $req -Raw | ConvertFrom-Json
# Queue example
$requestBody = Get-Content $triggerInput | ConvertFrom-Json
Write-Output "PowerShell message body '$requestBody'"
$entity = [PSObject]@{
PartitionKey = $requestBody.room
RowKey = get-date -Format "yyyy-MM-dd H:m:s.ms"
Temp = $requestBody.temp
}
$entity | ConvertTo-Json | Out-File -Encoding UTF8 $outputTable
这导致一个新实体(可以被认为是数据库术语中的一行);假设您已在Function中配置了Azure表存储输出对象,并将其命名为outputTable。