约 2069 字

约 10 分钟

#CSV 与 JSON

CSV 和 JSON 是常见的数据交换格式。PowerShell 内置了对应的导入导出命令,可以直接在对象与文本之间转换,无需手动拼接字符串。

#CSV

#导入

Import-Csv 把 CSV 的每一行转换为一个对象,列名成为属性名:

> @'
Name,Score
Tom,88
Jerry,99
'@ | Set-Content ./scores.csv

> $rows = Import-Csv -Path ./scores.csv
> $rows | Where-Object { [int]$_.Score -ge 90 }

常用参数:

  • -Path - CSV 文件路径。
  • -Delimiter - 指定分隔符,默认是逗号。
  • -Header - 当文件没有表头时,用该参数提供列名。
  • -Encoding - 指定文件编码。

注意 CSV 中的所有值都会被读取为字符串,参与数值比较或计算时应先转换类型。

#导出

Export-Csv 把对象转换为 CSV:

> Get-Process | Select-Object Id, ProcessName, CPU |
    Export-Csv -Path ./processes.csv -NoTypeInformation
  • -NoTypeInformation 不写入 #TYPE 行。PowerShell 7 默认已不写入类型信息,该参数主要用于兼容旧脚本。
  • -Delimiter、-Encoding 与导入时含义相同。
  • -Append 可以把结果追加到已有文件。
> $rows | Export-Csv -Path ./scores.csv -NoTypeInformation -Encoding utf8

#JSON

#转换为 JSON

ConvertTo-Json 把对象序列化为 JSON 字符串:

> $data = [pscustomobject]@{
    Name = 'Tom'
    Age  = 20
    Tags = @('a', 'b')
}

> $data | ConvertTo-Json
> $data | ConvertTo-Json -Depth 3 -Compress
  • -Depth 指定最大序列化深度,默认是 2。
  • -Compress 输出紧凑格式,不添加缩进和换行。

#从 JSON 转换

ConvertFrom-Json 把 JSON 字符串转换为对象:

> $json = '{"Name":"Tom","Age":20,"Tags":["a","b"]}'
> $obj = $json | ConvertFrom-Json
> $obj.Name
  • -Depth 指定最大解析深度。
  • -AsHashtable 返回哈希表而不是 PSCustomObject,便于按字符串键访问。
> $h = $json | ConvertFrom-Json -AsHashtable

#读写文件

> $data | ConvertTo-Json -Depth 5 | Set-Content ./data.json -Encoding utf8
> $loaded = Get-Content ./data.json -Raw | ConvertFrom-Json

读取 JSON 文件时建议使用 Get-Content -Raw,避免逐行读取后再拼接。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2