我正在尝试使用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非常陌生,因此在此方面的任何帮助将不胜感激。
答案 0 :(得分:0)
如果使用Export-Csv
或ConvertTo-Csv
导出为CSV的对象的属性值包含值的集合(数组),则这些值将通过其.ToString()
方法进行字符串化,结果毫无帮助。
假设您要在单个CSV列中表示数组值属性的所有值,要解决此问题,您必须为整个集合确定一个有意义的字符串表示形式并实现它将Select-Object
与calculated property一起使用:
例如,您可以使用-join运算符创建以空格分隔的元素列表:
$obj.SecurityRules | Select-Object -OutVariable +rules @{ n = 'NSG Name'; e = {$obj.Name -join ' '}}, @{ n = 'ResourceGroupName'; e = {$obj.ResourceGroupName -join ' '}},*
有关更多详细信息,您可以参考此SO thread。