В ваших скриптах powershell есть несколько ошибок:
1.Вы можете неправильно понять использование Get-AzureStorageBlobContent, он используется для загрузки больших двоичных объектов, вы не можете получить содержимое больших двоичных объектов, более подробную информацию см. здесь .
2. В цикле вы использовали $newFile = Get-AzureStorageFileContent -Path $file
, командлет Get-AzureStorageFileContent
предназначен для общего хранилища файлов, а не для хранилища больших двоичных объектов.
Вы можете использовать Get-AzureStorageBlobContent
для загрузки больших двоичных объектов в локальную папку, а затем работать с локальным файлом, который загружается из хранилища больших двоичных объектов. После изменения файла вы можете использовать Set-AzureStorageBlobContent
для загрузки локальных файлов в указанное хранилище BLOB-объектов Azure.
Пример кода, как показано ниже, и отлично работает на моей стороне:
$context = New-AzureStorageContext -ConnectionString "xxxx"
#download the blobs in specified contianers
$sourceFolder_blob = Get-AzureStorageBlob -Container "test-1" -Blob "*.txt" -Context $context
#the target azure container, which you want to upload the modifed blob to
$taget_container="test-2"
#the local path which is used to store the download blobs, and make sure the folders exist before use.
$sourceFolder_local="d:\test\blob1\"
$targetFolder_local="d:\test\blob2\"
foreach($file in $sourceFolder_blob)
{
#download the specified blob to local path
Get-AzureStorageBlobContent -Container "test-1" -Blob $file.name -Destination $sourceFolder_local -Context $context
#get the local file path
$local_file_path=$sourceFolder_local + $file.name
#set content to the file in target local folder
$local_target_file_path = "$targetFolder_local"+$file.name
#since the files are downloaded to local, you can any operation for the local file
Get-Content $local_file_path | %{$_ -replace '-','!'} | %{$_ -replace ',','.'} | Set-Content -Path $local_target_file_path
$newFile = Get-Content -Path $local_target_file_path
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($local_target_file_path , $newFile,$Utf8NoBomEncoding)
#the last step, upload the modified file to another azure container
Set-AzureStorageBlobContent -File $local_target_file_path -Context $context -Container $taget_container
}