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

PowerShell向现有JSON添加属性执行报错问题咨询

问题根因定位
  • 版本兼容问题:ConvertFrom-Json的-Depth参数仅在PowerShell 7.0及以上版本提供,你当前使用的是Windows自带的PowerShell 5.1版本,不存在该参数,触发第一个参数绑定报错。实际上ConvertFrom-Json会自动完整解析JSON的所有层级,不需要手动指定深度,只有反向转换的ConvertTo-Json需要指定深度防止对象层级截断。
  • 连锁报错:前一步JSON转换执行失败后,$newProperty变量为空,后续提取属性名得到null值,传给Add-Member的-Name参数时触发空参数校验报错。
  • 逻辑冗余:你不需要重写整个OverrideValues节点做全量覆盖,直接定位到目标节点追加新属性即可,不会破坏原有已存在的配置项。
正确实现代码

直接运行以下代码即可实现需求,原有HostName配置会完整保留,新属性会追加到指定节点下:

# 读取源JSON文件,-Raw参数将内容读取为完整单字符串,避免转换异常
$json = Get-Content .\source.json -Raw

# 转换为PowerShell可操作的对象
$psObject = $json | ConvertFrom-Json

# 定位到需要修改的XXXX3Service下的OverrideValues节点
$targetOverrideNode = $psObject.Services.XXXX3Service.OverrideValues

# 逐个追加需要新增的属性
$targetOverrideNode | Add-Member -MemberType NoteProperty -Name "XXX 3 Service" -Value @{Enabled = $true} -Force
$targetOverrideNode | Add-Member -MemberType NoteProperty -Name "My Token" -Value @{Value = "1234567890"} -Force
$targetOverrideNode | Add-Member -MemberType NoteProperty -Name "Authority" -Value @{Value = "authority.com"} -Force
$targetOverrideNode | Add-Member -MemberType NoteProperty -Name "ThisSecret" -Value @{Value = "1234-1234-1234-1234"} -Force

# 转换回JSON,指定足够深度避免层级截断,指定UTF8编码防止乱码
$psObject | ConvertTo-Json -Depth 100 | Out-File "C:\temp\good.json" -Encoding utf8

注意:运行前请确认C:\temp目录存在,否则会触发目录不存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:15:40