convertto-json 将管道对象转换为 json 字符串,自动映射属性为字段、忽略方法;默认深度为2,需用 -depth 防截断,-compress 生成紧凑格式,-asarray 强制数组包装,保存文件需配合 out-file 或 set-content。
用 convertto-json 命令就能把管道里的对象转成 json 字符串,这是最直接、最常用的方法。
基本用法:直接转换并输出到控制台
PowerShell 会自动把对象的属性转为字段名,属性值转为字段值,方法会被忽略:
- Get-Date | ConvertTo-Json —— 把当前时间对象转成单行 JSON 字符串
- Get-Process -Id $PID | ConvertTo-Json —— 把当前 PowerShell 进程对象转成结构化 JSON
常用参数控制输出格式
默认情况下,嵌套层级过深时会截断,建议显式指定 -Depth;另外压缩或数组包装等效果靠参数开关实现:
- -Depth 10:防止深层嵌套对象被省略(例如自定义对象含多层属性)
- -Compress:去掉换行和缩进,生成紧凑单行 JSON
-
-AsArray:即使输入是单个对象,也强制包成数组形式(如
[{...}]) - -EnumsAsStrings:把枚举值转成字符串而非数字(提升可读性)
保存为 JSON 文件的两种方式
转换后的 JSON 是字符串,要存文件需配合输出命令:
- Get-Service | ConvertTo-Json -Depth 5 | Out-File services.json
- Get-Service | Export-Csv services.csv 不适用——Export-Csv 是 CSV 专用,不能导出 JSON;JSON 必须用 ConvertTo-Json + Out-File 或 Set-Content
- 推荐用 Set-Content -Path "data.json" -Value (Get-Service | ConvertTo-Json -Depth 5),更简洁且编码更可控
注意对象类型与兼容性
某些 .NET 类型在序列化时有行为变化:
- PowerShell 7.2+ 中,DateTime 和 String 的扩展类型信息不再写入 JSON,只保留原始值
- 包含方法、脚本块或循环引用的对象可能无法完整转换,建议先用 Select-Object 提取需要的属性
- 若需验证结果是否合法 JSON,可用 Test-Json 命令检查字符串有效性











