在PowerShell中以表格形式显示子网的内容

在PowerShell中以表格形式显示子网的内容,powershell,azure-powershell,Powershell,Azure Powershell,我正在尝试以以下格式显示PowerShell数据 Vnet Subnet ---- ------ AZRWUSVNET1 default Corpvnet MgmtSubnet Corpvnet Devsubnet Corpvnet QASubnet Corpvnet ProdSubnet 我试过下面的脚本 $a = Get-AzVirtualNetwork $b = $a | Select-Object Name,Subnets $Re

我正在尝试以以下格式显示PowerShell数据

Vnet        Subnet
----        ------
AZRWUSVNET1 default
Corpvnet    MgmtSubnet 
Corpvnet    Devsubnet
Corpvnet    QASubnet 
Corpvnet    ProdSubnet
我试过下面的脚本

$a = Get-AzVirtualNetwork
$b = $a | Select-Object Name,Subnets
$ResourceList = @()
foreach ($item in $b)
{
  $vnetname = ($b | Where-Object -Property Name -EQ ($item.Name))
  $subnet = $vnetname.Subnets.Name
  $vnetname = $item.Name
  $VMObject = New-Object PSObject
  $VMObject | Add-Member -MemberType NoteProperty -Name "Vnet" -Value $vnetname
  $VMObject | Add-Member -MemberType NoteProperty -Name "Subnet" -Value $subnet
  $ResourceList += $VMObject
}
$ResourceList
但我得到的数据格式如下


Vnet        Subnet
----        ------
AZRWUSVNET1 default
Corpvnet    {MgmtSubnet, Devsubnet, QASubnet, ProdSubnet…}


任何人都可以在此提供帮助。

通过使用
选择对象
提取和注释
子网
值,您可以显著简化代码:

Get-AzVirtualNetwork |Select-Object -Property @{Name='Vnet';E=
Name'} -ExpandProperty Subnets |Select-Object Vnet,@{Name='Subnet';Expression={$_.Name}}

如果坚持使用循环,则需要一个嵌套循环(因为各个子网嵌套在每个vnet中):


我刚试过这个,它就解决了

$vNets = Get-AzVirtualNetwork | Select-Object Name, Subnets
$ResourceList=@()

foreach($vNet in $vNets){
  foreach($subnet in $vNet.Subnets){
    #$subnatename=$vnet.subnets.Name
    $VMObject = New-Object PSObject
    $VMObject | Add-Member -MemberType NoteProperty -Name "Vnet" -Value $vNet.Name
    $VMObject | Add-Member -MemberType NoteProperty -Name "Subnet" -Value $subnet.Name
    $ResourceList += $VMObject
  }
}

$ResourceList
唯一的更改是$subnet.Name


感谢

感谢您提供的解决方案…我在第一个解决方案中运行了这两个解决方案。我收到此错误。无法处理属性,因为属性“Name”已存在。在使用嵌套For循环的解决方案中,这里是我获得的vnet子网-----AZRWUSVNET1 Microsoft.Azure.Commands.Network.Models.PSSubnet Corpvnet Microsoft.Azure.Commands.Network.Models.PSSubnet Corpvnet Microsoft.Azure.Commands.Network.Models.PSSubnet Corpvnet Microsoft.Azure.Commands.Network.Models.PSSubnetCorpvnet Microsoft.Azure.Commands.Network.Models.PSSubnet Corpvnet Microsoft.Azure.Commands.Network.Models。PSSubnet@askwizard我没有Azure租户可供测试,因此我假设
子网
是一个简单的字符串列表。更新了答案
$vNets = Get-AzVirtualNetwork | Select-Object Name, Subnets
$ResourceList=@()

foreach($vNet in $vNets){
  foreach($subnet in $vNet.Subnets){
    #$subnatename=$vnet.subnets.Name
    $VMObject = New-Object PSObject
    $VMObject | Add-Member -MemberType NoteProperty -Name "Vnet" -Value $vNet.Name
    $VMObject | Add-Member -MemberType NoteProperty -Name "Subnet" -Value $subnet.Name
    $ResourceList += $VMObject
  }
}

$ResourceList