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

修改PowerShell脚本实现Azure存储账户及指定容器Blob筛选查询

修改后的Azure PowerShell脚本(实现按标签筛选存储账户、获取容量、指定容器及Blob列表)

以下脚本可实现你的需求:按指定标签筛选存储账户,获取存储账户详情、已用容量、名为"test"的容器信息,以及该容器内的所有Blob列表。

# 连接Azure账户(设备认证方式)
Connect-AzAccount -Tenant 'xxxxx' -UseDeviceAuthentication

# 获取当前租户下所有订阅
$subscriptions = Get-AzSubscription

# 指定要筛选的标签键
$tagKey = "any"

# 初始化结果数组
$results = @()

foreach ($subscription in $subscriptions) {
    # 切换到当前订阅上下文,屏蔽冗余输出
    Set-AzContext -SubscriptionId $subscription.Id | Out-Null

    # 筛选带有指定标签的存储账户
    $storageAccounts = Get-AzStorageAccount | Where-Object { $_.Tags.ContainsKey($tagKey) }

    foreach ($storageAccount in $storageAccounts) {
        # 获取存储账户已用容量指标(最近24小时)
        $resourceId = "/subscriptions/$($subscription.Id)/resourceGroups/$($storageAccount.ResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccount.StorageAccountName)"
        $uri = "https://management.azure.com$resourceId/providers/Microsoft.Insights/metrics?api-version=2023-10-01&metricnames=UsedCapacity&aggregation=Average&timespan=PT24H"

        try {
            $response = Invoke-AzRestMethod -Method Get -Uri $uri
            $metrics = $response.Content | ConvertFrom-Json
            $usedCapacityMetric = $metrics.value | Where-Object { $_.name.value -eq "UsedCapacity" }

            if ($usedCapacityMetric -and $usedCapacityMetric.timeseries.data) {
                # 取最新的容量数据,转换为GB单位保留2位小数
                $latestCapacityBytes = $usedCapacityMetric.timeseries.data[-1].average
                $usedCapacityGB = [math]::Round($latestCapacityBytes / 1GB, 2)
            } else {
                $usedCapacityGB = 0
            }
        } catch {
            Write-Warning "无法获取存储账户[$($storageAccount.StorageAccountName)]的容量指标:$_"
            $usedCapacityGB = 0
        }

        # 获取存储账户上下文
        $ctx = $storageAccount.Context

        # 筛选名为"test"的容器(-ieq支持大小写不敏感匹配,需严格匹配则改为-eq)
        $targetContainer = Get-AzStorageContainer -Context $ctx | Where-Object { $_.Name -ieq "test" }

        if ($targetContainer) {
            # 获取该容器下的所有Blob
            $blobs = Get-AzStorageBlob -Container $targetContainer.Name -Context $ctx

            foreach ($blob in $blobs) {
                # 将每条Blob信息加入结果数组
                $results += [PSCustomObject]@{
                    订阅名称          = $subscription.Name
                    资源组名称        = $storageAccount.ResourceGroupName
                    存储账户名称      = $storageAccount.StorageAccountName
                    容器名称          = $targetContainer.Name
                    存储账户已用容量(GB) = $usedCapacityGB
                    标签键            = $tagKey
                    标签值            = $storageAccount.Tags[$tagKey]
                    Blob名称          = $blob.Name
                    Blob大小(MB)      = [math]::Round($blob.Length / 1MB, 2)
                    Blob创建时间      = $blob.LastModified.DateTime
                }
            }
        } else {
            Write-Warning "存储账户[$($storageAccount.StorageAccountName)]中未找到名为'test'的容器"
        }
    }
}

# 输出结果,可根据需求选择表格展示或导出为CSV
$results | Format-Table -AutoSize
# 若需导出到CSV文件,取消注释下面一行
# $results | Export-Csv -Path "AzureStorageBlobReport.csv" -Encoding UTF8 -NoTypeInformation

关键修改点

  • 容器筛选修复:改用-ieq实现大小写不敏感匹配,避免因容器名称大小写差异导致筛选无结果;若需严格匹配,可替换为-eq。
  • 新增Blob列表获取:在找到目标容器后,调用Get-AzStorageBlob拉取所有Blob数据,并将Blob名称、大小、创建时间等信息整合到结果中。
  • 容量指标优化:限定查询最近24小时的容量数据,取最新一条记录而非求和,同时转换为GB单位提升可读性。
  • 冗余输出屏蔽:上下文切换时添加| Out-Null,避免不必要的输出干扰。
  • 错误提示增强:为容器未找到、指标获取失败等场景添加针对性警告信息。

内容的提问来源于stack exchange,提问作者sudhir karamchand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:04:51