在使用powershell时,请原谅我的无能。我不是Windows真正的家伙,我发现自己处于困境。我需要做的是使用一个名为optionsConfig.json
的json配置文件,该文件包含字典并基于我拥有的任何键,我假设列表中的元素(该键的值)是系统上的环境变量,我需要找到他们的价值观。这是配置内容。
{"test1": ["options_size", "options_connection", "options_object"],
"test2":["options_customArgs", "options_noUDP", "options_noName"]}
在这个例子中,我会说,
$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'
我知道我将在系统上有一个名为test
的环境变量,该变量的值将是json对象中的某个键。这是我到目前为止所拥有的。
# Read the JSON file into a custom object.
$configObj = Get-Content -Raw C:\TestWare\carstenSample\optionsConfig.json |
ConvertFrom-Json
# Retrieve the environment variables whose
# names are listed in the $env:test property
# as name-value pairs.
Get-Item -Path env:* -Include $configObj.$env:testTool
此外,此代码还将环境变量转换为Json,但格式不理想
Get-Item -Path env:* -Include $configObj.$env:testTool |
Select-Object Name, Value | ConvertTo-Json
这是输出
[
{
"Name": "options_connection",
"Value": "conn1"
},
{
"Name": "options_object",
"Value": "obj1"
},
{
"Name": "options_size",
"Value": "size1"
}
]
当我可以修改Json时是否存在一种方法,或者将这些环境变量转换为json的另一种方法,以便我的json对象看起来像这样?任何帮助,将不胜感激。谢谢
{
"options_size": "size1",
"options_connection": "conn1",
"options_object": "obj1"
}
答案 0 :(得分:3)
我设法将您的示例转换为自测一。结果如下:
#your options
$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'
#your key in configuration
$env:testTool = "test1"
#your configuration (in memory to simplify)
$configObj = '{"test1": ["options_size", "options_connection", "options_object"],
"test2":["options_customArgs", "options_noUDP", "options_noName"]}' | ConvertFrom-Json
#convert object to hashtable
Get-Item -Path env:* -Include $configObj.$env:testTool |
% {$hash = @{}} {$hash[$_.Name]=$_.Value} {$hash} | ConvertTo-Json
返回格式正确的JSON:
{
"options_size": "size1",
"options_object": "obj1",
"options_connection": "conn1"
}