Обнаружена блокировка рекламы: Наш сайт существует благодаря показу онлайн-рекламы нашим посетителям. Пожалуйста, подумайте о поддержке нас, отключив блокировщик рекламы на нашем веб-сайте.
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Делюсь как идеей маленьким скриптом-установщиком. Может запускать скрипты из списка и устанавливать функции из скриптов. Список заполните сами своими данными. Можно дополнить скрипт возможностями установки скриптов из файлов, с других роутеров по SSH и другими возможностями.
#------------------------------------------------------------
# Functions & Scripts Auto Setup (FaSAS)
# by Sertik 04/03/2023
#------------------------------------------------------------
# логика работы:
# скрипт ищет в ключевом массиве arrayComUser функции и скрипты пользователя
# если элемент массива не имеет значения (ключ есть, значения нет), то данный
# элемент считается скриптом репозитория и выполняется
# если же элемент имеет ключ и значение, то ключ считается именем функции, лежащей в скрипте
# с именем значения элемента. Производится запуск этого скрипта для установки функции в окружение
# сама функция не выполняется, имена установленных скриптом функций накапливаются в
# глобальном массиве funcList для последующего пользования
# list users scripts and functions:
:local arrayComUser {\
"CalcDay"="";
"scriptERROR"="";
"FuncAS"="FuncAs+";
"funcERROR"="mama";
"FuncPassGen"="Func_PassGen";
"SSHsms"="!_SSH_sendSMS"
}
# -- > work part
:log info ""
:log warning "Function & scripts auto Setup"
:log error "========================="
:log info ""
:global funcList [:toarray ""]
:local calc
:local funcerror
:local scripterror
:foreach key,val in=$arrayComUser do={
:if (([:len [/system script environment find $key]]=0) && ($val!="")) do={
:do {
/system script run $val
:log warning "function $key is set"
:set funcList ($funcList, $key)
} on-error={
:log error "error setup function $key"
:set funcerror ($funcerror+1)}
}
:if ($val="") do={
:do {
/system script run $key
:log warning "script $key is run"
:set calc ($calc+1)
} on-error={
:log error "error: script $key not find"
:set scripterror ($scripterror+1)}
}
}
# ---> report part in log
:log info ""
:log warning "setup is done";
:log error "==========="
:log info ""
:log warning ("scripts executed: $calc")
:if ($scripterror>0) do={:log error ("error run script: $scripterror")}
:log warning "in environment is set functions: $[:len $funcList]"
:log warning "list is installed functions:"
:log warning ("[\$$funcList]")
:if ($funcerror>0) do={:log error ("error set functions: $funcerror")}
# end script
Чуть подработал скрипт. Теперь он умеет:
1. запускать скрипты из репозитория
2. устанавливать функции с запоминанием имён установленных в массив
3. импортировать скрипты и функции из файла корня /files или удаленного URL-ресурса
4. добавлять скрипты в репозиторий роутера из текстовых файлов /files
#------------------------------------------------------------
# Functions & Scripts Auto Setup (FaSAS)
# by Sertik 09/03/2023
#------------------------------------------------------------
# логика работы:
# скрипт ищет в ключевом массиве arrayComUser функции и скрипты пользователя
# если элемент массива не имеет значения (ключ есть, значения нет), то данный
# элемент считается скриптом репозитория и выполняется
# если же элемент имеет ключ и значение, то ключ считается именем функции, лежащей в скрипте
# с именем значения элемента. Производится запуск этого скрипта для установки функции в окружение
# сама функция не выполняется, имена установленных скриптом функций накапливаются в
# глобальном массиве funcList для последующего пользования
# если элемент имеет ключ содержащий ".rsc", но не содержит значения,
# то осуществляется /import из скрипта с именем ключа (из /files)
# если элемент имеет ключ содержащий ".rsc" и содержит значение, то
# значение, считается путем URL для загрузки и последующего импорта скрипта
# если ключ содержит ".txt", считается, что нужно считать текстовый файл
# нужно добавить скрипт c именем=значению элемента, содержанием из файла с именем-ключом.
# не запуская его, имена таких добавленных в репозиторий скриптов накапливаются в listScript
# комментарии на национальных языках имплантируются неверно
# list users scripts and functions:
:local arrayComUser {\
"CalcDay"="";
"mama.txt"="pokeScript";
"scriptERROR"="";
"JParseFunctions.rsc"="https://raw.githubusercontent.com/Winand/mikrotik-json-parser/master/JParseFunctions";
"JParse.rsc"="";
"FuncAS"="FuncAs+";
"funcERROR"="mama";
"FuncPassGen"="Func_PassGen";
"SSHsms"="!_SSH_sendSMS"
}
# -- > work part
:log info ""
:log warning "Function & scripts auto Setup"
:log error "========================="
:log info ""
:global funcList [:toarray ""]
:local calc 0
:local importcalc 0
:local filecalc 0
:local funcerror
:local scripterror
:local importerror
:local fileerror
:foreach key,val in=$arrayComUser do={
# add scriptin repository from file (.txt)
:if ([:len [:find $key ".txt"]]!=0) do={
:do {
:if ([:len [/system script find name=$val]]!=0) do={[/system script remove $val]}
/system script add name=$val source=[/file get [find where name=$key] contents]
:log warning ("add $val script from file $key is done")
:set filecalc ($filecalc+1)
} on-error={:log error "error add script $val from file $key"; :set fileerror ($fileerror +1)}
}
# import or download & import script library (.rsc)
:if ([:len [:find $key ".rsc"]]!=0) do={
:if ($val="") do={
:do {
:import $key;
:log warning "import $key script is done"
:set importcalc ($importcalc+1)
} on-error={:log error "error import script file $key"; :set importerror ($importerror +1)}
} else={
:do {
/tool fetch url=$val
:log warning "download $key from $val is done"
:local nImport
:if ([:len [/file find $key]]!=0) do={:set nImport $key} else={:set nImport [:pick $key 0 [:find $key ".rsc"]]}
:import $nImport
:log warning "import $nImport script is done";
:set importcalc ($importcalc+1)
} on-error={:log error "error: could not load or import $key"; :set importerror ($importerror +1)}
}
}
# installed function from script
:if (([:len [/system script environment find $key]]=0) && ($val!="") && ([:len [:find $key ".txt"]]=0) && ([:len [:find $key ".rsc"]]=0)) do={
:do {
/system script run $val
:log warning "function $key is set"
:set funcList ($funcList, $key)
} on-error={
:log error "error setup function $key"
:set funcerror ($funcerror+1)}
}
# run script in repository
:if (($val="") && ([:len [:find $key ".rsc"]]=0) && ([:len [:find $key ".txt"]]=0)) do={
:do {
/system script run $key
:log warning "script $key is run"
:set calc ($calc+1)
} on-error={
:log error "error: script $key not find"
:set scripterror ($scripterror+1)}
}
}
# ---> report part in log
:log info ""
:log warning "setup is done";
:log error "==========="
:log info ""
:log warning ("scripts executed: $calc")
:if ($scripterror>0) do={:log error ("error run script: $scripterror")}
:log warning "in environment is set functions: $[:len $funcList]"
:log warning "list is installed functions:"
:log warning ("[\$$funcList]")
:if ($funcerror>0) do={:log error ("error set functions: $funcerror")}
:log warning "import or download & import files $importcalc"
:if ($importerror>0) do={:log error ("error import / download: $importerror")}
:log warning "add script in repository from files $filecalc"
:if ($fileerror>0) do={:log error ("error add script in repository: $fileerror")}
# end script FaSAS