PowerShell Export-CSV导出首行Hash列显示System.Object[]问题
问题分析与解决
问题原因
你的脚本存在变量赋值顺序错误:调用decoder.exe时,$guid变量还未从当前CSV行获取值,第一次循环时$guid处于未定义状态,导致解码工具输出异常(可能是多行错误信息或空内容),最终$newhash变成数组类型,导出CSV时就会显示System.Object[]。
修正后的脚本
$csvin = "c:\temp\hash\testinput.csv" $csvout = "C:\temp\hash\TEST_output.csv" $output = Import-Csv -Path $csvin | ForEach-Object { # 先提取当前行的所有字段值 $guid = $_.guid $host = $_.host $volumeuid = $_.volumeuid # 调用解码工具,将输出转为单一字符串避免数组 $hash = C:\temp\hash\decoder.exe -u $guid | Out-String # 处理哈希值并去除多余换行符 $newhash = ($hash -replace '.*(.{4})','$1').Trim() [PSCustomObject]@{ Node_Name = $host Volumeuid = $volumeuid Hash = $newhash Guid = $guid } } $output | Export-Csv $csvout -NoTypeInformation
关键调整说明
- 调整变量顺序:必须先从当前CSV行提取
$guid,再传给解码工具,确保每次调用都用正确的行数据。 - 用
Out-String处理工具输出:避免工具返回多行内容时$hash成为数组,导致后续正则替换后仍为数组类型。 - 移除
-Append参数:$output已经包含所有处理后的行数据,直接导出即可,无需逐行追加。
内容的提问来源于stack exchange,提问作者dbutts
相关产品推荐
相关产品推荐

