我有一个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.Url
和value.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”的字符串
由于
答案 0 :(得分:1)
尝试按如下方式设置value属性:
($body.Targets | Where-Object { $_.attribute -eq "environment" } | Select-Object -First 1).values = @("VALUE");