Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Powershell代码,用于将Blob内容的所有子文件夹下载到本地单个文件夹中_Azure_Powershell_Azure Storage Blobs - Fatal编程技术网

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

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代码将blob内容下载到本地,具体涉及特定的blob路径文件夹和日期参数化。现在一切正常。但是需要做如下的改变——我当然欢迎你的想法,这样我就可以推动它。 我在blob路径中有多个子文件夹假设-A/B/C,C有folder1、folder2等。。。。
如何使用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***"