使用Powershell将NSG规则导出到CSV文件

时间:2019-12-11 07:18:57

标签: azure powershell azure-nsg

我正在尝试使用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

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

我对Powershell非常陌生,因此在此方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果使用Export-CsvConvertTo-Csv导出为CSV的对象的属性值包含值的集合(数组),则这些值将通过其.ToString()方法进行字符串化,结果毫无帮助。

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

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

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

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