从容器下载blob内容

时间:2017-10-13 17:57:18

标签: powershell azure azure-storage-blobs

我正在尝试从azure存储帐户下载sme blob文件。

父容器中有其他容器和blockblobs的混合,我需要只下载blockblobs而不是其他容器,我找不到将它们分开的方法,我也需要从中下载一些blob容器内的容器。

我的代码将下载父blob中的所有内容,包括所有子容器。

  $sub = "MySub"
$staccname = "straccname1234"
$key = "sdcsecurekeythinghere"
$ctx = New-AzureStorageContext -StorageAccountName $staccname ` 
         -StorageAccountKey $key
$cont = "data\download\files.001" ##the container includes other cntainers and subcontainers
$dest = "C:\blb-Downloads"
Select-AzureSubscription -SubscriptionName $sub –Default
Set-AzureSubscription -Currentstaccname $staccname -SubscriptionName $sub
Get-AzureStorageBlob -Container $cont -Context $ctx
$blobs = Get-AzureStorageBlob -Container $cont  -Context $ctx
$blobs | Get-AzureStorageBlobContent –Destination $dest  -Context $ctx

父blob中有大约75个文件,data \ downloads中有123个文件。

2 个答案:

答案 0 :(得分:1)

你能不能只运行以下命令并将其限制为BlockBlobs?

Get-AzureStorageBlob -Container $cont  -Context $ctx | ? {$_.BlobType -eq "BlockBlob"}

答案 1 :(得分:1)

使用较新的Azure PowerShell Az module,您可以使用Get-AzStorageBlob列出容器中的所有块Blob,然后使用Get-AzStorageBlobContent下载Blob。

@George Wallace所示,我们可以使用Where-Object或其别名?来过滤块Blob类型。

演示:

$resourceGroup = "myResourceGroup"
$storageAccount = "myStorageAccount"
$container = "myContainerName"
$destination = "./blobs"

# Create destination directory if it doesn't exist
if (-not (Test-Path -Path $destination -PathType Container)) {
    New-Item -Path $destination -ItemType Directory
}

# Get storage account with container we want to download blobs from
$storageAccount = Get-AzStorageAccount -Name $storageAccount -ResourceGroupName $resourceGroup

# Get all BlockBlobs from container
$blockBlobs = Get-AzStorageBlob -Container $container -Context $storageAccount.Context 
    | Where-Object {$_.BlobType -eq "BlockBlob"}

# Download each blob from container into destination directory
$blockBlobs | Get-AzStorageBlobContent -Destination $destination -Force