[Azure]使用Powershell统计ARM存储账号下容器中Blob的使用情况
2017-08-24 11:30
603 查看
脚本比较简单,不做过多介绍,唯一需要注意的是考虑到存储账号下文件数量过多的情况(例如十万或者百万级的文件数),为了避免单次Query过多文件数导致卡死或者超时,因此脚本中使用了一个$tokenStop变量限制每次Query Blob的上线(脚本中定义的是5000一次,如果觉得有需要可以改成10000,不要太多)。
脚本如下:
param(
[Parameter(Mandatory = $true)]
[string]$SubscriptionName,
[Parameter(Mandatory = $true)]
[string]$ResourceGroupName,
[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-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;
测试结果:
脚本如下:
param(
[Parameter(Mandatory = $true)]
[string]$SubscriptionName,
[Parameter(Mandatory = $true)]
[string]$ResourceGroupName,
[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-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;
测试结果:
相关文章推荐
- [Azure]使用Powershell统计经典存储账号下容器中Blob的使用情况
- [Azure]使用Azure Powershell查看ARM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Powershell获取ASM和ARM存储的实际使用量
- [Azure] 使用Azure Powershell脚本查看账号下所有订阅中的云服务公网IP地址绑定情况
- [Azure]使用Azure Powershell查看ASM模式下Azure存储中的vhd文件对应的虚拟机
- 使用 Azure PowerShell 创建高级存储帐户
- [Azure]使用Powershell克隆ARM虚拟机(非托管磁盘)
- [Azure]使用Azure Powershell输出ASM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Powershell重新生成ARM虚拟机网卡
- [Azure]使用Powershell调整ARM虚拟机的系统磁盘和数据磁盘大小
- [Azure]使用Powershell导出所有订阅下的ARM虚拟机的信息
- 使用PowerShell创建Azure Storage的SAS Token访问Azure Blob文件
- .NET 使用 Azure Blob 存储图片或文件
- [Azure]ARM模式下使用Powershell找出订阅中没有被使用的vhd
- [Azure]使用Powershell获取ARM模式下可用的虚拟机平台映像信息
- 使用Windows Azure Blob 存储服务进行 SQL Server 备份和还原
- Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机
- [Azure]使用Powershell将ARM虚拟机加入可用性集
- [Azure]使用Powershell将ARM虚拟机(托管磁盘)加入可用性集