【问题标题】:Powershell script to Insert multiple lines based on a pattern match基于模式匹配插入多行的 Powershell 脚本
【发布时间】:2021-02-12 16:41:02
【问题描述】:

我有一个 appsettings.json 文件,我正在尝试根据模式匹配添加以下行。我正在寻找字符串:“MockDocumentTypes”: 然后我想在powershell脚本中插入这些行。当我运行脚本时,唯一的变化是我的模式匹配被替换为空格。这是powershell脚本:

$File = "C:\tmp\appsettings.json"
$NewContent = Get-Content -Path $File |
    ForEach-Object {
        $_
        if ($_ -match ('^' + '`"MockDocumentTypes`":'))
        {
            '"From"`: `['
             "LoanStatement",
             "BillingStatement"
        }
    }
$NewContent | Out-File -FilePath $File -Encoding Default -Force

这是文件的一部分。

"DocumentConfiguration": {
    "BasePath": "https://url",
    "Timeout": "1000000"
    "MockDocumentTypes": {
  }, 
    

【问题讨论】:

  • 不要对 XML 使用正则表达式 - 将其解析为实际的 XML 文档,修改它,然后在完成后保存回磁盘。你可以分享示例 XML 吗?或者至少是一个包含MockDocumentTypes 字符串的标签/元素?
  • 你能分享更多的片段吗?这肯定看起来不像 XML,而是看起来像 JSON 文件。
  • 非常正确的 HAL9256。很好发现它是一个json文件。对困惑感到抱歉。我进行了适当的更新。

标签: powershell


【解决方案1】:

您可以使用 PowerShell 的 CovertFrom-Json cmdlet 解析基于 json 的设置文件 - 此时您可以修改生成的对象,然后使用 ConvertTo-Json 将其转回 JSON:

# In real life you'd just read the file with `Get-Content`
$original = @'
{
  "DocumentConfiguration": {
    "BasePath": "https://url",
    "Timeout": "1000000",
    "MockDocumentTypes": {
    }
  }    
}
'@ 

# Parse JSON 
$settingsObject = $original |ConvertFrom-Json

# Modify resulting object
$settingsObject.DocumentConfiguration.MockDocumentTypes = 
  [pscustomobject]@{
    From = @(
      'LoanStatement'
      'BillingStatement'
    )
  }

# Convert back to JSON and write back to file
$settingsObjects |ConvertTo-Json -Depth 5 | Set-Content appsettings.json

【讨论】:

  • 嗨 Mathias R. Jessen,我需要使用 get-content 读取文件吗?运行脚本时出现 Invalid JSON primitive 错误。
  • @ShellGames 抱歉,我直到现在才看到这条评论 - 您是否设法解决了阅读文件的问题?
  • 是的。不优雅,但是是的。为了让该部分立即工作。我有单独的文件。一个用于 dev/qa,另一个用于我们更高的环境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
相关资源
最近更新 更多