为什么PSCustomObject配合Export-Csv使用时仅导出最后一个对象?
问题根因
你当前代码的核心问题是$outputForCsv变量初始化错误,你将其初始化为了空字符串而非对象数组,导致后续的+=操作执行的是字符串拼接逻辑,而非向集合中追加自定义对象,最终传入Export-CSV的不是符合要求的结构化对象集合,因此只能导出异常的最后一条结果。
修正方案
- 修正变量初始化:将
$outputForCsv = ""替换为$outputForCsv = @(),@()是PowerShell中声明空数组的语法,后续+=操作就会往数组中追加PSCustomObject对象 - (可选优化)你已经通过
Get-AzWebApp -ResourceGroupName $rgName获取了当前资源组下所有WebApp的完整配置,不需要在嵌套循环中再次调用Get-AzWebApp查询单个站点配置,可减少API请求提高执行效率
修正后完整代码
# 初始化为空数组而非空字符串 $outputForCsv = @() foreach ($rg in $resourceGroups) { $rgName = $rg.ResourceGroupName $webAppsInRg = Get-AzWebApp -ResourceGroupName $rgName foreach($webApp in $webAppsInRg){ $tls = $webApp.SiteConfig.MinTlsVersion $http20Enabled = $webApp.SiteConfig.Http20Enabled $outputForCsv += [PSCustomObject]@{ ResourceGroup = $rgName WebAppName = $webApp.Name MinTlsVersion = $tls Http20Enabled = $http20Enabled } } } $outputForCsv | Export-Csv "data.csv" -Delimiter ";" -NoTypeInformation
逻辑说明
修正后$outputForCsv是PSCustomObject的数组,Export-CSV会自动遍历数组中每一个对象,将对象的属性作为CSV的列、属性值作为行内容导出,即可得到所有WebApp的配置信息。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

