Код Powershell для загрузки всей подпапки содержимого Blob в локальную папку в одну папку - PullRequest
1 голос
/ 24 марта 2020

Объяснение сценария. Раньше я пытался выполнить загрузку содержимого BLOB-объекта в локальное хранилище с использованием кода PS с указанием c папки пути BLOB-объекта и параметризации Date. Теперь все работает нормально. Но необходимо внести изменения, как показано ниже: идеи, безусловно, приветствуются, чтобы я мог их ускорить. Предположим, у меня есть несколько подпапок внутри пути BLOB-объекта - A / B / C, C имеет folder1, folder2 et c .... Как мне получить все в одной папке, используя код PS. И теперь, в пределах C, когда подпапки с несколькими объектами BLOB загружаются как одна-единственная папка, принимают -00,01,02, как то, что доступно в BLOB-объектах.

1 Ответ

1 голос
/ 25 марта 2020

Обновление 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***"

Пожалуйста, дайте мне знать, если вы все еще есть проблемы.

...