You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 14:36:02