脚本内容:

<#
.SYNOPSIS
This script grab all ARM VM VHD file in the subscription and caculate VHD size.
.DESCRIPTION
This script grab all ARM VM VHD file in the subscription and caculate VHD size.
.Example
.\Get-ArmVMDiskSize.ps1 -subscriptionid xxxxxxx-xxxx-xxxx-xxxxxxx
Then input the username and password of Azure China.
.Disclaimer
This sample code is provided for the purpose of illustration only and is not intended to be used in a production environment.
THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
We grant You a nonexclusive, royalty-free right to use and modify the Sample Code and to reproduce and distribute the object code form of the Sample Code, provided that You agree:
(i) to not use Our name, logo, or trademarks to market Your software product in which the Sample Code is embedded;
(ii) to include a valid copyright notice on Your software product in which the Sample Code is embedded;
(iii) to indemnify, hold harmless, and defend Us and Our suppliers from and against any claims or lawsuits, including attorneys’ fees, that arise or result from the use or distribution of the Sample Code.
#> param(
[Parameter(Mandatory = $true)]
[String]$SubscriptionID
) function Get-BlobBytes
{
param (
[Parameter(Mandatory=$true)]
[Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageBlob]$Blob) # Base + blob name
$blobSizeInBytes = 124 + $Blob.Name.Length * 2 # Get size of metadata
$metadataEnumerator = $Blob.ICloudBlob.Metadata.GetEnumerator()
while ($metadataEnumerator.MoveNext())
{
$blobSizeInBytes += 3 + $metadataEnumerator.Current.Key.Length + $metadataEnumerator.Current.Value.Length
} if ($Blob.BlobType -eq [Microsoft.WindowsAzure.Storage.Blob.BlobType]::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 @{"vhdlength" = "{0:F2}" -f ($blob.Length / 1GB) -replace ","; "usedsize" = "{0:F2}" -f ($blobSizeInBytes / 1GB) -replace ","}
} function Get-VMCoresandMemory
{
param (
[Parameter(Mandatory=$true)]
[String]$VMSize) $csvfile = $env:USERPROFILE+"\Downloads\VMsizes.csv"
$VMSizeList = Import-Csv $csvfile
$VMcoresmem = $VMSizeList | where {$_.Size -eq $VMSize} return @{"Cores" = $VMcoresmem.Cores; "Memory" = $vmcoresmem.Memory}
} <#
Import-Module AzureRM.Compute
$PSversion = (Get-Module -Name AzureRM.Compute).Version If($PSversion -lt [System.Version]"2.6.0")
{
Write-Host "PowerShell Version too low. Visit https://docs.microsoft.com/en-us/powershell/azure/overview to install the newest AzureRM module.";
Exit
}
#> Login-AzureRmAccount -EnvironmentName AzureChinaCloud | Out-Null
Get-AzureRmSubscription -SubscriptionId $SubscriptionID | Out-Null
Select-AzureRmSubscription -SubscriptionId $SubscriptionID | Out-Null $armfile = $env:USERPROFILE+"\Downloads\armvms-"+$subscriptionID+".csv"
Set-Content $armfile -Value "ResourceGroup,VMName,VMSize,Cores,Memory(GB),DiskName,OSorData,VHDUri,StorageAccount,VHDLength,VHDUsedSize" Write-Verbose "ARM part starts!" $armvms = Get-AzureRmVM foreach($armvm in $armvms)
{
$vmresourcegroup = $armvm.ResourceGroupName
$vmname = $armvm.Name
$vmsize = $armvm.HardwareProfile.VmSize
$vmcores = (Get-VMCoresandMemory -VMSize $vmsize).Cores
$vmmemory = (Get-VMCoresandMemory -VMSize $vmsize).Memory $vmosdiskname = $armvm.StorageProfile.OsDisk.Name
If ($armvm.StorageProfile.OsDisk.vhd -eq $null)
{
Write-Host ("The VM "+$vmname+" is using Managed Disks.")
$vmosdisksize = (Get-AzureRmDisk -ResourceGroupName $vmresourcegroup -DiskName $vmosdiskname).DiskSizeGB
Add-Content $armfile -Value ($vmresourcegroup+","+$vmname+","+$vmsize+“,”+$vmcores+","+$vmmemory+","+$vmosdiskname+",OSDisk,No visible VHD files for Managed Disk VM,No visible storage account for Managed Disk VM,"+$vmosdisksize+",Managed Disks don't support GetBlobSize method")
$datadisks = $armvm.StorageProfile.DataDisks
If ($datadisks.Count -eq 0)
{
Write-Host ("The VM "+$vmname+" contains no data disk.")
}
else
{
Write-Host ("The VM "+$vmname+" contains "+$datadisks.Count+" data disk(s).")
foreach ($datadisk in $datadisks)
{
$vmdatadiskname = $datadisk.Name
$vmdatadisksize = (Get-AzureRmDisk -ResourceGroupName $vmresourcegroup -DiskName $vmdatadiskname).DiskSizeGB
Add-Content $armfile -Value (",,,,,"+$vmdatadiskname+",DataDisk,No visible VHD files for Managed Disk VM,No visible storage account for Managed Disk VM,"+$vmdatadisksize+",Managed Disks don't support GetBlobSize method")
}
}
}
else
{
$vmosdiskuri = $armvm.StorageProfile.OsDisk.Vhd.Uri
$vmosdiskstorageaccountname = ($armvm.StorageProfile.OsDisk.Vhd.Uri.Split("{/,.}"))[2]
$vmosdiskstorageaccountkey = (Get-AzureRmStorageAccount | ? {$_.StorageAccountName -eq $vmosdiskstorageaccountname} | Get-AzureRmStorageAccountKey)[0].Value
$vmosdiskstorageaccountcontext = New-AzureStorageContext -StorageAccountName $vmosdiskstorageaccountname -StorageAccountKey $vmosdiskstorageaccountkey
$vmosdiskcontainername = ($armvm.StorageProfile.OsDisk.Vhd.Uri.Split("/")[3])
$vmosdiskblobname = ($armvm.StorageProfile.OsDisk.Vhd.Uri.Split("/")[(($armvm.StorageProfile.OsDisk.Vhd.Uri.Split("/")).count) - 1])
$vmosdiskblob = Get-AzureStorageBlob -Context $vmosdiskstorageaccountcontext -blob $vmosdiskblobname -Container $vmosdiskcontainername $osvhdsize = Get-BlobBytes $vmosdiskblob If ($vmsize -like "*DS*")
{
Add-Content $armfile -Value ($vmresourcegroup+","+$vmname+","+$vmsize+","+$vmcores+","+$vmmemory+","+$vmosdiskname+",OSDisk,"+$vmosdiskuri+","+$vmosdiskstorageaccountname+","+$osvhdsize+",Premium Disks don't support GetBlobSize method")
}
else
{
Add-Content $armfile -Value ($vmresourcegroup+","+$vmname+","+$vmsize+","+$vmcores+","+$vmmemory+","+$vmosdiskname+",OSDisk,"+$vmosdiskuri+","+$vmosdiskstorageaccountname+","+$osvhdsize.vhdlength+","+$osvhdsize.usedsize)
} $datadisks = $armvm.StorageProfile.DataDisks
If ($datadisks.count -eq 0)
{
Write-Host ("The VM "+$vmname+" contains no data disk.")
}
else
{
Write-Host ("The VM "+$vmname+" contains "+$datadisks.Count+" data disk(s).")
foreach ($datadisk in $datadisks)
{
$vmdatadiskname = $datadisk.Name
$vmdatadiskuri = $datadisk.Vhd.Uri
$vmdatadiskstorageaccountname = ($vmdatadiskuri.Split("{/,.}"))[2]
$vmdatadiskstorageaccountkey = (Get-AzureRmStorageAccount | ? {$_.StorageAccountName -eq $vmdatadiskstorageaccountname} | Get-AzureRmStorageAccountKey)[0].Value
$vmdatadiskstorageaccountcontext = New-AzureStorageContext -StorageAccountName $vmdatadiskstorageaccountname -StorageAccountKey $vmdatadiskstorageaccountkey
$vmdatadiskcontainername = ($datadisk.Vhd.Uri.Split("/")[3])
$vmdatadiskblobname = ($datadisk.Vhd.Uri.Split("/")[(($datadisk.Vhd.Uri.Split("/")).count) - 1])
$vmdatadiskblob = Get-AzureStorageBlob -Context $vmdatadiskstorageaccountcontext -blob $vmdatadiskblobname -Container $vmdatadiskcontainername $datavhdsize = Get-BlobBytes $vmdatadiskblob If ($vmsize -like "*DS*")
{
Add-Content $armfile -Value (",,,,,"+$vmdatadiskname+",DataDisk,"+$vmdatadiskuri+","+$vmdatadiskstorageaccountname+","+$datavhdsize.vhdlength+",Premium Disks don't support GetBlobSize method")
}
else
{
Add-Content $armfile -Value (",,,,,"+$vmdatadiskname+",DataDisk,"+$vmdatadiskuri+","+$vmdatadiskstorageaccountname+","+$datavhdsize.vhdlength+","+$datavhdsize.usedsize)
}
}
}
}
}
Write-Verbose "ARM part finished!"

脚本运行步骤:

1.安装较新的Azure Powershell模块,https://docs.azure.cn/zh-cn/powershell-install-configure

2.将附件压缩包下的.csv文件拷贝至机器%UserProfile%\Downloads 文件夹下

3.在PowerShell中运行脚本,提供订阅号并登陆账号,即可成功抓取虚拟机的CPU核数、内存大小及磁盘信息

执行脚本及输出示例:

获取指定订阅下所有Azure ARM虚拟机配置(CPU核数,内存大小,磁盘信息)的使用情况的更多相关文章

  1. Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况

    这是一个工具类,获取的内容: CPU使用率:得到的是当前CPU的使用情况,这是算出的是两次500毫秒时间差的CPU使用率 内存使用率:[1 -  剩余的物理内存/(总的物理内存+虚拟内存) ] * 1 ...

  2. Azure Powershell获取指定订阅下的虚拟机信息(ARM)

    为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本: 详情脚本: # 登陆Azure Account Add-AzureRmAccount -EnvironmentName AzureCh ...

  3. Azure Powershell获取指定订阅下的虚拟机信息(ASM)

    为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本: 详情脚本: # 登陆Azure Account Add-AzureAccount -Environment AzureChinaClo ...

  4. linux下查看CPU、内存、磁盘信息

    1.查看CPU信息# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/c ...

  5. 【转】Linux下查看CPU、内存、磁盘信息

    1.查看CPU信息# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/c ...

  6. Azure ARM虚拟机部署反恶意软件-安全扩展

    Azure虚拟机,默认情况下没有安装杀毒软件.如果您有此需求可以通过Azure 扩展进行安装,有关Azure反恶意软件的官方说明请参考:https://docs.azure.cn/zh-cn/secu ...

  7. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  8. PHP 获取指定目录下所有文件(包含子目录)

    PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...

  9. TDirectory.GetFileSystemEntries获取指定目录下的目录和文件

    使用函数: System.IOUtils.TDirectory.GetFileSystemEntries 所有重载: class function GetFileSystemEntries(const ...

随机推荐

  1. 2015年传智播客JavaEE 第168期就业班视频教程14-登录功能需求分析+模块结构命名规范

    得先造一个模块,来封装我们的员工模型.登录的就是我们的员工嘛.员工模块属于权限校验系列的,校验叫做auth.进销存模块叫做cn.itcast.erp.invoice.权限模块叫做cn.itcast.e ...

  2. hibernate与ssm多数据源配置

    hibernate: 1.配置多个数据源,比如2个:hibernate.cfg1.xml~hibernate.cfg8.xml <?xml version='1.0' encoding='UTF ...

  3. Master节点部署

    一.部署Kubernetes API服务部署 准备安装包 [root@linux-node1 ~]# cd /usr/local/src/kubernetes [root@linux-node1 ku ...

  4. jquery获得/修改html标签

    1.添加 meta$("head").append('<meta http-equiv="content-type" content="text ...

  5. UVaLive 4043 Ants (最佳完美匹配)

    题意:给定 n 个只蚂蚁和 n 棵树的坐标,问怎么匹配使得每个蚂蚁到树的连线不相交. 析:可以把蚂蚁和树分别看成是两类,那么就是一个完全匹配就好,但是要他们的连线不相交,那么就得考虑,最佳完美匹配是可 ...

  6. mongo find

    MongoVUE 对应成语句,结构如下: db.logs.find({ "message" : /消息/ }, { "message" : 1 }).limit ...

  7. Hadoop-2.7.2分布式安装手册

    目录 目录 1 1. 前言 3 2. 特性介绍 3 3. 部署 5 3.1. 机器列表 5 3.2. 主机名 5 3.2.1. 临时修改主机名 6 3.2.2. 永久修改主机名 6 3.3. 免密码登 ...

  8. 在spark中启动standalone集群模式cluster问题

    spark-submit --master spark://master:7077 --deploy-mode cluster --driver-cores 2 --driver-memory 100 ...

  9. (2)-生成JSONObject的方法

    生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ...

  10. 作业二:注册软件github

    注册Github