【问题标题】:Replace a value in a json using powershell使用powershell替换json中的值
【发布时间】:2018-05-25 03:21:19
【问题描述】:

我有一个包含以下内容的 json 文件 -

{
"IsEnabled": true,
"EngineConfiguration": {
    "PollInterval": "00:00:15",
    "Components": [{
        "Id": "Logs",
        "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
            "LogDirectoryPath": "C:\\log\\2018-05-25",
            "TimestampFormat": "yyyy-MM-dd HH:mm:ss",
            "Encoding": "UTF-8",
            "Filter": "",
            "CultureName": "en-US",
            "TimeZoneKind": "UTC",
            "LineCount": "1"
        }
    }]
  }
}

我想每天使用使用 powershell 的托管任务替换这个日期(在 LogDirectoryPath 中提到)。

有人可以提供最简单的方法来每天使用 powershell 替换它吗?

【问题讨论】:

  • 您可以使用(Get-Content yourfile) - replace '(?<="LogDirectoryPath": "C:\\\\log\\\\)(?<date>[\d-]+)(?=",)', (Get-Date -Format "yyyy-MM-dd") | Set-Content yourfile 创建计划任务,但您应该考虑使用像 TimestampFormat 这样的格式。每天更改 JSON 文件是一种代码味道。

标签: powershell replace


【解决方案1】:

此脚本将帮助您更新日志目录。

步骤:

  1. 获取json文件内容。
  2. 如果存在则更新属性值。 $JsonData.update | % {如果(...)
  3. 将内容保存在同一个文件中。

脚本:

$JsonData = Get-Content $JsonFilePath -raw | ConvertFrom-Json

$JsonData.update | % { if($JsonData.engineconfiguration.Components.Parameters.LogDirectoryPath)
                            {
                                $JsonData.engineconfiguration.Components.Parameters.LogDirectoryPath = "C:\log\$(Get-Date -Format 'yyyy-MM-dd')"
                            }
                        }

$JsonData | ConvertTo-Json -Depth 4  | set-content $JsonFilePath 

【讨论】:

  • 鉴于输入 JSON 代表一个单个对象,.update 指的是什么以及为什么需要ForEach-Object (%)?
【解决方案2】:

第一步是将内容转换为json:

$json = Convertfrom-json (get-content "\\path\To\Json\File.json")

然后根据需要编辑值:

$json.engineconfiguration.Components.Parameters.LogDirectoryPath = "C:\log\$(Get-Date -Format 'yyyy-MM-dd')"

然后写回文件:

ConvertTo-Json $json -Depth 4 | Out-File C:\ProgramData\Temp\test.txt -Force

【讨论】:

    【解决方案3】:

    我也遇到过同样的问题。我正在寻找更改以下 JSON 文件的记录

    {
    "SQS_QUEUE_URL":  "https://que-url.com/server1",
    "SQS_EVENTS_QUEUE_URL":  "https://events-server.com/server1/development_events",
    "REGION":  "region1",
    "BUCKET":  "test-bucket",
    "AE_WORK_PATH":  "C:\\workpath\\path1",
    "ENV":  "env"
    
    }
    

    最后,我设法找到了从 Powershell 生成 JSON 文件的最简单方法。

    $json = Get-Content "c:\users\bharat.gadade\desktop\test.json" | ConvertFrom-Json 
    $json.SQS_QUEUE_URL = "https://que-url.com/server2"
    $json.SQS_EVENTS_QUEUE_URL = "https://events-server.com/Server2/development_events"
    $json.REGION = "region1 "
    $json.BUCKET = "test-bucket"
    $json.AE_WORK_PATH = "C:\workpath\path1"
    $json.ENV = "env"
    $json | ConvertTo-Json | Out-File "c:\users\bharat.gadade\desktop\test.json"
    

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 2021-01-19
      • 2014-02-26
      • 2020-08-16
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多