Обновление 0327:
Приведенный ниже код загрузит каждый файл в каждую папку:
$container_name="test10"
$destination_path="d:\ccc"
$user="xxx"
$pwd = "xxxxxx"
$context = New-AzStorageContext -StorageAccountName $user -StorageAccountKey $pwd
$path = "A/B"
#$date = (get-date).AddDays(-1).ToString("yyyy-MM-dd")
$date="2020-03-24"
$blobs = Get-AzStorageBlob -Container $container_name -Prefix "$path/$date" -Context $context
$i=0
foreach($blob in $blobs )
{
$blobName = $blob.Name -split "/" | select -Last 1
Write-Output "downloading blob $blobName"
$finalDirectory = New-Item -ItemType Directory -Force -Path "$($destination_path)\$i"
$finalPath = "$($finalDirectory)\$($blobName)"
$blob.ICloudBlob.DownloadToFile($finalPath,[System.IO.FileMode]::CreateNew)
$i=$i+1
}
Write-Output "***completed downloading***"
Оригинальный ответ:
Если вы используете командлет Get-AzStorageBlobContent
для загрузки больших двоичных объектов, то изменить структуру невозможно.
Но вы можете использовать $blob.ICloudBlob.DownloadToFile
метод $blob object
, который может удовлетворить ваши требования:
образец кода (проверено мной, все BLOB-объекты, включая вложенные папки, загружаются в одну папку локально):
$container_name="test10"
$destination_path="d:\ccc"
$user="storage_account_name"
$pwd = "storage_account_key"
$context = New-AzStorageContext -StorageAccountName $user -StorageAccountKey $pwd
$path = "A/B"
$date = (get-date).AddDays(-1).ToString("yyyy-MM-dd")
$blobs = Get-AzStorageBlob -Container $container_name -Prefix "$path/$date" -Context $context
foreach($blob in $blobs )
{
#get the name by removing the directory/folder name of a blob
$blobName = $blob.Name -split "/" | select -Last 1
Write-Output "downloading blob $blobName"
$finalPath = "$($destination_path)\$($blobName)"
$blob.ICloudBlob.DownloadToFile($finalPath,[System.IO.FileMode]::CreateNew)
}
Write-Output "***completed downloading***"
Пожалуйста, дайте мне знать, если вы все еще есть проблемы.