[Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑

来源:互联网 发布:windows徽标键不能用 编辑:程序博客网 时间:2024/05/19 19:34

该脚本输出ARM模式下某个账号中所有订阅下的网络拓扑结构,包括虚拟网络地址空间,子网范围,子网内的虚拟机的基本信息等。


脚本如下:

$Cred = New-Object System.Management.Automation.PSCredential("XXXXXXXXXXXXX@XXXXXXXXXXXXXX.partner.onmschina.cn",(ConvertTo-SecureString "XXXXXXXXXXX" -AsPlainText -Force));$AzureRMCred = Get-Credential -Credential $Cred;Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $AzureRMCred;Function WriteToXMLOutput($str){    $OutputfilePath = $PSScriptRoot + "\Network_Topology.xml";    $str | Out-File $OutputfilePath -Append;}Function BuildLevelSpace($level){    $levelSpace = "  ";    $result = "";    for ($i = 1; $i -lt $level; $i++)    {        $result += $levelSpace;    }    return $result;}Function BuildSubscriptionsHead(){    return (BuildLevelSpace 1) + "<subscriptions>";}Function BuildSubscriptionsEnd(){    return (BuildLevelSpace 1) + "</subscriptions>";}Function BuildSubscriptionHead($subscriptionName){    return (BuildLevelSpace 2) + "<subscription name='$subscriptionName'>";}Function BuildSubscriptionEnd($subscriptionName){    return (BuildLevelSpace 2) + "</subscription>";}Function BuildVirtualNetworksHead(){    return (BuildLevelSpace 3) + "<virtualnetworks>";}Function BuildVirtualNetworksEnd(){    return (BuildLevelSpace 3) + "</virtualnetworks>";}Function BuildVirtualNetworkHead($name, $address, $location){    return (BuildLevelSpace 4) + "<virtualnetwork Name='$name' AddressSpace='$address' Location='$location'>";}Function BuildVirtualNetworkEnd(){    return (BuildLevelSpace 4) + "</virtualnetwork>";}Function BuildSubnetsHead(){    return (BuildLevelSpace 5) + "<subnets>";}Function BuildSubnetsEnd(){    return (BuildLevelSpace 5) + "</subnets>";}Function BuildSubnetHead($name, $address){    return (BuildLevelSpace 6) + "<subnet Name='$name' AddressRange='$address'>";}Function BuildSubnetEnd(){    return (BuildLevelSpace 6) + "</subnet>";}Function BuildVirtualMachinesHead(){    return (BuildLevelSpace 7) + "<virtualmachines>";}Function BuildVirtualMachinesEnd(){    return (BuildLevelSpace 7) + "</virtualmachines>";}Function BuildVirtualMachine($Name, $OSType, $Size, $IPAddress, $NicType){    return (BuildLevelSpace 4) + "<virtualmachine Name='$Name' OS='$OSType' Size='$Size' IPAddress='$IPAddress' NicType='$NicType'></virtualmachine>";}Function ListVNETTopology(){    $subscriptions = Get-AzureRmSubscription;    WriteToXMLOutput ((BuildLevelSpace 1) + "<?xml version='1.0'?>");    WriteToXMLOutput (BuildSubscriptionsHead);    # loop all the subscriptions    foreach($subscription in $subscriptions)    {        $subscriptionName = $subscription.SubscriptionName;        Select-AzureRmSubscription -SubscriptionName $subscriptionName;        WriteToXMLOutput (BuildSubscriptionHead $subscriptionName);        # initialize mappings        $VMDict = @{};            # key:vm.id      value:@{Name=vm.Name; OSType=VM.OSType; Size=VM.Size}        $vms = Get-AzureRmVM;        foreach($vm in $vms)        {            $VMDict.Add($vm.Id, @{Name=$vm.Name; OSType=$vm.StorageProfile.OsDisk.OsType; Size=$vm.HardwareProfile.VmSize;});        }        $NIC_VM_Map = @{};        # key:nic.id     value:vm.id        $SubnetDict = @{};        # key:subnet.id  value:@{NicId=nic.id; NicType=Nic.IPConfigurations.PrivateIPAllocationMethod; CIP=Nic.IPConfigurations.PrivateIpAddress}        $nics = Get-AzureRmNetworkInterface;        foreach($nic in $nics)        {            if($nic.VirtualMachine.Id -ne $NULL)            {                $NIC_VM_Map.Add($nic.Id, $nic.VirtualMachine.Id);                $subnetId = $nic.IpConfigurations[0].Subnet.Id;                if(!$SubnetDict.ContainsKey($subnetId))                {                    $SubnetDict[$subnetId] = New-Object System.Collections.ArrayList;                }                $SubnetDict[$subnetId].Add(@{NicId=$nic.Id; NicType=$nic.IpConfigurations[0].PrivateIpAllocationMethod; CIP=$nic.IpConfigurations[0].PrivateIpAddress;});            }        }        $vnets = Get-AzureRmVirtualNetwork;        if($vnets.Count -gt 0)        {            WriteToXMLOutput (BuildVirtualNetworksHead);            foreach($vnet in $vnets)            {                $vnetaddress = "";                foreach($prefix in $vnet.AddressSpace.AddressPrefixes)                {                    $vnetaddress += $prefix;                    $vnetaddress += " "                }                $vnetaddress.TrimEnd(' ');                WriteToXMLOutput (BuildVirtualNetworkHead $vnet.Name $vnetaddress $vnet.Location);                $subnets = $vnet.Subnets;                if($subnets.Count -gt 0)                {                    WriteToXMLOutput (BuildSubnetsHead);                    foreach($subnet in $subnets)                    {                        WriteToXMLOutput (BuildSubnetHead $subnet.Name $subnet.AddressPrefix);                        if($SubnetDict[$subnet.Id].Count -gt 0)                        {                            WriteToXMLOutput (BuildVirtualMachinesHead);                            foreach($nicProp in $SubnetDict[$subnet.Id])                            {                                $nicId = $nicProp["NicId"];                                $nicType = $nicProp["NicType"];                                $cip = $nicProp["CIP"];                                $vmId = $NIC_VM_Map[$nicId];                                $vmProp = $VMDict[$vmId];                                $vmName = $vmProp["Name"];                                $OSType = $vmProp["OSType"];                                $size = $vmProp["Size"];                                WriteToXMLOutput (BuildVirtualMachine $vmName $OSType $size $cip $nicType);                            }                            WriteToXMLOutput (BuildVirtualMachinesEnd);                        }                        WriteToXMLOutput (BuildSubnetEnd);                    }                    WriteToXMLOutput (BuildSubnetsEnd);                }                WriteToXMLOutput (BuildVirtualNetworkEnd);            }            WriteToXMLOutput (BuildVirtualNetworksEnd);        }        WriteToXMLOutput (BuildSubscriptionEnd);    }    WriteToXMLOutput (BuildSubscriptionsEnd);}ListVNETTopology


脚本输出:



54 0