我正在尝试使用 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:UsersABCDesktopNSG.csv
但是,导出的csv文件有许多带有"System.Collections.Generic.List'1[System.String]"的字段,即使我可以看到for循环运行良好并且所有数据都已生成。
我对powershell很陌生,所以任何这方面的帮助将不胜感激。
如果导出为 CSV 且具有Export-Csv
或ConvertTo-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线程。