PowerShell中$report_groups终端显示正常但Export-CSV输出数值问题
问题原因
System.Collections.ArrayList的Add()方法会返回新元素插入的索引值,你没有接收这个返回值,导致索引数值会被自动追加到$report_groups数组中,数组内容会混入多余的数值。Export-Csv是针对对象的属性进行序列化导出,你当前$report_groups中存储的是纯字符串,纯字符串的默认公开属性是Length(字符串长度),所以导出后只会显示每个字符串的长度数值,不会显示字符串本身内容。
修复方案
调整后的完整代码如下:
$get_AD_Groups = Get-ADGroup -Filter '*' | Select-Object Name $report_groups = New-Object -TypeName System.Collections.ArrayList foreach ($item in $get_AD_Groups) { $get_users = $item.Name | Get-ADGroupMember | Select-Object Name $disabled_user = 0 foreach ($user in $get_users) { $status = $user.Name | Get-ADUser -ErrorAction SilentlyContinue if(($status.ObjectClass -eq 'user') -and ($status.Enabled -ne 'True')) { $disabled_user++ } } if ($get_users.Count -eq $disabled_user) { # 加[void]吞掉Add方法返回的索引值,避免多余数值混入数组 [void]$report_groups.Add($item.Name) } } # 把纯字符串转为带命名属性的自定义对象后再导出CSV $report_groups | ForEach-Object { [PSCustomObject]@{ AD组名称 = $_ } } | Export-Csv -Path "..\report.csv" -NoTypeInformation -Force -Delimiter ";"
如果数据量不大,也可以用普通数组替代ArrayList简化写法,不用处理返回值:
将$report_groups = New-Object -TypeName System.Collections.ArrayList替换为$report_groups = @(),添加元素的语句替换为$report_groups += $item.Name即可。
内容的提问来源于stack exchange,提问作者iAlucard
相关产品推荐
相关产品推荐

