@eskotov

Как Правильно наполнить массив?

Доброго времени суток!

Вопрос больше к синтаксису и правильности написания кода.

Так вот есть zabbix для проверки состояния VPN
На клиенте WIN через SNMP получаем имя и сосотояние для этого был написан скрипт
<#


    
    {"data":[{"{#VPN.NAME}":"vpn_roes","{#VPN.NAME.STATUS}":1}]

#>

function Make-LLD () {
    

 For ($i=1; $i -le 99; $i++){

  $VPNName =  Get-SnmpData -IP 192.168.103.1 -Community public -OID 1.3.6.1.4.1.890.1.6.22.2.4.1.2.+$i | select -Expand Data
  $VPNStatus = Get-SnmpData -IP 192.168.103.1 -Community public -OID 1.3.6.1.4.1.890.1.6.22.2.4.1.5.+$i | select -Expand Data   
  if ($VPNName -eq 'NoSuchInstance'){Break}
  $vpns += @{Name = "{#VPN.NAME}"; e={$VPNName}},
           @{Name = "{#VPN.NAME.STATUS}"; e={$VPNStatus}}
 }
    return ConvertTo-Json @{"data" = [array]$vpns} -Compress
    }

 Write-Host $(Make-LLD)


после выполнения которого должна быть сгенерированна такая строка
{"data":[{"{#VPN.NAME}":"vpn_roes","{#VPN.NAME.STATUS}":1}]


но как то с синтаксисом у мены очень плохо и таблица ненаполняется

Вопрос заключается в правильности написания синтаксиса

Заранее все примного благодарен
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
У вас не хватает начального присвоения $vpns=@()
но истинный powershell way выглядит примерно так:
function Make-LLD () {
 For ($i=1; $i -le 3; $i++){
  $VPNName =  ...
  $VPNStatus = 
  if ($VPNName -eq 'NoSuchInstance'){Break}
  @{'#VPN.NAME' = $VPNName; '#VPN.NAME.STATUS' = $VPNStatus}
}
   
}
$vpns = Make-LLD
$result = ConvertTo-Json @{"data" = [array]$vpns} -Compress
 Write-Host $result

То есть функция возвращает данные через output, а конвертируются в другой формат они уже снаружи
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы