导出Azure中所有关联资源的列表

时间:2016-07-05 02:43:24

标签: export-to-excel azure-resource-group

有没有人知道如何导出所有资源及其关联的列表(最好是xlsx)。

例如,我想在电子表格的一行中了解VM的名称,virtualNIC,StorageAccount,vNet,ResourceGroup,SecurityGroup以及与VM本身关联的任何其他资源。

目的是一目了然地了解所有资源是如何关联的,例如,如果我将端口规则添加到SecurityGroup,我将能够看到所有其他资源受到影响。

干杯

1 个答案:

答案 0 :(得分:2)

您可以使用这样的脚本

Login-AzureRmAccount

Function Dump-VirtualMachinesV1($outputPath) {
    $VMs = Find-AzureRmResource -ResourceType 'Microsoft.ClassicCompute/virtualMachines' -ExpandProperties | Sort-Object ResourceName

    $output = "Name,Location,IP,VNET,OS,Azure Size,Core,RAM,OS Disks,Temp Disk,Data Disks (TB),Resource Groups,C (OS),Temp, Data,Storage Account,Diagnostics Storage Account,Endpoints,Status,VIP`n"

    foreach ( $vm in $VMs ) {
        $vmSize = FixSize($vm.Properties.HardwareProfile.Size)
        $vmCores = (GetVmConfig($vm.Properties.HardwareProfile.Size)).Cores
        $vmRAM = (GetVmConfig($vm.Properties.HardwareProfile.Size)).RAM
        $diagnosticsStorageAccount = GetDiagnosticsStorageAccount($VM.Properties)
        $endpoints = GetEndpoints($vm.Properties)

        $output += $vm.Name + "," +`
            $vm.Location + "," +`
            $vm.Properties.InstanceView.PrivateIpAddress + "," +`
            $vm.Properties.NetworkProfile.VirtualNetwork.Name + "," +`
            $vm.Properties.StorageProfile.OperatingSystemDisk.OperatingSystem + "," +`
            $vmSize + "," +`
            $vmCores + "," +`
            $vmRAM + "," +`
            "1," +`
            "1," +`
            $vm.Properties.StorageProfile.DataDisks.Count + "," +`
            $vm.ResourceGroupName + "," +`
            $vm.Properties.DomainName.Name + "," +`
            "," +`
            "," +`
            $vm.Properties.StorageProfile.OperatingSystemDisk.StorageAccount.Name + "," +`
            $diagnosticsStorageAccount + "," +`
            $endpoints + "," +`
            $vm.Properties.InstanceView.Status + "," +`
            $vm.Properties.InstanceView.PublicIpAddresses + "`n"
    }
    $output | Out-File -Encoding ascii $outputPath
}


Function Dump-VirtualMachinesV2($outputPath) {
    $VMs = Find-AzureRmResource -ResourceType 'Microsoft.Compute/virtualMachines' -ExpandProperties | Sort-Object ResourceName

    $output = "Name,Location,IP,VNET,OS,Azure Size,Core,RAM,OS Disks,Temp Disk,Data Disks (TB),Cloud Services,C (OS),Temp, Data,Storage Account,Diagnostics Storage Account,Endpoints,Status,VIP`n"

    foreach ( $vm in $VMs ) {
        $vmSize = FixSize($vm.Properties.HardwareProfile.VMSize)
        $vmCores = (GetVmConfig($vm.Properties.HardwareProfile.VMSize)).Cores
        $vmRAM = (GetVmConfig($vm.Properties.HardwareProfile.VMSize)).RAM
        $diagnosticStorageAccount = GetDiagnosticsStorageAccount($vm.Properties)
        $endpoints = GetEndpoints($vm.Properties)


        $vm.Properties.StorageProfile.OsDisk.VHD -match "https*://(\w+)"
        $osStorageAccount = $matches[1]

        $output += $vm.Name + "," +`
            $vm.Location + "," +`
            $vm.Properties.InstanceView.PrivateIpAddress + "," +`
            $vm.Properties.NetworkProfile.VirtualNetwork.Name + "," +`
            $vm.Properties.StorageProfile.OsDisk.OsType + "," +`
            $vmSize + "," +`
            $vmCores + "," +`
            $vmRAM + "," +`
            "1," + `
            "1," + `
            $vm.Properties.StorageProfile.DataDisks.Count + "," +`
            $vm.Properties.DomainName.Name + "," + `
            "," + `
            "," + `
            "," + `
            $osStorageAccount + "s," +`
            $diagnosticsStorageAccount + "," +`
            $endpoints + "," +`
            $vm.Properties.InstanceView.Status + "," +`
            $vm.Properties.InstanceView.PublicIpAddresses + "`n"
        }
        $output | Out-File -Encoding ascii $outputPath
}



