#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
})
и тогда вы получите: