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