Я хочу использовать invoke-restmethod в цикле foreach для загрузки нескольких файлов через параметр Infile - PullRequest
0 голосов
/ 05 сентября 2018

Каждый раз при выполнении цикла файл заменяется на место первого файла. Я хочу загрузить его как новый файл, не нарушая существующие ..

foreach ($blob in $blobs)
{   
    $file=New-TemporaryFile
    $file=Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile -Force
    $contents = Get-Content $localFile -Raw -ErrorAction:SilentlyContinue
    $f=New-TemporaryFile
    Add-Content $f $contents
    $Header = @{
"Content-Disposition"="attachment;filename=$($blob.Name)"
"Authorization"=$accessToken
        }
    Invoke-RestMethod -Uri $apiUrl -Headers $Header  -Method put -InFile $f 


}

1 Ответ

0 голосов
/ 05 сентября 2018

Я думаю, что вы сделали это с помощью команд New-TemporaryFile в вашем коде. Зачем использовать Get-AzureStorageBlobContent для хранения содержимого блоба в файле, а затем создать другой временный файл для копирования содержимого?

Это было бы намного проще:

foreach ($blob in $blobs) {  
    $localFile = New-TemporaryFile
    Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile.FullName -Force

    $Header = @{
        "Content-Disposition"="attachment;filename=$($blob.Name)"
        "Authorization"=$accessToken
    }

    Invoke-RestMethod -Uri $apiUrl -Headers $Header  -Method put -InFile $localFile.FullName
}

Редактировать

Команда New-TemporaryFile возвращает объект System.IO.FileInfo, который нельзя напрямую использовать в качестве параметра InFile. Вместо этого он ожидает полный путь и имя файла, поэтому мы используем $localFile.FullName

...