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

Вывод списка sstp подключений

Добавлено: 27 апр 2020, 18:24
sektor1100
Всем привет!
При вводе команды /ppp active print мы получаем вывод состоящий из нескольких столбцов таких как NAME, SERVICE, Address и тд. Может ли микротик сделать вывод например только имен?
Используя команду :put [/ppp active get [find name=user1] name ] я получу вывод одной строкой user1, а теперь, как сделать так чтобы вышел список абсолютно всех пользователей и может ли микротик так сделать вообще?
При попытке ввода такой команды :put [/ppp active get [find name!=all] name ] (где ALL это не существующее имя) получаю ошибку: invalid internal item number

Re: Вывод списка sstp подключений

Добавлено: 27 апр 2020, 19:42
podarok66
Через foreach всё прекрасно выводится. Вопрос, зачем это нужно?

Re: Вывод списка sstp подключений

Добавлено: 27 апр 2020, 22:33
sektor1100
podarok66 писал(а): 27 апр 2020, 19:42 Через foreach всё прекрасно выводится. Вопрос, зачем это нужно?
Нужно это для того чтобы проинформировать пользователей которые подключаются к микроту по sstp/pptp о том что их VPN подключение настроенное на домашних ПК скоро перестанет работать и чтобы они следовали некой инструкции. Они авторизуются через Radius сервер, учетки берутся из АД. В общем вытащив список имен мне будет достаточно просто прилепить к ним @company.com и я получу их почтовые адреса.
На микроте в данный момент +- 400 активных клиентов.

Я был уверен что при помощи функции GET я без проблем вытащу весь список, но я так и не понял почему указав конкретное имя команда срабатывает, а если указываю "вывести всех", то выпадает ошибка....или это баг микрота?

Re: Вывод списка sstp подключений

Добавлено: 28 апр 2020, 12:14
podarok66
sektor1100 писал(а): 27 апр 2020, 22:33 если указываю "вывести всех", то выпадает ошибка
Нет, ваша конструкция find name!=all читается - найти имя не равное всем. В RouterOs такое не прокатит. Слишком урезанная командная строка. Поэтому foreach. В итоге после цикла будет список имён. У меня нет сейчас такой возможности проверить, но в первом приближении будет что-то типа

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

:foreach r in=[ppp active find name!=""] do={:put [ppp active get $r name]}
Конечно, область работы скрипта не стоит описывать таким выражением, лучше зацепится за что-то другое. Но, как я уже говорил, не на чем это проверить. Уже в теле цикла в принципе всё нормально. Естественно, вместо put лучше загонять имена в переменную, либо сразу обрабатывать как нужно. Но раз вы там такое количество обслуживаете, думаю что там дальше, сообразите.

Re: Вывод списка sstp подключений

Добавлено: 28 апр 2020, 23:05
sektor1100
podarok66 писал(а): 28 апр 2020, 12:14
sektor1100 писал(а): 27 апр 2020, 22:33 если указываю "вывести всех", то выпадает ошибка
Нет, ваша конструкция find name!=all читается - найти имя не равное всем. В RouterOs такое не прокатит. Слишком урезанная командная строка. Поэтому foreach. В итоге после цикла будет список имён. У меня нет сейчас такой возможности проверить, но в первом приближении будет что-то типа

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

:foreach r in=[ppp active find name!=""] do={:put [ppp active get $r name]}
Конечно, область работы скрипта не стоит описывать таким выражением, лучше зацепится за что-то другое. Но, как я уже говорил, не на чем это проверить. Уже в теле цикла в принципе всё нормально. Естественно, вместо put лучше загонять имена в переменную, либо сразу обрабатывать как нужно. Но раз вы там такое количество обслуживаете, думаю что там дальше, сообразите.
Благодарю за развернутый ответ. Завтра попробую ваш совет использовать данный цикл. На данный момент я просто написал не большой скрипт на питоне и выдернул все учетки тем самым решив свою проблему )))

Re: Вывод списка sstp подключений

Добавлено: 29 апр 2020, 10:56
podarok66
sektor1100 писал(а): 28 апр 2020, 23:05 На данный момент я просто написал не большой скрипт на питоне и выдернул все учетки тем самым решив свою проблему )))
Ну так это же отлично. Не важно, через какой переулок добираться, главное попасть домой)))