gpt4 book ai didi

arrays - 如何在Powershell中使用等于命令创建foreach循环

转载 作者:行者123 更新时间:2023-12-03 00:27:56 24 4
gpt4 key购买 nike

我开始学习PowerShell,并且一直在尝试创建foreach循环,以便如果JSON项之一的状态不是STARTED,它将使用其名称作为可执行命令中的变量来运行命令。这是我的json txt文件的样子;

{
"UNIT": {
"name": "AB",
"address": "fadasdaer",
"status": "MIA"
},
"UNIT": {
"name": "CD",
"address": "fadasdahsfaaer",
"status": "STARTED"
},
"UNIT": {
"name": "EF",
"address": "9afahegt",
"status": "DEAD"
}
}

我想做的就是从 json.txt中读取此内容,并使其运行一个foreach循环并执行一个将名称合并到命令中的命令。我目前有这样的东西,但是我的PowerShell理解有限,并且不起作用...
$JSON = json.txt
$check = $JSON | ConvertFrom-Json
$started=STARTED

foreach($unit in $check.unit){
if ($unit.status -notmatch $started) {
$name=$unit.name
executable.exe start $name
}

}

任何指导将不胜感激。

最佳答案

您的主要问题是JSON格式错误:它定义一个对象,然后多次定义其UNIT属性。

您应该将其定义为一个数组:请注意包含的顶层[...]和缺少UNIT属性:

[
{
"name": "AB",
"address": "fadasdaer",
"status": "MIA"
},
{
"name": "CD",
"address": "fadasdahsfaaer",
"status": "STARTED"
},
{
"name": "EF",
"address": "9afahegt",
"status": "DEAD"
}
]

JSON输入和其他语法问题均已纠正:
$JSON = 'json.txt'
$check = Get-Content -Raw $JSON | ConvertFrom-Json
$started = 'STARTED'

foreach ($unit in $check) {
if ($unit.status -notmatch $started) {
$name = $unit.name
executable.exe start $name
}
}

如果无法从源头修复JSON,则可以在将其传递给 ConvertFrom-Json之前自行进行转换:
$check = (Get-Content -Raw $JSON) `
-replace '\A\{', '[' `
-replace '\}\Z', ']' `
-replace '"UNIT": ' | ConvertFrom-JSON

关于arrays - 如何在Powershell中使用等于命令创建foreach循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51370616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com