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

PowerShell使用Export-CSV导出公司名称仅输出长度问题排查

问题原因

Export-Csv 导出时会将输入对象的公共属性映射为CSV列:属性名做表头,属性值做列内容。你直接把字符串类型的$customer.name传入管道时,字符串对象唯一的公共属性是Length(记录字符串长度),所以导出的全是长度数值,不会输出名称文本。
Write-Host能正常打印公司名,是因为它会把输入对象直接转成纯文本展示,和Export-Csv的对象属性处理逻辑完全不同,因此会出现控制台显示正常、导出结果异常的情况。

修复方案

不要直接向Export-Csv传递纯字符串值,需要构造包含目标字段的自定义对象再导出;另外不建议在循环中反复使用-Append参数逐行写文件,性能差还容易出现编码问题,推荐批量收集数据后一次性导出。

修正后的完整代码如下:

Connect-MsolService
$customers = Get-MsolPartnerContract -All
Write-Host "Found $($customers.Count) customers for $((Get-MsolCompanyInformation).displayname)."
$CSVpath = "C:\Temp\UserLicenseReport.csv"

# 自定义导出列名,统一输出文件,指定UTF8编码避免特殊字符乱码
$customers | Select-Object @{Name='公司名称';Expression={$_.Name}} |
    Export-Csv -Path $CSVpath -NoTypeInformation -Encoding UTF8

如果你确实需要保留循环逐行追加的逻辑,将循环内的导出语句替换为以下写法即可:

foreach ($customer in $customers) {
    Write-Host "$($customer.name)"
    [PSCustomObject]@{
        公司名称 = $customer.name
    } | Export-CSV -Path $CSVpath -Append -NoTypeInformation -Encoding UTF8
}

注意:执行脚本前请确认C:\Temp目录已存在,否则会报路径不存在的错误。

内容的提问来源于stack exchange,提问作者MartinSannel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:30:47