Azure Powershell获取指定订阅下的虚拟机信息(ARM)
为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本:
详情脚本:
# 登陆Azure Account
Add-AzureRmAccount -EnvironmentName AzureChinaCloud # 设置订阅ID
$sub = "******"
Select-AzureRmSubscription -Subscription $sub # 设置Excel格式
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.add()
$sheet = $workbook.worksheets.Item(1)
$sheet.cells.item(1,1) = "Test"
$excel.Visible = $true for($b = 1 ; $b -le 14 ; $b++)
{
$sheet.cells.item(1,$b).font.bold = $true
#$sheet.cells.item(1,$b).borders.LineStyle = $lineStyle::xlDashDot
$sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
$sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium
} $x = 2
$lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type]
$colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]
$borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type]
$chartType = "microsoft.office.interop.excel.xlChartType" -as [type]
$sheet.cells.item(1,1) = "名称"
$sheet.cells.item(1,2) = "类型"
$sheet.cells.item(1,3) = "状态"
$sheet.cells.item(1,4) = "资源组"
$sheet.cells.item(1,5) = "位置"
$sheet.cells.item(1,6) = "订阅ID"
$sheet.cells.item(1,7) = "内网IP"
$sheet.cells.item(1,8) = "内网IP保留状态"
$sheet.cells.item(1,9) = "配置信息"
$sheet.cells.item(1,10) = "系统"
$sheet.cells.item(1,11) = "DNS域名"
$sheet.cells.item(1,12) = "公网IP"
$sheet.cells.item(1,13) = "公网IP保留状态"
$sheet.cells.item(1,14) = "目标端口" # 定义变量
$vms = Get-AzureRmVM -Status
$vmCount = $vms.Count
$nics = Get-AzureRmNetworkInterface
$pips = Get-AzureRmPublicIpAddress
$nsgs = Get-AzureRmNetworkSecurityGroup
Write-Host "done" $currentSub = (Get-AzureRmContext).Subscription.Name # 定义方法
Function GetResourceNameFromResourceId($resourceId)
{
return $resourceId.Substring($resourceId.LastIndexOf('/') + 1);
} # 提取变量Value
for($i=0; $i -lt $vmCount; $i++)
{
$vm = $vms[$i];
$nicResourceId = $vm.NetworkProfile.NetworkInterfaces[0].Id
$nicInterfaces = GetResourceNameFromResourceId($nicResourceId)
#$nic = Get-AzureRmNetworkInterface -Name $nicInterfaces -ResourceGroupName $vm.ResourceGroupName
$nic = $nics | where {$_.Name -eq $nicInterfaces -and $_.ResourceGroupName -eq $vm.ResourceGroupName}
$ipResourceId = $nic.IpConfigurations[0].PublicIpAddress.Id
$ipAddress = GetResourceNameFromResourceId($ipResourceId)
$pip = $pips | where {$_.Name -eq $ipAddress -and $_.ResourceGroupName -eq $vm.ResourceGroupName}
$sheet.cells.item($x,1) = $vm.name
$sheet.cells.item($x,2) = "虚拟机(ARM)"
$sheet.cells.item($x,3) = $vm.PowerState
$sheet.cells.item($x,4) = $vm.ResourceGroupName
$sheet.cells.item($x,5) = $vm.Location
$sheet.cells.item($x,6) = $currentSub
$sheet.cells.item($x,7) = $nic.IpConfigurations[0].PrivateIpAddress
$sheet.cells.item($x,8) = $nic.IpConfigurations[0].PrivateIpAllocationMethod
$sheet.cells.item($x,9) = $vm.HardwareProfile.VmSize
$sheet.cells.item($x,10) = $vm.StorageProfile.OsDisk.OsType.ToString()
$sheet.cells.item($x,11) = $pip.DnsSettings.Fqdn
$sheet.cells.item($x,12) = $pip.IpAddress
$sheet.cells.item($x,13) = $pip.PublicIpAllocationMethod $nsgResourceId = $nic.NetworkSecurityGroup[0].Id
$nsgName = GetResourceNameFromResourceId($nsgResourceId)
#$nsg = Get-AzureRmNetworkSecurityGroup -Name $nsgName -ResourceGroupName $vm.ResourceGroupName
$nsg = $nsgs | where {$_.Name -eq $nsgName -and $_.ResourceGroupName -eq $vm.ResourceGroupName} $ports = $nsg.SecurityRules.DestinationPortRange
$portCount = $ports.Count for($j=0; $j -lt $portCount; $j++)
{
$port = $ports[$j];
$sheet.cells.item($x,14) = $port $x++
}
}
$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null $uri=$vm.VM.OSVirtualHardDisk.MediaLink.AbsoluteUri
$location=Get-AzureDisk | Where-Object {$_.MediaLink -eq $uri}| Select-Object Location
输出项及格式见下:
备注:
1.运行脚本期间可能会出现如下报错,忽略即可,不影响最终的结果统计。
2.该脚本运行前,需要事先定义好订阅
3.该脚本输出的为一个Excel表格,输出期间不要关闭正在运行的Excel
4.如果需要对指定Azure账号下的所有订阅进行统计,可参考如下脚本的遍历订阅方法,参考链接:
param(
[string]$tenantId="",
[string]$file="Azure-ARM-VMs.csv"
) Add-AzureRmAccount -EnvironmentName AzureChinaCloud Get-AzureRmSubscription
$vmobjs = @() foreach ($sub in $subs)
{ Write-Host Processing subscription $sub.SubscriptionName try
{ Select-AzureRmSubscription -SubscriptionId $sub.SubscriptionId -ErrorAction Continue $vms = Get-AzureRmVm foreach ($vm in $vms)
{
$vmInfo = [pscustomobject]@{
'Subscription'=$sub.SubscriptionName
'Mode'='ARM'
'Name'=$vm.Name
'ResourceGroupName' = $vm.ResourceGroupName
'Location' = $vm.Location
'VMSize' = $vm.HardwareProfile.VMSize
'Status' = $null
'AvailabilitySet' = $vm.AvailabilitySetReference.Id } $vmStatus = $vm | Get-AzureRmVM -Status
$vmInfo.Status = $vmStatus.Statuses[1].DisplayStatus $vmobjs += $vmInfo }
}
catch
{
Write-Host $error[0]
}
} $vmobjs | Export-Csv -NoTypeInformation -Path $file
Write-Host "VM list written to $file"
Azure Powershell获取指定订阅下的虚拟机信息(ARM)的更多相关文章
- Azure Powershell获取指定订阅下的虚拟机信息(ASM)
为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本: 详情脚本: # 登陆Azure Account Add-AzureAccount -Environment AzureChinaClo ...
- [转]C# 获取指定目录下所有文件信息、移动目录、拷贝目录
原文:http://blog.csdn.net/vchao13/article/details/6200255 1.获取指定目录下所有文件信息 /// <summary> /// 返回指定 ...
- C# 获取指定目录下所有文件信息
/// <summary> /// 返回指定目录下所有文件信息 /// </summary> /// <param name="strDirectory&quo ...
- 获取指定订阅下所有Azure ARM虚拟机配置(CPU核数,内存大小,磁盘信息)的使用情况
脚本内容: <# .SYNOPSIS This script grab all ARM VM VHD file in the subscription and caculate VHD size ...
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
/// <summary> /// 返回指定目录下的所有文件信息 /// </summary> /// <param name="strDirectory&qu ...
- c# 获取指定目录下的所有文件并显示在网页上
参考文献: FileInfo 的使用 https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- PHP 获取指定目录下所有文件(包含子目录)
PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...
- TDirectory.GetFileSystemEntries获取指定目录下的目录和文件
使用函数: System.IOUtils.TDirectory.GetFileSystemEntries 所有重载: class function GetFileSystemEntries(const ...
随机推荐
- angular4.0路由传递参数、获取参数最nice的写法
研究ng4的官网,终于找到了我想要的方法.我想要的结果是用'&'拼接参数传送,这样阅读上是最好的.否则很多'/'的拼接,容易混淆参数和组件名称.一般我们页面跳转传递参数都是这样的格式:http ...
- Python面向对象篇(1)-类和对象
面向对象编程 1.编程范式 我们写代码的目的是什么?就是为了能够让计算机识别我们所写的代码并完成我们的需求,规范点说,就是通过编程,用特定的语法+数据结构+特殊算法来让计算机执行特定的功能,实现一 ...
- HTML 中有用的字符实体
HTML 中有用的字符实体
- 【二分图】洛谷P1640连续攻击游戏
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- K:图相关的最小生成树(MST)
相关介绍: 根据树的特性可知,连通图的生成树是图的极小连通子图,它包含图中的全部顶点,但只有构成一棵树的边:生成树又是图的极大无回路子图,它的边集是关联图中的所有顶点而又没有形成回路的边. 一个有 ...
- Java的参数传递是值传递还是引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个对象实例作为一个参数被传递到方法中 ...
- 阿里云正式上线移动直播问答解决方案,助力APP尽情“撒币”!
2018年伊始,互联网圈就刮起了一阵"大佬狂撒币,网友喜答题"的热潮.以映客芝士超人等为代表的直播问答平台,通过答题分奖金的互动模式,迅速引爆网络热点.随后,多个直播和视频平台也上 ...
- 【转】如何将qlv格式的腾讯视频转换为mp4格式
一般来说,每个视频网站都会有自己的视频播放格式,如优酷的KUX.爱奇艺的QSV和腾讯的QLV等.但是大家知道,优酷是有转码功能的,而就目前来说腾讯视频还没有转码功能,这就给大家造成了一定的困扰.这里呢 ...
- fastboot模式
快速启动. 在安卓手机中fastboot是一种比recovery更底层的刷机模式. fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式. recovery是一种卡刷,就是将刷机包放 ...
- 关于Gson定制的分析
首先,为什么需要定制呢?很多同学可能觉得默认的不也挺好的嘛?最开始,我也是觉得的,而且我们一开始也是用默认的解析方式的,因为我们与外部约定的数据格式一直都比较稳定.但当外部数据不稳定,那么Gson默认 ...