Сохранение CSV-строки объекта Powershell в виде файла в хранилище BLOB-объектов Azure - PullRequest
0 голосов
/ 23 октября 2019

Мы генерируем объект Powershell с помощью Runbook Azure и в основном преобразуем его в строку CSV.

Мы хотим сохранить эту сгенерированную строку CSV (сгенерированную из Azure Powershell Runbook) в хранилище BLOB-объектов Azure в виде файла CSV,Кто-нибудь может мне помочь, как и с помощью команды powershell, которую мы можем использовать, чтобы сохранить эту строку CSV в виде файла в хранилище BLOB-объектов Azure? Я попытался осмотреться и наткнулся на функцию Push-OutputBindings, но не был уверен, как использовать эту функцию в модуле Runbook PowerShell для Azure, какой модуль импортировать, и не уверен, является ли он частью Azure Functions V2, но есть какие-то небольшие сведения о том, как ее использовать. поможет мне.

Спасибо

1 Ответ

1 голос
/ 23 октября 2019

Попробуйте следующий код - с некоторыми изменениями. По сути, идея заключается в том, чтобы сохранить CSV-файл локально, а затем загрузить его в хранилище BLOB-объектов (я проверял его локально, но не из Runbook, но он также должен там работать):

#file name will be a guid string to avoid overlapping     
$guid = New-Guid
$guidString =$guid.ToString()

# store csv string to random file with random name (guid) 
$LogFull = "$guidString.csv" 
$LogItem = New-Item -ItemType File -Name $LogFull

#ignore next two lines as you already have csv string
$Date = Get-Date
$csvstring = ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation

#save csv string locally 
$csvstring | Out-File -FilePath $LogFull -Append

#and then upload it to blob storage

#Get key to storage account
$acctKey = (Get-AzureRmStorageAccountKey -Name storage_acc_name -ResourceGroupName EastUS-TestRG).Value[0]

#Map to the reports BLOB context
$storageContext = New-AzureStorageContext -StorageAccountName "StorageAccName" -StorageAccountKey "acc_key"

#Copy the file to the storage account
Set-AzureStorageBlobContent -File $LogFull -Container "your_container" -BlobType "Block" -Context $storageContext -Verbose

Альтернативное решение с функциями Azure

Постарайтесь, чтобы ваша Runbook вызывала вызываемую Http функцию Azure, и передайте строку в качестве параметра или в теле. Это просто простой вызов API REST.

В функции Azure вы можете использовать код Python, NodeJS или C #, который поместит вашу строку в файл CSV в хранилище BLOB-объектов. Для этой темы существует множество учебных пособий, но сначала вам нужно передать свою строку в AF :)

Посмотрите на приведенный ниже пример и попробуйте нечто подобное (я не проверял его). По сути, идея состоит в том, чтобы вызвать простой вызов API REST и передать полезную нагрузку в теле запроса:

[string]$Endpoint= "https://myfunction.azurewebsites.net/api/HttpTrigger?code=my_code_I_get_from_Azure_portal"
. . .
$payload =@" your payload "@
$Header = @{
   "Content-Type" = "text/plain";
}
$Result = Invoke-RestMethod -Uri $Endpoint -Method Post -body $Payload Headers $Header

URL-адрес функции Azure + код, полученный на портале Azure. Если вы нажмете на функцию Azure, вы увидитекнопка «Получить функцию URL».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...