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

I want to use the invoke-restmethod in a foreach loop to upload a multiplefiles through Infile parameter

每次循环执行时,文件都被替换为第一个文件的位置。我想在不破坏现有文件的情况下将其作为新文件上传..

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 


}

我认为您在代码中使用 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 命令 returns 一个 System.IO.FileInfo 对象,您不能直接将其用作 InFile 参数。相反,它需要一个完整的路径和文件名,所以我们使用 $localFile.FullName