如何用PowerShell修改Windows Terminal JSON配置文件设置默认字体?
修复Windows Terminal默认配置字体的PowerShell JSON编辑问题
如果你的PowerShell代码生成了无效JSON,大概率是没处理嵌套结构的创建,或者序列化时深度不够导致截断。以下是正确的实现步骤和代码:
问题根源
默认的settings.json里profiles.defaults下没有font节点,直接给font.face赋值会报错;另外ConvertTo-Json默认深度是2,嵌套层级超过会被强制转为字符串,破坏JSON结构。
正确实现代码
# 定位Windows Terminal配置文件路径 $settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" # 读取配置并转为PowerShell对象 $settings = Get-Content $settingsPath -Raw | ConvertFrom-Json # 检查是否存在font节点,不存在则创建 if (-not $settings.profiles.defaults.PSObject.Properties['font']) { $settings.profiles.defaults | Add-Member -MemberType NoteProperty -Name 'font' -Value ([PSCustomObject]@{ face = "Consolas" # 替换成你需要的字体名称,比如"JetBrains Mono" # 可选:添加字号、粗细等其他配置 # size = 12 # weight = "normal" }) } else { # 已存在font节点时直接修改字体 $settings.profiles.defaults.font.face = "Consolas" } # 序列化回JSON,指定深度避免嵌套结构被截断,保持格式缩进 $settings | ConvertTo-Json -Depth 10 -Indent 2 | Set-Content $settingsPath -Encoding UTF8
关键注意事项
- 必须先判断
font节点是否存在,不存在要先创建嵌套的PSCustomObject,不能直接给font.face赋值 ConvertTo-Json一定要加-Depth参数(建议设为10),否则多层嵌套的配置会被转为字符串,导致JSON无效- 写入文件时用
-Encoding UTF8,避免乱码问题
内容的提问来源于stack exchange,提问作者scribe
相关产品推荐
相关产品推荐

