Azure Powershell代码,用于将Blob内容的所有子文件夹下载到本地单个文件夹中
场景说明-之前我尝试使用PS代码将blob内容下载到本地,具体涉及特定的blob路径文件夹和日期参数化。现在一切正常。但是需要做如下的改变——我当然欢迎你的想法,这样我就可以推动它。 我在blob路径中有多个子文件夹假设-A/B/C,C有folder1、folder2等。。。。Azure Powershell代码,用于将Blob内容的所有子文件夹下载到本地单个文件夹中,azure,powershell,azure-storage-blobs,Azure,Powershell,Azure Storage Blobs,场景说明-之前我尝试使用PS代码将blob内容下载到本地,具体涉及特定的blob路径文件夹和日期参数化。现在一切正常。但是需要做如下的改变——我当然欢迎你的想法,这样我就可以推动它。 我在blob路径中有多个子文件夹假设-A/B/C,C有folder1、folder2等。。。。 如何使用PS代码在一个文件夹中获取所有内容。现在,在C中,具有多个blob内容的子文件夹正在下载,因为一个文件夹假设-00,01,02与blob中的可用内容类似。更新0327: 下面的代码将把每个文件下载到每个文件夹中:
如何使用PS代码在一个文件夹中获取所有内容。现在,在C中,具有多个blob内容的子文件夹正在下载,因为一个文件夹假设-00,01,02与blob中的可用内容类似。更新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对象的$blob.ICloudBlob.DownloadToFile
方法,该方法可以满足您的要求:
示例代码(我自己测试过,包括子文件夹中的所有blob都下载到本地单个文件夹中):
如果您还有更多问题,请告诉我。请编辑您的问题,使其至少可读。完成。。。上面这件事只有一个问题。所以,如果我理解正确,您希望从本地计算机上的单个文件夹中的子文件夹下载所有文件。正确吗?是的,您的回答是正确的。您可以这样设置:一个子文件夹中的所有文件都可用,而多个子文件夹作为一个文件夹可用,当前其格式与blob结构中的格式相同。A/B/C是blob C had dates文件夹,其内部日期为01,02。。。。在本地,它也是静态的,直到A/B。使用PS代码获取当前日期-1,然后在其内部有10-20个包含blob内容的文件夹。请不要在注释中添加代码。而是编辑你的问题并将其包含在那里。另外,请确保代码的格式正确()。现在刚刚看到您的代码,将在我的一端进行端到端测试,并了解这是否符合我的要求,如果有任何问题,我将在这里联系您。谢谢你做了这么好的工作@anirudhbragadeesan,是的,如果有一些问题,请告诉我。你能不能在上面的代码中快速替换需要替换的内容,以便我可以检查一下。Thanks@anirudhbragadeesan,只需替换$container\u name/$destination\u path/$user/$pwdtried的值即可,但不会发生下载或按预期执行。我们可以调用快速同步。
$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***"