我正在尝试从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个文件。
答案 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