Как сохранить файл, полученный в ответ на веб-запрос powershell в функциональном приложении Azure, в контейнер хранения Azure?

#azure #powershell #azure-functions

#лазурный #powershell #azure-функции #azure

Вопрос:

У меня есть приложение Azure function, которое выполняет следующий веб-запрос:

Invoke-RestMethod -Uri $uri -Method 'GET' -Headers $headers -Body $body -SkipCertificateCheck

На моем локальном компьютере я могу сохранить возвращенный XML файл как OutFile на локальный диск. Однако в реальной среде это происходит в функциональном приложении Azure, и поэтому я не думаю, что смогу сохранить файл на диск. Вместо этого я хочу перенаправить его в контейнер для хранения в Azure.

Я пробовал привязки вывода функции Azure, чтобы перенаправить ответ туда, но не смог записать фактический файл:

Push-OutputBinding -Name outputBlob -Value $response.content

Вся эта запись в контейнер хранения представляет собой строковое значение. Итак, как мне записать фактический файл, полученный в качестве ответа на InvokeRestMethod в приложении Azure function, в контейнер хранения Azure в этой среде?

Ответ №1:

Если файл не очень большой, вы действительно можете сохранить его в локальной файловой системе, даже при запуске в Azure. Просто выберите правильное местоположение и не забудьте очистить:

 $f = New-TemporaryFile
try {
    Invoke-RestMethod ... -OutFile $f.FullName
    # Do whatever you want with this file
    ...
} finally {
    Remove-Item $f.FullName
}
  

Ответ №2:

Пожалуйста, прочитайте ваш файл в массив байтов и передайте его в качестве аргумента.

 using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

New-Item -Path 'test.txt' -ItemType File
Set-Content 'test.txt' 'Welcome to www.thecodemanual.pl'
$file = [System.IO.File]::ReadAllBytes('test.txt')

Push-OutputBinding -Name outputBlob -Value $file

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
  

и тогда вы получите:

введите описание изображения здесь