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

Displaying the content of Subnet in a form of table in PowerShell

我正在尝试以下列格式显示 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…}

任何人都可以在这里帮忙。

您可以通过使用 Select-Object 来提取和注释 Subnets 值来显着简化您的代码:

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){
    $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

我刚试了这个,它解决了

$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

谢谢