为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本:
详情脚本:
# 登陆Azure Account Add-AzureAccount -Environment AzureChinaCloud # 设置订阅ID $sub = "******" Select-AzureSubscription -SubscriptionName $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 13 ; $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) = "配置信息" $sheet.cells.item(1,9) = "系统" $sheet.cells.item(1,10) = "DNS域名" $sheet.cells.item(1,11) = "公网IP" $sheet.cells.item(1,12) = "公共端口" $sheet.cells.item(1,13) = "私有端口" # 定义变量 $vms = Get-AzureVM $vmCount = $vms.Count # 提取变量Value for($i=0; $i -lt $vmCount; $i++) { $vm = $vms[$i]; $sheet.cells.item($x,1) = $vm.name $sheet.cells.item($x,2) = "虚拟机(经典)" $sheet.cells.item($x,3) = $vm.status $sheet.cells.item($x,4) = $vm.ServiceName $uri=$vm.VM.OSVirtualHardDisk.MediaLink.AbsoluteUri $location=Get-AzureDisk | Where-Object {$_.MediaLink -eq $uri}| Select-Object Location $sheet.cells.item($x,5) = $location.Location $sheet.cells.item($x,6) = $sub $sheet.cells.item($x,7) = $vm.IpAddress $sheet.cells.item($x,8) = $vm.InstanceSize $sheet.cells.item($x,9) = $vm.VM.OSVirtualHardDisk.OS $sheet.cells.item($x,10) = $vm.ServiceName+".chinacloudapp.cn" $endpoints = Get-AzureEndpoint -VM $vm $endpointsCount = $endpoints.Count for($j=0; $j -lt $endpointsCount; $j++) { $endpoint = $endpoints[$j]; $sheet.cells.item($x,11) = $endpoint.vip $sheet.cells.item($x,12) = $endpoint.port $sheet.cells.item($x,13) = $endpoint.localport $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]$file="Azure-Classic-VMs.csv" ) add-azureaccount -Environment AzureChinaCloud $subs = Get-AzureSubscription $vmobjs = @() foreach ($sub in $subs) { Write-Host Processing subscription $sub.SubscriptionName try { Select-AzureSubscription -SubscriptionId $sub.SubscriptionId -ErrorAction Continue $vms = Get-AzureVm $svcs = Get-AzureService foreach ($vm in $vms) { $service = $svcs | where-object { $_.ServiceName -eq $vm.ServiceName } $vmInfo = [pscustomobject]@{ 'Subscription'=$sub.SubscriptionName 'Mode'='Classic' 'Name'=$vm.Name 'ServiceName' = $vm.ServiceName 'Location' = $service.Location 'VMSize' = $vm.InstanceSize 'Status' = $vm.Status 'AvailabilitySet' = $vm.AvailabilitySetName} $vmobjs += $vmInfo } } catch { Write-Host $error[0] } }