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

PowerShell CSV转TXT脚本求助:无法生成目标格式输出

问题排查与修正脚本

原脚本存在的问题

  1. Format-Table (ft)破坏数据对象:
    Import-Csv | ft会将CSV数据转换为格式化对象(而非原始自定义对象),导致无法正确访问Name/Tag/Description等属性。
  2. 嵌套循环导致重复输出:
    外层ForEach-Object已遍历所有服务器,内层又重复遍历$servers,会产生多倍重复的服务器条目。
  3. 字符串语法错误:
    • 使用{$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:10:50