在 linux Powershell 脚本中将 JSON 对象设置为变量

Setting up a JSON object as a variable in a linux Powershell script

我目前正在将键值变量列表从 octopus 发送到我的项目到我的提示中。这些是通过下面的代码在我的环境中读取和设置的。

$testKeys = $OctopusParameters.keys | Where-Object {$_ -like "test.env.*"}
ForEach ($key in $testKeys)
{
    $value = $OctopusParameters[$key]
    $name = $key.subString(9) # remove test.env prefix
    $kubectlArgs += "--env=`"$name=$value`""
}

本次回归如下:

> --env="ASPNETCORE_ENVIRONMENT=integration" 
> --env="ConnectionStrings__MongoDB=my mongo connectgion string" 
> --env="ServiceConfiguration__MyJSONObjectConfiguration=[ {'MyID': 23, 'URL': 'http://google.com/', 'User': 'MyUser',
> 'Password': 'test', 'Domain': 'MyDomain', 'Key': 'myKey'} ]"

正如您所看到的,当它是一对一的,key = string value 时,这是完美的。问题是对于 serviceConfiguration,我传入了一个 JSON 对象。

我的代码正在获取我需要的值,就像这样

"ServiceConfiguration:MyJSONObjectConfiguration:0"

如何配置我的 PS1 脚本以将 serviceConfiguration 视为 JSON 对象而不是字符串?有可能吗?

我不确定您是否提供了足够的信息来完全解决您的问题。一种可能性是,如果值以 '[' 开头,则视为 JSON 并使用 CovertFrom-Json.

类似于:

"[ {'MyID': 23, 'URL': 'http://google.com/', 'User': 'MyUser', 'Password': 'test', 'Domain': 'MyDomain', 'Key': 'myKey'} ]" | ConvertFrom-Json

它给出了一个像这样的对象:

MyID     : 23
URL      : http://google.com/
User     : MyUser
Password : test
Domain   : MyDomain
Key      : myKey