如何通过Azure PowerShell获取指定存储容器下的Year层级子容器?
当然可以实现!
不过得先澄清一个关键概念:Azure Blob存储里并没有真正的「子容器」结构——你提到的Name\Year\Month\Day\Hour其实是Blob的虚拟目录层级:Name是实际存在的顶级容器,而Year及以下的层级都是该容器下的虚拟路径前缀(本质是Blob名称的一部分)。
明白了这个前提,用Azure PowerShell获取指定容器下的所有Year层级虚拟目录就很简单了,下面是具体步骤和代码示例:
步骤1:建立存储上下文连接
首先要确保你已经连接到目标Azure存储账户,可以用存储账户密钥或者连接字符串来创建存储上下文:
# 替换为你的存储账户信息 $storageAccountName = "your-storage-account-name" $storageAccountKey = "your-storage-account-key" # 创建存储上下文 $ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey # 指定你要查询的顶级容器(也就是你说的「Name」) $targetContainer = "your-target-name-container"
步骤2:获取Year层级虚拟目录
这里提供两种可靠的方法:
方法一:直接获取虚拟目录对象
使用Get-AzStorageBlobDirectory命令,可以直接列出容器下的第一级虚拟目录,再过滤出符合Year格式(4位数字)的项:
# 获取容器下第一级虚拟目录,过滤出4位数字的Year目录 $yearDirectories = Get-AzStorageBlobDirectory -Container $targetContainer -Context $ctx -Prefix "" | Where-Object { $_.Name -match "^(\d{4})/$" } # 输出所有Year目录的名称(去掉末尾的斜杠) $yearDirectories | ForEach-Object { Write-Host "Year: $($_.Name.TrimEnd('/'))" }
方法二:通过Blob路径提取并去重
如果容器下的Blob数量不多,也可以先列出所有Blob,提取路径中的第一部分(Year)并去重:
# 提取所有Blob路径的第一部分,过滤出4位数字的Year值并去重 $uniqueYears = Get-AzStorageBlob -Container $targetContainer -Context $ctx | ForEach-Object { $_.Name -split '/' | Select-Object -First 1 } | Where-Object { $_ -match "\d{4}" } | Select-Object -Unique # 输出结果 $uniqueYears | ForEach-Object { Write-Host "Year: $_" }
注意事项
- 如果你的
Year不是4位数字格式,可以调整正则表达式来匹配你的实际命名规则; - 如果容器下有直接存储的Blob(不在任何Year目录下),上面的过滤逻辑会自动排除这些无效项;
- 如果你使用的是较旧的
AzureRM模块(而非Az模块),只需把命令中的Az替换为AzureRM即可(比如Get-AzureStorageBlobDirectory)。
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

