[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
- [Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Azure Powershell输出ASM模式下某个账号中所有订阅下的虚拟网络拓扑
- [Azure]使用Powershell输出Azure订阅下所有虚拟机的ACL信息
- [Azure]ARM模式下使用Powershell找出订阅中没有被使用的vhd
- [Azure]使用Powershell获取Azure ARM模式订阅下的一些常用信息
- [Azure]ARM中使用Azure Powershell批量规划虚拟网络
- [Azure]使用Azure Powershell查看ARM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]使用Powershell统计ARM存储账号下容器中Blob的使用情况
- [Azure] 使用Azure Powershell脚本查看账号下所有订阅中的云服务公网IP地址绑定情况
- [Azure]获取当前订阅下所有ARM虚拟机的PublicIP
- [Azure]使用Azure Powershell查看ASM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]使用Powershell统计经典存储账号下容器中Blob的使用情况
- [Azure]使用Powershell获取ARM模式下可用的虚拟机平台映像信息
- [Azure]使用Powershell输出经典模式下全部云服务的VIP
- [Azure]使用Azure Powershell清理ASM模式下未使用的Disk和vhd
- [Azure]使用Powershell输出某台ARM虚拟机的NSG
- 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机
- [Azure][ARM]使用Azure powershell复制正在运行VM的VHD并新建虚拟机时可能遇到的HostName异常
- Android开发 Handler MessageQueue Looper消息循环原理分析
- 墨妈的教学笔记之《数据压缩》开播啦
- Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程
- OD的hit跟踪和run跟踪
- iOS开发-AFNetworking/NSURLSession异步处理
- [Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑
- qt学习之路九(QString、string和char*之间的转换)
- 回文素数
- 设计模式
- 比__autoload 更灵活的 spl_autoload_register 用法
- AOP的简单练习
- Android Butterknife Zelezny插件在Android Studio中的基本使用
- EasyPlayer实现直播抓拍
- Android的基本权限大全