azure function powershell从存储队列中读取并写入存储表

时间:2016-12-05 19:48:19

标签: powershell azure azure-functions

因此,我尝试开发一个从Azure存储队列中读取数据并将其写入Azure存储表的函数。我似乎找不到任何相关的东西。我找到了读取队列的代码:

$in = Get-Content $triggerInput
Write-Output "PowerShell script processed queue message '$in'"

但是没有例子写到桌子上,所以我不知道该怎么做。

2 个答案:

答案 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。