[Azure]使用Powershell统计经典存储账号下容器中Blob的使用情况

60 篇文章 0 订阅
59 篇文章 0 订阅

脚本比较简单,不做过多介绍,唯一需要注意的是考虑到存储账号下文件数量过多的情况(例如十万或者百万级的文件数),为了避免单次Query过多文件数导致卡死或者超时,因此脚本中使用了一个$tokenStop变量限制每次Query Blob的上线(脚本中定义的是5000一次,如果觉得有需要可以改成10000,不要太多)。

脚本如下:

param(  
    [Parameter(Mandatory = $true)]
    [string]$SubscriptionName,
   
    [Parameter(Mandatory = $true)]
    [string]$StorageAccountName
)

Function SummarizeContainer($context, $containerName)
{
    Write-Host ("Calculating container {0}" -f $containerName) -ForegroundColor Yellow;
    $totalCount = 0;
    $totalSize = 0;
    $token = $null;
    $tokenStep = 5000;
    do
    {
        $blobs = Get-AzureStorageBlob -Container $containerName -Context $context -ContinuationToken $token -MaxCount $tokenStep;
        if($blobs.Length -le 0) 
        { 
            break;
        }
        foreach($blob in $blobs)
        {
            $totalSize += $blob.Length;
        }
        $totalCount += $blobs.Count;
        Write-Host ("{0} blobs calculated" -f $totalCount) -ForegroundColor Cyan;
        $token = $blobs[$blobs.Count -1].ContinuationToken;
    }
    while($token -ne $null)
    $totalSizeStr = "";
    if (($totalSize/1024/1024/1024) -gt 1)
    {
        $totalSizeStr = "{0:N}GB" -f ($totalSize/1024/1024/1024);
    }
    elseif (($totalSize/1024/1024) -gt 1)
    {
        $totalSizeStr = "{0:N}MB" -f ($totalSize/1024/1024);
    }
    elseif (($totalSize/1024) -gt 1)
    {
        $totalSizeStr = "{0:N}KB" -f ($totalSize/1024);
    }
    else
    {
        $totalSizeStr = "{0:N}Byte" -f $totalSize;
    }
    return [PSCustomObject]@{ContainerName = $containerName
                             BlobCount = $totalCount
                             TotalSize = $totalSizeStr};
}

[void](Select-AzureSubscription -SubscriptionName $SubscriptionName);
$storage = Get-AzureStorageAccount -StorageAccountName $StorageAccountName;
$context = $storage.Context;

Write-Host "Collecting containers" -ForegroundColor Yellow;
$containers = Get-AzureStorageContainer -Context $context;

$containerSummary = @();
foreach ($container in $containers)
{
    $containerSummary += (SummarizeContainer $context $container.Name);
}

$containerSummary | Select ContainerName, BlobCount, TotalSize;

测试结果:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值