我对Powershell一点都不熟悉,只需要几个命令即可。我希望有人能帮助我。我有一个名为optionsConfig.json
的json文件,其内容如下:
{
"test1": ["options_size", "options_connection", "options_object"],
"test2":["options_customArgs", "options_noUDP", "options_noName"]
}
在我的Powershell文件中,到目前为止我只有一行,这是为了获取json文件的内容。
$rawData = Get-Content -Raw -Path "optionsConfig.json" | ConvertFrom-Json
我计划在系统上有一个名为test
的环境变量,其值将为test1
或test2
,然后,我将查看列表中的元素在json文件的关联值中。使用列表中的这些元素,我将假定它们也是环境变量,并且我想获取它们的值。 (在这里使用python进行列表理解将是完美的选择。)。我是python专家,所以我不太确定如何在powershell中显示此内容,而是说我做了env = getEnvironmentVariable(test)
,等于test1
。然后,我会说类似for i in $rawData.env
return getEnvironmentVariable(i)
我非常想要另一个列表或新的json对象,其中包含我们从原始json对象获得的假定环境变量的值。
有没有办法可以在Powershell中做到这一点?如果有人可以协助,那将会有很大帮助。如果我对任何内容不清楚,我深表歉意。谢谢
(编辑)我发现$rawData.Get-ChildItem Env:test
不起作用。是否有人写这样的东西以便从json文件中获取正确的列表?
另外设置$var1 = Get-ChildItem Env.tool
这样的新变量并执行$rawData.$test.value
也不起作用。
答案 0 :(得分:2)
# Sample values: make environment variable 'test' ($env:test)
# point to property 'test1'
$env:test = 'test1'
# Provide sample values for the environment-variable names listed
# in the 'test1' property.
$env:options_size = 'size1'
$env:options_connection = 'conn1'
$env:options_object = 'obj1'
# Read the JSON file into a custom object.
$configObj = Get-Content -Raw optionsConfig.json | ConvertFrom-Json
# Retrieve the environment variables whose
# names are listed in the $env:test property ('test1' in this example),
# as name-value pairs.
Get-Item -Path env:* -Include $configObj.$env:test
上面的代码产生了一个[System.Collections.DictionaryEntry]
实例数组,每个实例代表一个环境变量的名称和值:
Name Value
---- -----
options_connection conn1
options_object obj1
options_size size1
要将以上内容转换为JSON :
Get-Item -Path env:* -Include $configObj.$env:test |
Select-Object Name, Value | ConvertTo-Json
注意:看似多余的Select-Object
调用对于删除PowerShell在幕后添加的其他属性是必要的,否则它们将显示在结果JSON中。
如果要在生成的JSON中重命名属性,则无论如何都需要使用calculated properties来Select-Object
。
这将产生:
[
{
"Name": "options_connection",
"Value": "conn1"
},
{
"Name": "options_object",
"Value": "obj1"
},
{
"Name": "options_size",
"Value": "size1"
}
]
答案 1 :(得分:1)
我没看到问题,只需设置并使用$ENV:test
$rawdata = Get-Content .\optionsconfig.json | convertfrom-json
$Env:Test="test1"
$rawdata.$ENV:Test
$Env:Test="test2"
$rawdata.$ENV:Test
样本输出
options_size
options_connection
options_object
options_customArgs
options_noUDP
options_noName