Страница 1 из 1

Вопрос по конструкции в команде-скрипте

Добавлено: 05 фев 2018, 18:22
Sertik
Может кто-нибудь знает как можно получить результат из

/tool snmp-get address=192.168.0.1 oid=.1.3.6.1.2.1.1.6.0

в переменную (лучше) или на худой конец в файл ?

В консоли такая команда работает, по указанному адресу запрашиваются данные указанной OID и выводятся в консоль.

Но вот так работает (скрипт ошибки не выдает и выполняется до конца), но значение не присваивает (переменная а остается пустой):

:local a [/tool snmp-get address=192.168.0.1 oid=.1.3.6.1.2.1.1.6.0]

Также не прокатывает и с выводом в файл:

/file set "Name" contents=[:put [/tool snmp-get address=192.168.0.1 oid=.1.3.6.1.2.1.1.6.0]];

Пишется пустой файл.

Re: Вопрос по конструкции в команде-скрипте

Добавлено: 05 фев 2018, 18:41
Sertik
Вот, что ответили в Микротик-support:

Hello,

V dannij moment njetu takoj vozmozhnostji v skriptah.

Best regards,
Maris B.

--
MikroTik.com

:ne_vi_del:

Re: Вопрос по конструкции в команде-скрипте

Добавлено: 06 фев 2018, 12:24
Sertik
А очень жаль ! Можно было бы через OID из Микротика опрашивать и управлять многими устройствами в сети (кто поддерживает SNMP), а также операционками ...

Re: Вопрос по конструкции в команде-скрипте

Добавлено: 06 сен 2022, 14:47
Sertik
А оказывается можно (Автор Rextended): https://forum.mikrotik.com/viewtopic.ph ... 69#p876969

Код: Выделить всё

/file remove [find where name="testgetsnmp.txt"]
{
    :local jobid [:execute file=testgetsnmp.txt \
        script="/tool snmp-get tries=3 try-timeout=3s address=192.168.0.1 port=161 version=2c \
        community=public oid=1.3.6.1.4.1.14988.1.1.3.8.0"]
    :put "Waiting the end of process for file testgetsnmp.txt to be ready, max 20 seconds..."
    :global Gltesec 0
    :while (([:len [/sys script job find where .id=$jobid]] = 1) && ($Gltesec < 20)) do={
        :set Gltesec ($Gltesec + 1)
        :delay 1s
        :put "waiting... $Gltesec"
    }
    :put "Done. Elapsed Seconds: $Gltesec\r\n"
    :if ([:len [/file find where name="testgetsnmp.txt"]] = 1) do={
        :local filecontent [/file get [/file find where name="testgetsnmp.txt"] contents]
        :if ([:len $filecontent] = 83) do={:put "No result"; :return ""}
        :local oidstart ([:find $filecontent "\r\n" -1] + 2)
        :local oidend [:find $filecontent " " $oidstart]
        :local typestart ($oidstart + [:find $filecontent "TYPE" -1])
        :local typeend [:find $filecontent " " $typestart]
        :local valuestart ($oidstart + [:find $filecontent "VALUE" -1])
        :local valueend [:find $filecontent " " $valuestart]
        :local getoid [:pick $filecontent $oidstart $oidend]
        :local gettype [:pick $filecontent $typestart $typeend]
        :local getvalue [:pick $filecontent $valuestart $valueend]
        :put "The >$getoid< return >$gettype< value >$getvalue<"
    } else={
        :put "File not created."
    }
}

Re: Вопрос по конструкции в команде-скрипте

Добавлено: 17 апр 2023, 14:59
Sertik
теперь можно напрямую, без записи в файл:

# NEW in Ros 7.8

:put [/tool/snmp-get address=127.0.0.1 oid=1.3.6.1.4.1.14988.1.1.3.8.0 community=public as-value ]
# oid=1.3.6.1.4.1.14988.1.1.3.8.0;type=integer;value=517