0

我正在尝试使用 powershell 导出 Azure 中所有订阅的所有网络安全组 (NSG) 规则。

  $sub = Get-AzSubscription
  $sub | foreach-object {
  $null = $PSItem | Select-AzSubscription
  $null = Get-AzNetworkSecurityGroup -OutVariable +nsg
  foreach ($obj in $nsg)
  {
   $obj.SecurityRules | Select-Object -OutVariable +rules @{ n = 'NSG Name'; e = {$obj.Name}},
   @{ n = 'ResourceGroupName'; e = {$obj.ResourceGroupName}},
   *
  }
   }


 $rules | export-csv C:\Users\ABC\Desktop\NSG.csv

但是,导出的 csv 文件有许多带有“System.Collections.Generic.List`1[System.String]”的字段,即使我可以看到 for 循环运行良好并且所有数据都已生成。

我对 powershell 很陌生,所以对此的任何帮助将不胜感激。

4

1 回答 1

0

如果您导出为 CSV 的对象Export-CsvConvertTo-Csv具有包含值集合(数组)的属性值,则这些值会通过它们的.ToString()方法进行字符串化,这会导致无用的表示。

假设您想在单个 CSV 列中表示数组值属性的所有值,要解决此问题,您必须为整个集合确定一个有意义的字符串表示形式,Select-Object并使用计算属性来实现它:

例如,您可以使用 -join 运算符创建以空格分隔的元素列表:

$obj.SecurityRules | Select-Object -OutVariable +rules @{ n = 'NSG Name'; e = {$obj.Name -join ' '}}, @{ n = 'ResourceGroupName'; e = {$obj.ResourceGroupName -join ' '}},*

有关更多详细信息,您可以参考此SO 线程

于 2019-12-11T07:56:59.667 回答