Azure子网的输出,带有连接到VNet、路由表和NSG的链接

Azure子网的输出,带有连接到VNet、路由表和NSG的链接,azure,powershell,azure-powershell,Azure,Powershell,Azure Powershell,我目前正在编写一个脚本,该脚本为我提供Azure订阅中每个子网的输出,以及到VNet、NSG和路由表的链接。脚本中当前缺少路由表名称,但我想现在集中精力修复NSG。 这就是我的脚本的样子: $VNets = Get-AzVirtualNetwork $NSG = Get-AzNetworkSecurityGroup $VNets | ForEach-Object { $VNettemp = $_ $result = $_.Subnets | Select-Object @{Lab

我目前正在编写一个脚本,该脚本为我提供Azure订阅中每个子网的输出,以及到VNet、NSG和路由表的链接。脚本中当前缺少路由表名称,但我想现在集中精力修复NSG。 这就是我的脚本的样子:

$VNets = Get-AzVirtualNetwork
$NSG = Get-AzNetworkSecurityGroup
$VNets | ForEach-Object {
    $VNettemp = $_
    $result = $_.Subnets | Select-Object @{Label="Subnet Name";Expression={$_.Name}},@{Label="Subnet";Expression={$_.AddressPrefix}}
    $_ | ForEach-Object {
        $result | Add-Member -Name "VNet Name" -Value $_.Name -MemberType NoteProperty
    }
    if ($_.Subnets.NetworksecurityGroup -ne "null"){
        $NSG | ForEach-Object{
            if ($VNettemp.Subnets.Id -contains $_.Subnets.Id ){
                $result | Add-Member -Name "NSG Name" -Value $_.name -MemberType NoteProperty -Force
            }
        }

    }
return $result
}
输出如下所示:

Subnet Name             Subnet        VNet Name       NSG Name           
-----------             ------        ---------       --------           
default-subnet          10.10.10.0/28 vnet-ine-test   test-nsg           
vnet-ine-test-snet-test 10.10.0.0/24  vnet-ine-test   test-nsg           
default                 10.0.0.0/24   vnet-chn-docker vnet-chn-docker-nsg
vnet-test-subnet        10.0.1.0/24   vnet-chn-docker vnet-chn-docker-nsg
所需输出如下所示,因为“默认子网”和“vnet测试子网”未连接NSG:

Subnet Name             Subnet        VNet Name       NSG Name
-----------             ------        ---------       --------
default-subnet          10.10.10.0/28 vnet-ine-test           
vnet-ine-test-snet-test 10.10.0.0/24  vnet-ine-test   test-nsg        
default                 10.0.0.0/24   vnet-chn-docker vnet-chn-docker-nsg        
vnet-test-subnet        10.0.1.0/24   vnet-chn-docker         
有人知道如何修复输出吗?我尝试使用else语句填充“NSG Name”的空值,但随后整个VNet的名称被完全取消。
谢谢你的帮助

关于这个问题,请参考以下脚本

$VNets = Get-AzVirtualNetwork
$NSG = Get-AzNetworkSecurityGroup
$resports=@()
$info = @{ "Subnet Name"=""; "Subnet"=""; "VNet Name"="" ; "NSG Name"=""}
foreach($VNet in $VNets){
   $info.'VNet Name'=$VNet.Name
   $info.'NSG Name'=$null
   Foreach($sub in $VNet.Subnets){
     $info.'Subnet Name' =$sub.Name
     $info.Subnet=$sub.AddressPrefix
     if($sub.NetworkSecurityGroup -ne $null){
         $NSG | ForEach-Object{
            if ($VNet.Subnets.Id -contains $_.Subnets.Id ){
                $info.'NSG Name'=$_.Name
            }
        }
     
     }
      $obj=New-Object PSObject -Property $info
      $resports +=$obj

   }

  
}

非常感谢。除了GatewaySubnet,它刚刚从上一个子网获取了NSG和路由表,一切都进行得非常完美。通过添加else语句修复了此问题:`else{$NSG | ForEach对象{if($VNet.Subnets.Id-contains${.Subnets.Id){$subnetInfo.NSG Name'=“”}}`有没有办法删除子网的花括号?找到了NSG或路由表信息的另一个修复方法:您必须将
$subnetInfo.'NSG Name'=$null
$subnetInfo.'Routing Table'=$null
放入
foreach($VNet.Subnets中的sub){