修改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×pan=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
相关产品推荐
相关产品推荐

