powershell处理json配置文件的核心是convertfrom-json和convertto-json:前者用get-content -raw -encoding utf8解析本地json为pscustomobject,后者需指定-depth 100和-compress写回,并支持数组操作、错误捕获与验证。
powershell 处理 windows 环境下的 json 配置文件,核心是用好 convertfrom-json 和 convertto-json 这两个原生命令。它们不依赖第三方模块,开箱即用,特别适合修改 windows terminal、应用配置、api 请求体等常见场景。
读取并解析本地 JSON 配置文件
大多数 Windows 应用(如 Windows Terminal)的配置以 settings.json 形式存在,需先正确读取再解析:
- 用
Get-Content -Raw一次性读取完整内容,避免换行截断;不加-Raw会返回字符串数组,ConvertFrom-Json会报错 - 显式指定编码为
UTF8,尤其当 JSON 含中文或特殊符号时:Get-Content "C:\Users\Alice\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" -Raw -Encoding UTF8 | ConvertFrom-Json - 若文件带 BOM(字节顺序标记),可能引发解析失败;可用 Notepad++ 或 VS Code 保存为“UTF-8 无 BOM”格式
修改配置对象后写回 JSON 文件
解析后的对象是 PSCustomObject,可直接点号赋值修改,但写回时要注意深度和格式:
- 修改属性示例:将默认配置文件设为 PowerShell:
$cfg = Get-Content $path -Raw | ConvertFrom-Json<br>$cfg.defaultProfile = "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}" - 写入前必须加
-Depth 100(尤其含嵌套 profiles.list 或 colorSchemes):$cfg | ConvertTo-Json -Depth 100 | Set-Content $path -Encoding UTF8 - 加
-Compress可生成紧凑格式(单行),减少文件体积,也便于版本比对
安全处理嵌套结构与数组
Windows Terminal 的 profiles.list 是数组,colorSchemes 是字典,操作时容易出错:
- 访问数组第一项:
$cfg.profiles.list[0].name;新增 profile 要用+=或ForEach-Object构造新数组 - 向
profiles.list添加新配置项:$newProfile = [PSCustomObject]@{guid="{new-guid}"; name="My PowerShell"; commandline="pwsh.exe"}<br>$cfg.profiles.list += $newProfile - 检查键是否存在再赋值,避免覆盖:
if (-not $cfg.PSObject.Properties.Name.Contains('defaultProfile')) { $cfg | Add-Member -MemberType NoteProperty -Name defaultProfile -Value "{...}" }
错误预防与调试技巧
JSON 修改出错常导致应用启动失败,提前验证能省去反复重启排查时间:
- 解析前用
try/catch捕获语法错误:try { $cfg = Get-Content $path -Raw | ConvertFrom-Json } catch { Write-Error "JSON 格式错误:$($_.Exception.Message)"; return } - 写入后立即读回验证:
Get-Content $path -Raw | ConvertFrom-Json | Select-Object defaultProfile, @{n='ProfileCount';e={$_.profiles.list.Count}} - 对比原始与修改后差异:用
diff命令或 VS Code 的“比较文件”功能查看ConvertTo-Json -Compress输出是否符合预期











