[Azure]使用Powershell获取ASM和ARM存储的实际使用量

来源:互联网 发布:java快速开发平台比较 编辑:程序博客网 时间:2024/06/08 10:11

在下面两篇的基础上修改了一点脚本,加入了统计Blob实际大小的部分:

http://blog.csdn.net/qwertyupoiuytr/article/details/77527998

http://blog.csdn.net/qwertyupoiuytr/article/details/77527951


针对ASM下存储账号的脚本:

param(      [Parameter(Mandatory = $true)]    [string]$SubscriptionName,       [Parameter(Mandatory = $true)]    [string]$StorageAccountName)Function GetBlobBytes($blob){    $blobSizeInBytes = 124 + $blob.Name.Length * 2;    $metadataEnumerator = $blob.ICloudBlob.Metadata.GetEnumerator();    while ($metadataEnumerator.MoveNext())    {        $blobSizeInBytes += 3 + $metadataEnumerator.Current.Key.Length + $metadataEnumerator.Current.Value.Length;    }    if ($blob.BlobType.ToString() -eq "BlockBlob")    {        $blobSizeInBytes += 8;        $blob.ICloudBlob.DownloadBlockList() | ForEach-Object { $blobSizeInBytes += $_.Length + $_.Name.Length; }    }    else    {        $blob.ICloudBlob.GetPageRanges() | ForEach-Object { $blobSizeInBytes += 12 + $_.EndOffset - $_.StartOffset; }    }    return $blobSizeInBytes;}Function SummarizeContainer($context, $containerName){    Write-Host ("Calculating container {0}" -f $containerName) -ForegroundColor Yellow;    $totalCount = 0;    $totalSize = 0;    $actualSize = 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;            $actualSize += GetBlobBytes $blob;        }        $totalCount += $blobs.Count;        Write-Host ("{0} blobs calculated" -f $totalCount) -ForegroundColor Cyan;        $token = $blobs[$blobs.Count -1].ContinuationToken;    }    while($token -ne $null)    $totalSizeStr = DecorateSizeWithUnit $totalSize;    $actualSizeStr = DecorateSizeWithUnit $actualSize;    return [PSCustomObject]@{ContainerName = $containerName                             BlobCount = $totalCount                             TotalSize = $totalSizeStr                             ActualTotalSize = $actualSizeStr};}Function DecorateSizeWithUnit($totalSize){    $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 $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, ActualTotalSize;

运行结果:



针对ARM模式下存储账号的脚本:

param(      [Parameter(Mandatory = $true)]    [string]$SubscriptionName,       [Parameter(Mandatory = $true)]    [string]$ResourceGroupName,       [Parameter(Mandatory = $true)]    [string]$StorageAccountName)Function GetBlobBytes($blob){    $blobSizeInBytes = 124 + $blob.Name.Length * 2;    $metadataEnumerator = $blob.ICloudBlob.Metadata.GetEnumerator();    while ($metadataEnumerator.MoveNext())    {        $blobSizeInBytes += 3 + $metadataEnumerator.Current.Key.Length + $metadataEnumerator.Current.Value.Length;    }    if ($blob.BlobType.ToString() -eq "BlockBlob")    {        $blobSizeInBytes += 8;        $blob.ICloudBlob.DownloadBlockList() | ForEach-Object { $blobSizeInBytes += $_.Length + $_.Name.Length; }    }    else    {        $blob.ICloudBlob.GetPageRanges() | ForEach-Object { $blobSizeInBytes += 12 + $_.EndOffset - $_.StartOffset; }    }    return $blobSizeInBytes;}Function SummarizeContainer($context, $containerName){    Write-Host ("Calculating container {0}" -f $containerName) -ForegroundColor Yellow;    $totalCount = 0;    $totalSize = 0;    $actualSize = 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;            $actualSize += GetBlobBytes $blob;        }        $totalCount += $blobs.Count;        Write-Host ("{0} blobs calculated" -f $totalCount) -ForegroundColor Cyan;        $token = $blobs[$blobs.Count -1].ContinuationToken;    }    while($token -ne $null)    $totalSizeStr = DecorateSizeWithUnit $totalSize;    $actualSizeStr = DecorateSizeWithUnit $actualSize;    return [PSCustomObject]@{ContainerName = $containerName                             BlobCount = $totalCount                             TotalSize = $totalSizeStr                             ActualTotalSize = $actualSizeStr};}Function DecorateSizeWithUnit($totalSize){    $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 $totalSizeStr;}[void](Select-AzureRmSubscription -SubscriptionName $SubscriptionName);$storage = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $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, ActualTotalSize;

运行结果:


阅读全文
1 0
原创粉丝点击