PowerShell 如何实现VNet与对应Subnet的分行表格展示
脚本调整方案
原脚本输出不符合预期的核心原因是,单个VNet仅生成1条关联记录,该记录的Subnet字段直接存放了当前VNet下所有子网名称的数组。PowerShell在渲染表格时,遇到属性值为数组的情况会自动做折叠展示,最终形成{MgmtSubnet, Devsubnet...}的合并效果,无法拆分为多行。
具体调整方向:
- 删掉原脚本里冗余的重复查询:循环遍历VNet集合时,循环项本身已经携带当前VNet的全部属性,根本不需要再通过
Where-Object重新匹配找对象,属于多余操作,白白增加管道查询开销 - 增加内层遍历逻辑:对每个VNet下的
Subnets集合做二次循环,每一个子网单独生成一条独立的VNet-子网关联记录,确保两个字段是一对一的对应关系,不存在嵌套数组 - 简化对象创建逻辑:用
[PSCustomObject]的快速属性赋值写法替代原来New-Object+Add-Member的冗余写法,代码更短也更好维护
调整后的完整可运行脚本:
$allVnets = Get-AzVirtualNetwork $ResourceList = @() foreach ($vnet in $allVnets) { # 逐个遍历当前VNet下的子网,生成独立行记录 foreach ($subnet in $vnet.Subnets) { $record = [PSCustomObject]@{ Vnet = $vnet.Name Subnet = $subnet.Name } $ResourceList += $record } } # 用Format-Table输出自动适配列宽的规整表格 $ResourceList | Format-Table -AutoSize
调整后的输出会完全匹配预期:属于同一VNet的多个子网会单独占一行,不会再出现之前的数组折叠合并展示问题。
内容的提问来源于stack exchange,提问作者askwizard
相关产品推荐
相关产品推荐

