我想在foreach循环中使用invoke-restmethod通过Infile参数上传多文件

问题描述 投票:0回答:1

每次循环执行时,文件都将替换为第一个文件。我想将其作为新文件上传,而不会分发现有文件。

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 


}
azure powershell azure-storage-blobs azure-webjobs invoke-command
1个回答
0
投票

我认为你在代码中使用New-TemporaryFile命令来完成它。为什么使用Get-AzureStorageBlobContent将blob内容存储在文件中,然后创建另一个临时文件以将内容复制到?

这会简单得多:

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

© www.soinside.com 2019 - 2024. All rights reserved.