[Azure]使用Powershell获取ASM和ARM存储的实际使用量
2017-08-30 17:24
459 查看
在下面两篇的基础上修改了一点脚本,加入了统计Blob实际大小的部分:
http://blog.csdn.net/qwertyupoiuytr/article/details/77527998 http://blog.csdn.net/qwertyupoiuytr/article/details/77527951
针对ASM下存储账号的脚本:
运行结果:
针对ARM模式下存储账号的脚本:
运行结果:
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 { [int64]$rangeSize = 1GB; [int64]$start = 0; $pages = "start"; while ($pages) { try { $pages = $blob.ICloudBlob.GetPageRanges($start, $rangeSize); } catch { if ($_ -like "*the range specified is invalid*") { $pages = $null; break; } else { Write-Error $_; } } $pages | ForEach-Object { $blobSizeInBytes += 12 + $_.EndOffset - $_.StartOffset; } $start += $rangeSize; } } 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 { [int64]$rangeSize = 1GB; [int64]$start = 0; $pages = "start"; while ($pages) { try { $pages = $blob.ICloudBlob.GetPageRanges($start, $rangeSize); } catch { if ($_ -like "*the range specified is invalid*") { $pages = $null; break; } else { Write-Error $_; } } $pages | ForEach-Object { $blobSizeInBytes += 12 + $_.EndOffset - $_.StartOffset; } $start += $rangeSize; } } 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;
运行结果:
相关文章推荐
- [Azure]使用Powershell获取Azure ARM模式订阅下的一些常用信息
- 通过Azure Powershell获取asm及arm虚拟机的配置信息
- [Azure]使用Azure Powershell查看ASM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]使用Azure Powershell查看ARM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]使用Powershell获取ARM模式下可用的虚拟机平台映像信息
- [Azure]使用Powershell统计ARM存储账号下容器中Blob的使用情况
- [Azure]使用Azure Powershell重新部署ASM虚拟机
- [Azure]使用Azure Powershell清理ASM模式下未使用的Disk和vhd
- [Azure]使用Powershell调整ARM虚拟机的系统磁盘和数据磁盘大小
- [Azure]使用Powershell批量开启ASM虚拟机(带状态检测和重试)
- [Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Powershell克隆ARM虚拟机(托管磁盘)
- [Azure]使用Powershell统计经典存储账号下容器中Blob的使用情况
- [Azure]使用Powershell将ARM虚拟机加入可用性集
- PowerShell迁移Azure虚拟机从ASM到ARM
- 使用 Azure PowerShell 创建高级存储帐户
- [Azure]使用Powershell删除ARM模式下单台虚拟机及相关资源(非托管磁盘)
- [Azure]使用Azure Powershell输出ASM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Powershell输出某台ARM虚拟机的NSG
- [Azure]使用Powershell重新生成ARM虚拟机网卡