首页 > 解决方案 > 尝试使用 Powershell 列出 Azure 虚拟网络并导出到 CSV

问题描述

我正在尝试创建一个可以列出所有 Azure 虚拟网络并使用 Powershell 将其导出到 Csv 的脚本。

$day = Get-Date -Format " MMM-yyyy"
$path = "C:\Users\admin-vishal.singh\Desktop\Test\Report\"+ "$day-Vnet-Report.csv"
foreach ($Sub in $Subs) { 
    Select-AzSubscription -SubscriptionName $Sub.Name | Out-Null
    $resource_grps = Get-AzResourceGroup

    foreach ($resource_grp in $resource_grps) {

        $networks = Get-AzVirtualNetwork 
        foreach ($vnet in $networks)
        {
        $null = Get-AzVirtualNetwork |Select-Object SubscriptionName,ResourceGroupName,Name,AddressSpace,Subnets,SubnetAddressSpace,RouteTable | Export-CSV -Path $path -NoTypeInformation -Encoding ASCII  -Append
        
        }
    }
}

我无法以正确的格式检索数据并在检索数据时出错。下面是数据片段 在此处输入图像描述

很多值我无法检索,例如子网地址空间、路由表和路由。

标签: azurepowershellazure-virtual-networksubnet

解决方案


当我们调用export-csv命令时,使用 ToString() 方法将属性值转换为字符串。但是Get-AzVirtualNetwork是对象的结果,我们不能直接将值转换为字符串。有关更多详细信息,请参阅此处此处

因此,关于这个问题,我建议您使用所需信息创建一个自定义对象,然后将其保存到 csv 中。

例如


$vents =Get-AzVirtualNetwork| 
  Select-Object  SubscriptionName,ResourceGroupName,Name, @{
   label='AddressSpace'
   expression={$_.AddressSpace.AddressPrefix}}, @{
     label='SubnetName'
     expression={$_.Subnets.Name}
   }, @{
      label='SubnetAddressSpace'
     expression={$_.Subnets.AddressPrefix}
   }
 $vents | convertto-csv

在此处输入图像描述


推荐阅读