You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:57