对列表使用for循环,并将元素设置为环境变量,然后获取值



我对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的环境变量,该变量的值为test1test2,然后,我将查看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也没有效果。

# 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

To将以上内容转换为JSON

Get-Item -Path env:* -Include $configObj.$env:test |
Select-Object Name, Value | ConvertTo-Json

注意:看似多余的Select-Object调用对于去除PowerShell在后台添加的其他属性是必要的,否则这些属性将显示在生成的JSON中
如果您想重命名结果JSON中的属性,那么无论如何都需要Select-Object,使用计算的属性。

这产生:

[
{
"Name": "options_connection",
"Value": "conn1"
},
{
"Name": "options_object",
"Value": "obj1"
},
{
"Name": "options_size",
"Value": "size1"
}
]

我认为没有问题,只需设置并使用$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

最新更新