У меня есть такой ответ в формате json:
{
"properties": {
"basic": {
"nodes_table": [
{
"node": "node1.prod.local:80",
"state": "active",
"weight": 1
},
{
"node": "node2.prod.local:80",
"state": "disabled",
"weight": 1
},
{
"node": "node3.prod.local:80",
"state": "disabled",
"weight": 1
},
{
"node": "node4.prod.local:80",
"state": "disabled",
"weight": 1
},
{
"node": "node5.prod.local:80",
"state": "active",
"weight": 1
}
]
}
}
}
Что я пытаюсь сделать в моем сценарии PowerShell, так это выяснить, доступен ли данный узел (узлы) в таблице nodes_table, и получить их состояние. Например:
$nodes_table_hostnames = $GetNodesResponse.properties.basic.nodes_table.node
$nodes_table_status = $GetNodesResponse.properties.basic.nodes_table.state
if ($nodes_table_hostnames -contains "node1.prod.local:80" -and $nodes_table_status -eq "active")
{
Write-Output "Node matches and is Active"
}
Проблема: У меня возникла проблема с получением состояния «определенного» узла, поэтому я хочу проверить, находится ли «данный» узел в таблице и состояние этого узла активно / отключено. Как бы я сделал это в сценарии?
$Active = $GetNodesResponse.properties.basic.nodes_table |
Where {$_.Node -eq "node1.prod.local:80" -and $_.state -eq "active"}
If ($Active) {Write-Output "Node matches and is Active"}
Чтобы проверить наличие нескольких строк, используйте оператор -in
Where {$_.Node -in "node1.prod.local:80", "node5.prod.local:80" -and $_.state -eq "active"}
или вы можете использовать операторы -like
или -match
для сопоставления с шаблоном, как в:
Where {$_.Node -like "node[15].prod.local:80" -and $_.state -eq "active"}
Спасибо за ответ, Брюс! Ваше решение определенно работает.