PowerShell CSV转TXT脚本求助:无法生成目标格式输出
问题排查与修正脚本
原脚本存在的问题
Format-Table (ft)破坏数据对象:Import-Csv | ft会将CSV数据转换为格式化对象(而非原始自定义对象),导致无法正确访问Name/Tag/Description等属性。- 嵌套循环导致重复输出:
外层ForEach-Object已遍历所有服务器,内层又重复遍历$servers,会产生多倍重复的服务器条目。 - 字符串语法错误:
- 使用
{$Server.name}这种错误的变量展开方式,正确写法应为$Server.Name; - 预期输出使用
:分隔键值对,原脚本混用了=; - 缺少预期格式要求的缩进(4个空格);
Tag大小写与预期不符。
- 使用
修正后的PowerShell脚本
# 导入CSV文件,保留原始数据对象(不要用ft格式化) $servers = Import-Csv -Path C:\Temp\Servers.csv -UseCulture # 逐个处理服务器,生成目标格式内容 $output = $servers | ForEach-Object { # 服务器名称标题行 "$($_.Name):" # 缩进的属性行,严格匹配预期格式 " nodename: $($_.Name)" " description: $($_.Description)" " Tag: $($_.Tag)" " username: svc_act" " osFamily: windows" # 服务器间添加空行提升可读性(可选,若不需要可删除) "" } # 将结果写入目标文件,指定UTF-8编码避免乱码 $output | Out-File -FilePath C:\temp\Serverstagdesc.txt -Encoding UTF8
关键修正点说明
- 移除
| ft,保留Import-Csv返回的原始自定义对象,确保属性可正常访问; - 仅使用单层
ForEach-Object循环,每个服务器只处理一次; - 使用
$($_.Name)正确展开对象属性,添加4个空格缩进匹配预期格式; - 统一使用
:作为键值分隔符,修正Tag的大小写; - 添加
-Encoding UTF8保证输出文件编码一致性。
内容的提问来源于stack exchange,提问作者B Tran
相关产品推荐
相关产品推荐

