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


    为方便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账号下的所有订阅进行统计,可参考如下脚本的遍历订阅方法,参考链接:

    https://blogs.msdn.microsoft.com/tomholl/2016/11/22/dumping-details-of-azure-virtual-machines-to-csvexcel/

    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]
        }
    }
  • 相关阅读:
    4_5.springboot2.x之Web开发RestfulCRUD操作
    4_4.springboot之Web开发登录和拦截器
    4_3.springboot2.x之默认访问首页和国际化
    4_2.springboot2.x配置之springmvc自动配置
    4_1.springboot2.xWeb开发使用thymeleaf
    03_springboot2.x日志处理
    08_springboot2.x自定义starter
    JavaScript-----对象属性赋值及获取属性值的方式
    Spring探究-----AOP配置详解
    Spring探究-----自动装配Bean详解
  • 原文地址:https://www.cnblogs.com/stonehe/p/8395721.html
Copyright © 2020-2023  润新知