使用pipecommands在Powershell中设置Json值

时间:2017-04-03 09:00:24

标签: json powershell

我有一个JSON文件,我正在读取PowerShell对象。我希望能够使用where命令和管道替换我找到的某些值。

[
   {
      "name":"name-1",
      "targets":[
         {
            "attribute":"Country",
            "opt":"In",
            "values":[
               "@country"
            ]
         },
         {
            "attribute":"Environment",
            "opt":"In",
            "values":[
               "@Environment"
            ]
         }
      ],
      "value":{
         "Url":"@url",
         "Version":"@version"
      }
   }
]

我特别希望将@url@version@country@environment替换为我在powershell中指定的值。

设置value.Urlvalue.Version似乎适用于:

$body=Get-Content -Raw -Path "$path\$filename.json" | ConvertFrom-Json
$body.value.Url=$applicationUrl;
$body.Value.Version = $applicationVersion;

但targets属性是一个列表,所以我必须找到使用where语句和管道。虽然我可以使用以下方法找到正确的元素:

$body.Targets | where { $_.attribute -eq "environment" } | Select -First 1 | Select-Object -Property values

我设置值的所有尝试都失败了,它始终保持原样。 Powershell正在解释像:

这样的对象
$body.Targets | where { $_.attribute -eq "environment" } | Select -First 1 | Select-Object -Property values


TypeName: Selected.System.Management.Automation.PSCustomObject

Name        MemberType   Definition                     
----        ----------   ----------                     
Equals      Method       bool Equals(System.Object obj) 
GetHashCode Method       int GetHashCode()              
GetType     Method       type GetType()                 
ToString    Method       string ToString()              
values      NoteProperty Object[] values=System.Object[]

如何在此对象上设置values属性?我只是希望它是一个像“qa”或“production”的字符串

由于

1 个答案:

答案 0 :(得分:1)

尝试按如下方式设置value属性:

($body.Targets | Where-Object { $_.attribute -eq "environment" } | Select-Object -First 1).values = @("VALUE");