Function FixSize ($size) {
    Switch ($size) {
        'Extra Small' {$size = 'Standard_A0'}
        'Small' {$size = 'Standard_A1'}
        'Medium' {$size = 'Standard_A2'}
        'Large' {$size = 'Standard_A3'}
        'Extra Large' {$size = 'Standard_A4'}
    }
    return $size
}


Function GetVmConfig($size) {
    $size = FixSize($size)
    $vmConfig = @{"Cores" = 0; "RAM" = 0}
    switch -Regex ($size) {
        "A0$" {$vmConfig = @{"Cores" = 1; "RAM" = 0.75}}
        "A1$" {$vmConfig = @{"Cores" = 1; "RAM" = 1.75}}
        "A2$" {$vmConfig = @{"Cores" = 2; "RAM" = 3.5}}
        "A3$" {$vmConfig = @{"Cores" = 4; "RAM" = 7}}
        "A4$" {$vmConfig = @{"Cores" = 8; "RAM" = 14}}
        "A5$" {$vmConfig = @{"Cores" = 2; "RAM" = 14}}
        "A6$" {$vmConfig = @{"Cores" = 4; "RAM" = 28}}
        "A7$" {$vmConfig = @{"Cores" = 8; "RAM" = 56}}
        "A8$" {$vmConfig = @{"Cores" = 8; "RAM" = 56}}
        "A9$" {$vmConfig = @{"Cores" = 16; "RAM" = 112}}
        "A10$" {$vmConfig = @{"Cores" = 8; "RAM" = 56}}
        "A11$" {$vmConfig = @{"Cores" = 16; "RAM" = 112}}
        "DS?1(_v2)?$" {$vmConfig = @{"Cores" = 1; "RAM" = 3.5}}
        "DS?2(_v2)?$" {$vmConfig = @{"Cores" = 2; "RAM" = 7}}
        "DS?3(_v2)?$" {$vmConfig = @{"Cores" = 4; "RAM" = 14}}
        "DS?4(_v2)?$" {$vmConfig = @{"Cores" = 8; "RAM" = 28}}
        "DS?5(_v2)?$" {$vmConfig = @{"Cores" = 16; "RAM" = 56}}
        "DS?11(_v2)?$" {$vmConfig = @{"Cores" = 2; "RAM" = 14}}
        "DS?12(_v2)?$" {$vmConfig = @{"Cores" = 4; "RAM" = 28}}
        "DS?13(_v2)?$" {$vmConfig = @{"Cores" = 8; "RAM" = 56}}
        "DS?14(_v2)?$" {$vmConfig = @{"Cores" = 16; "RAM" = 112}}
        "GS?1$" {$vmConfig = @{"Cores" = 2; "RAM" = 28}}
        "GS?2$" {$vmConfig = @{"Cores" = 4; "RAM" = 56}}
        "GS?3$" {$vmConfig = @{"Cores" = 8; "RAM" = 112}}
        "GS?4$" {$vmConfig = @{"Cores" = 16; "RAM" = 224}}
        "GS?5$" {$vmConfig = @{"Cores" = 32; "RAM" = 448}}
    }
    return $vmConfig
}



Function GetVip($properties) {
    $vip = ''
    $inputEndpoints = $properties.NetworkProfile.InputEndpoints
    if ($inputEndpoints.Count -gt 0) {
        $vip = $inputEndpoints[0].publicIpAddress
    }
    return $vip
}

Function GetEndpoints($properties) {
    $endpoints = ''
    $inputEndpoints = $properties.NetworkProfile.InputEndpoints
    if ($inputEndpoints.Count -gt 0) {
        $endpoints += $inputEndpoints.PublicPort + '  '
    }
    return $endpoints
}

Function GetDiagnosticsStorageAccount($properties) {
    $storageAccount = ''
    foreach ($extension in $properties.Extensions) {
        if ($extension.Extension -eq 'IaaSDiagnostics') {
            $storageAccount = $extension.Parameters.Public.StorageAccount
        }
    }
    return $storageAccount
}



$outputPathV1 = "c:\temp\Azure\Q2-VMv1.csv"
$outputPathV2 = "c:\temp\Azure\Q2-VMv2.csv"

Dump-VirtualMachinesV1($outputPathV1)
Dump-VirtualMachinesV2($outputPathV2)