Powershell代码将Blob内容的所有子文件夹下载到本地到单个文件夹

时间:2020-03-24 07:07:10

标签: azure powershell azure-storage-blobs

场景的解释-以前我试图进行针对特定blob路径文件夹和Date参数化的使用PS代码将blob内容下载到本地的活动,现在一切正常。但是需要进行以下更改-肯定会欢迎提出想法,以便我可以进一步发展。 我在Blob路径中假设有多个子文件夹-A / B / C,C具有folder1,folder2等...。 如何使用PS代码将所有内容保存在一个文件夹中。现在,在C中,具有多个blob内容的子文件夹正在下载,因为一个文件夹假设-00,01,02就像blob中的可用内容一样。

1 个答案:

答案 0 :(得分:1)

更新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 cmdlet下载blob,则无法更改结构。

但是您可以使用$blob.ICloudBlob.DownloadToFile中的$blob object方法,该方法可以满足您的要求:

示例代码(由我自己测试,所有blob(包括子文件夹中的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***"

如果您还有其他问题,请告诉我。