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

如何将含PowerShell对象表示法(PSON)的文本文件正确转换为CSV

问题根因

之前的代码运行不符合预期,核心原因有三点:

  • ConvertFrom-StringData返回的是哈希表对象,直接传入Export-Csv时,PowerShell会默认序列化哈希表的内置属性(就是你遇到的IsReadOnly、Keys、Count、Values这类),不会读取哈希表存储的业务键值对。
  • 逐行追加导出CSV的逻辑没有提前统一全量对象的属性集合,遇到属性顺序不一致的行就会出现列错位。
  • 原代码存在语法问题:文件路径没有加字符串引号、Get-Content拼写错误(写为Get-Contnet),也会导致执行异常。
解决方案

正确处理逻辑是先把所有行的PSON内容全部解析为标准PS自定义对象,收集全量对象后再一次性导出CSV,PowerShell会自动识别所有出现过的属性作为CSV列,自动对齐不存在错位问题。
可直接运行的代码如下:

# 配置输入输出路径
$inputFile = "PsonObjects.txt"
$CsvFileName = "CsvOutput.csv"

# 初始化集合存储所有解析完成的对象
$objectCollection = [System.Collections.Generic.List[PSObject]]::new()

# 逐行解析PSON内容
foreach($line in Get-Content -Path $inputFile){
    # 移除每行首尾的@{ }包裹符
    $cleanLine = $line.Trim() -replace '^@\{', '' -replace '\}$', ''
    # 解析键值对为哈希表
    $parsedHash = $cleanLine | ConvertFrom-StringData
    # 哈希表转为自定义PS对象,避免导出时读取哈希表内置属性
    $customObject = [PSCustomObject]$parsedHash
    $objectCollection.Add($customObject)
}

# 一次性导出为标准CSV文件
$objectCollection | Export-Csv -Path $CsvFileName -NoTypeInformation -Encoding UTF8
代码说明
  • 用[PSCustomObject]强转哈希表后,Export-Csv会直接把哈希表的键作为列名、对应值作为单元格内容,不会再输出哈希表的内置属性。
  • 全量对象收集完成后再统一导出,PowerShell会自动扫描所有对象的全部属性,即使某一行属性顺序和其他行不一致,也会按列名自动匹配填充,不会出现列错位。
  • 参数-NoTypeInformation会去掉CSV开头多余的PowerShell类型标识行,-Encoding UTF8避免非英文字符乱码。

注意:如果你的PSON内容中属性值本身包含;或=特殊字符,需要额外做转义拆分处理,上述代码完全适配你给出的示例数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:45:35