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

PowerShell修改JSON节点值时文件被清空的问题求助

问题修复方案

原脚本存在几个关键错误,导致修改失败甚至清空JSON文件,下面是修正后的完整代码及错误说明:

修正后的PowerShell脚本

$TestPath = '.\test.json'
[bool]$TP = Test-Path -Path $TestPath -PathType Leaf
IF ($TP)
{
    # 读取并解析JSON文件,$Content为解析后的对象
    $Content = Get-Content $TestPath | ConvertFrom-Json 
    # 直接获取Config节点下的first值,无需转数组
    $FirstOpen = $Content.Config.first
    # 匹配JSON里的字符串值"$True"
    if ($FirstOpen -eq '$True')
    {
        Write-Warning "Show disclaimer !"
        # 修改$Content对象的属性,这才会影响后续序列化内容
        $Content.Config.first = '$False'
        # 将修改后的对象重新序列化为JSON并写入文件
        $Content | ConvertTo-Json -Depth 10 | Set-Content $TestPath -Encoding utf-8
    }
    ELSE
    {
        Write-Host "This file has already been opened for the first time !"
    }
}
ELSE
{
    Write-Host "The config file not exist.🛑"
    Start-Sleep -s 5
    exit
}
pause

原脚本错误说明

  • 未定义$Data变量:原脚本使用$Data.Config.First,但从未定义$Data,应替换为解析JSON后的$Content对象。
  • $FirstOpen定义冗余:@($Data.Config.First)把值转成数组完全没必要,直接取$Content.Config.first即可。
  • 修改对象方式错误:原代码试图修改$FirstOpen的属性,但$FirstOpen只是字符串值的副本,修改它不会影响原JSON对象。必须直接修改$Content对象的属性,后续序列化时才会写入修改后的内容。
  • 判断条件大小写不匹配:JSON里的first值是"$True",原脚本判断-eq '$true'(小写)会匹配失败,需改成'$True'或用不区分大小写的-ieq '$true'。
  • 序列化深度隐患:ConvertTo-Json默认深度为2,添加-Depth 10可避免嵌套层级较深时的内容截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:17