Кто я и что я делаю
Я являюсь джуниором в провайдинговой компании, в мои обязанности входит helpdesc второй линии и много рутинных задач вроде прокидывания Vlan от порта до порта через всю сеть, либо подачи других услуг на конечный порт абонента, настройка различных железок уровня агрегации и дистрибьюции для выставления на сеть. Но какими бы ни были рутинными задачи по организации новых каналов или настройки железок — самая неудобная и отвлекающая рутина, это контакты с хэлпдеском, которые всегда сводятся к просмотру состояния порта, присутствия на нем мака, и нужных Vlan, кол-ва ошибок и истории UP/Down из логов оборудования в редких случаях.
Как все начиналось
Чем больше времени проходило с момента моего трудоустройства, тем быстрее решались мной рутинные задачи и тем больше они мне надоедали. И в определнный момент я решил попробовать упростить себе жизнь и скинуть рутину алгоритмам. В результате, где-то за пол года неспешной работы у меня получилось несколько скриптов, которыми я и хотел бы с вами поделиться. Кроме того, я поискал по хабру и Stack Overflow и пришел к выводу что нигде подобная тема еще не поднималась. С учетом того, сколько профита ежедневно мне приносят мои наработки (экономия времени от минуты до 15-ти за заявку от хэлпдеска) это мне показалось очень странным.
Чем я хочу поделиться
В этом посте речь пойдет о самом последнем моем творении т.к. он написан максимально грамотно и с прицелом на легкое допиливание, его легко понять и изменить под свои нужды. Дело в том, что я, не являясь программистом, писал все исключительно по принципу «лишь бы работало» и только со временем по мере написания я научился (или еще только начинаю «научаться») писать программы хотя бы чуть-чуть правильно.
Описание работы:
Этот скрипт требует ввести часть IP адреса оборудования (например в моей сети все устройства имеют адрес 10.150.XX.XXX или 172.100.100.ХХХ) и порт.
- Открывает новую вкладку в SecureCrt или использует текущую, если перед IP адресом поставить минус "-". Если поставить "+" то нужно ввести только последний октет IP адреса, откроется новая вкладка, которая будет ожидать авторизации вручную.
- В скрипте прописаны два авторизационных сочетания Login1 Pass1 и Login2 Pass2. Используя их он авторизуется на оборудовании по принципу если не получилось первое — попробую второе.
- После авторизации он считывает имя устройства добавляет в его начало введенный пользователем IP адрес и меняет заголовок вкладки на получившийся Description.
Таким образом отпадает потребность вспоминать что находится за десятком открытых вкладок, ведь там теперь не просто IP адрес, а еще и имя устройства.
- Если пользователь ввел номер порта — далее скрипт узнает на каком устройстве он находится
- какой у него UpTime (очень мило, что у всех производителей эта команда Show | display version)
- и затем отталкиваясь от вендора применяет известные ему команды для того, чтобы показать конфигурацию искомого порта
- его состояние
- мак адреса
- в случае наличия description — меняет имя вкладки на него.
В конце он выводит сообщение со всем, что узнал.
Список и типы оборудования, с которым работает скрипт: | ZTE | HP | QTECH | H3C | Quidway-EA | Quidway-EI |
Про обновления
Так как моим творением пользуются еще и коллеги, а я часто его дописываю или улучшаю, то я еще написал небольшой модуль обновления, который должен лежать в доступном сетевом расположении рядом с новой версией этого скрипта. Путь до модуля обновления прописывается в самой шапке скрипта в переменной UpdateEngine. Этот же путь является путем к новой версии.
Обновление происходит, если в поле IP адреса ввести команду Update. Если ввести Upload то произойдет отгрузка новой версии с локального компьютера на сервер.
Почти конец
В процессе написания я столкнулся с несколькими неочевидными трудностями, так что если у вас будут какие-либо вопросы — задавайте.
Далее собственно код обоих скриптов. Пожалуйста используйте, изменяйте под свои нужды. Возможно для кого-то мой опыт послужит начальным импульсом к автоматизации собственной рутины. Кто-то увидит примеры использования VBScript в SecureCRT, кто-то поднимет ЧСВ, заметив сырость в коде. В любом случае, я уверен, что тема будет полезна многим.
Редактирование скрипта советую производить в Notepad++ т.к. в нем использованно такое форматирование, которое позволяет Notepad++ сворачивать отдельные модули (скрывать строки) так, чтобы облегчить навигацию по коду. Не нужные на данный момент модули можно свернуть до двух строк — начало и конец.
Я не претендую на звание программиста года, так что за сырости и медвежьи ходы (неизящные решения) прошу не пинать, но буду рад подсказкам на будущее.
Код актуален для SecureCRT ver 7.0.1
Почти 300 строк первого скрипта:
#$language = "VBScript" #$interface = "1.0" crt.Screen.Synchronous = True crt.screen.IgnoreEscape = True scr_ver = "0,55" Developer = False UpdateEngine = "\\SERVER\Script\Script_Update.vbs" ' Change Log: ' v0.1 The very beggining. Here where it starts. ' v0.2 16.01.14 Исправлена авторизация Login2 на ZTE ' v0.3 16.01.14 Добавлена возможность работы без указания порта ' v0.4 20.01.14 Добавлена поддержка новой вкладки и ее Description '---v0.5 22.01.14 Добавлена процедура обновления, часть IP в Caption вкладки. ' v0.51 24.01.14 Добавлена +IP - быстрый вход на область. ' v0.53 24.01.14 Добавлено ожидание авторизации на область. ' v0.54 24.01.14 Контрольный символ использования текущей вкладки заменен на "-" ' v0.55 24.01.14 Подправлены тайминги на авторизацию Dim ip 'IP адрес коммутатора 'ip = "10.150.127.245" 'H3C S3100-8TP-EI пишет Description в инфо о порте когда он есть 'ip = "10.150.226.246" 'H3C S3100-26TP-EI 1/0/1 'ip = "10.150.210.26" 'Quidway S2016TP-EA 'ip = "10.150.119.69" '[Quidway S2309TP-EI] 0/0/1 ---------------------------------------------- 'ip = "10.150.218.16" '[Quidway S2309TP-EI] 0/0/1 'ip = "10.150.226.33" 'ZTE ZXR10 2928E 'ip = "10.150.211.224" 'Qtech Dim Login Dim Passw Dim SW_Name Dim Port 'Port = "1" Dim Port_State Port_State = "UP" Dim Port_Description Dim Mac Dim exit_ ' устанавливаем в "1" для завершения работы программы Dim Equipment_ID ' Тип коммутатора | ZTE | QTECH | H3C | Quidway-EA | Quidway-EI | Dim Uptime Dim Oblast Oblast = False Dim var, var2, test Dim objCurrentTab, Tab Sub Update(file) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(file, 1) str = f.ReadAll f.Close ExecuteGlobal(str) End Sub Sub User() ' Задаем юзера - Login1 Login2 'if objCurrentTab.Dialog.MessageBox (var,"Login1", 32 Or 4 Or 0 ) = 6 then 'возвращает 6 если Login1, 7 если Login2 Login = "Login1" Passw = "Pass1" 'else ' Login = "Login2" ' Passw = "Pass2" 'end if End sub Sub Connect() ' Коннектимся, решаем использовать ли текущую вкладку, открыть область или обновиться, узнаем порт IP = crt.Dialog.Prompt("Введите IP коммутатора 10.150.", "sublime habr_script ver_" & scr_ver, "", False) ' Получаем IP коммутатора if ip = "Update" then call Update (UpdateEngine) msgbox "Проверка версий и обновление завершено." , 0 , "sublime habr_script ver_" & scr_ver exit sub elseif ip = "Upload" then Developer = True call Update (UpdateEngine) msgbox "Процедура отгрузки завершена, перезапустите скрипт", 0 , "sublime habr_script ver_" & scr_ver exit sub elseif ip = "" then msgbox "IP коммутатора не введен" , 0 , "sublime habr_script ver_" & scr_ver exit_ = 1 exit sub end if Port = crt.Dialog.Prompt("Введите порт абонента", "sublime habr_script ver_" & scr_ver, "", False) ' Получаем номер порта If Left(IP, 1) = "-" and Left(IP, 1) <> "" then ' . Подключение в текущей вкладке IP = Mid(IP, 2, Len(IP)) if crt.Session.Connected then crt.Session.Disconnect ' Если подключение установлено - отключиться crt.session.Connect "/telnet " & chr(34) & "10.150." & ip & chr(34) & " 23" , , true ' подключаемся Set objCurrentTab = crt.GetScriptTab if not objCurrentTab.Session.Connected then msgbox "Коммутатор не обнаружен" exit_ = 1 exit sub else 'msgbox "Коммутатор обнаружен" end if elseif Left(IP, 1) = "+" and Left(IP, 1) <> "" then ' + Подключение к области Oblast = true IP = Mid(IP, 2, Len(IP)) set Tab = crt.session.ConnectInTab ("/telnet " & chr(34) & "172.100.100." & ip & chr(34) & " 23" , , true ) ' подключаемся tab.Screen.Synchronous = True ' О, великий! tab.screen.IgnoreEscape = True ' О, великий! 'msgbox "before Set objCurrentTab = crt.GetTab(tab.Index)" Set objCurrentTab = crt.GetTab(tab.Index) if not objCurrentTab.Session.Connected then msgbox "Коммутатор не обнаружен" exit_ = 1 exit sub else 'msgbox "Коммутатор обнаружен" & exit_ end if else ' Обычное подключение в новой вкладке. 'msgbox "before set Tab = crt.session.ConnectInTab" set Tab = crt.session.ConnectInTab ("/telnet " & chr(34) & "10.150." & ip & chr(34) & " 23" , , true ) ' подключаемся tab.Screen.Synchronous = True ' О, великий! tab.screen.IgnoreEscape = True ' О, великий! 'msgbox "before Set objCurrentTab = crt.GetTab(tab.Index)" Set objCurrentTab = crt.GetTab(tab.Index) if not objCurrentTab.Session.Connected then msgbox "Коммутатор не обнаружен" exit_ = 1 exit sub else 'msgbox "Коммутатор обнаружен" & exit_ end if end if objCurrentTab.Screen.Synchronous = True objCurrentTab.screen.IgnoreEscape = True End Sub Sub LogOn() ' Авторизуемся objCurrentTab.Screen.WaitForStrings "Username:", "login", 10 if Oblast = False then objCurrentTab.Screen.Send "Login1" + chr(13) end if objCurrentTab.Screen.WaitForString "assword:", 10 if Oblast = False then objCurrentTab.Screen.Send "Pass1" + chr(13) end if var = CStr(objCurrentTab.screen.WaitForStrings(">", "#", "Username:", "login", 10)) 'msgbox var if var = 0 then msgbox "Ошибка авторизации" exit_ = 1 exit sub elseif ((var = 3) or (var = 4)) and (Oblast = false) then if objCurrentTab.Screen.WaitForString ("authentication success", 1) = false then ' проверка для zte 'msgbox "ZTE" objCurrentTab.Screen.Send "Login2" + chr(13) objCurrentTab.Screen.WaitForString "assword:" objCurrentTab.Screen.Send "Pass2" + chr(13) end if elseif (var = 3 or var = 4) and Oblast = true then objCurrentTab.Screen.WaitForString "assword:", 10 end if objCurrentTab.Screen.Send chr(13) if CStr(objCurrentTab.screen.WaitForStrings(">", "#", 2)) = 0 then msgbox "Ошибка авторизации" exit_ = 1 exit sub end if End sub Sub Equipment() ' Знакомимся, спрашиваем как дела objCurrentTab.Screen.Send " " & chr(13) objCurrentTab.screen.WaitForString chr(10) SW_Name = objCurrentTab.Screen.ReadString (">", "#", 1) if SW_Name <> "" then ' Меняем имя вкладки на SW_Name if left(SW_Name,1) = "<" then SW_Name = Mid(SW_Name, 2, Len(SW_Name)) end if objCurrentTab.Caption = IP & "_" & SW_Name end if if Oblast = true then ' Завершаем работу скрипта если находимся в области 172.100.100. exit_ = 1 exit sub end if if port <> "" then objCurrentTab.Screen.Send "display version" & chr(13) ' 1 2 3 4 5 6 0 var = CStr(objCurrentTab.screen.WaitForStrings("Quidway", "H3C", "HP", "QTECH", "Invalid", "ommand", 2)) if var = 0 then msgbox "Ошибка определния типа оборудования. Выходим." exit_ = 1 exit sub elseif (var = 5 or var = 6) then objCurrentTab.Screen.Send "show version" & chr(13) ' 1 2 3 4 0 var = CStr(objCurrentTab.screen.WaitForStrings("ZTE", "QTECH", "Invalid", "ommand", 1)) if (var = 0) or (var = 3) or (var = 4) then msgbox "Ошибка определния типа оборудования. Выходим." exit_ = 1 exit sub elseif var = 1 then Equipment_ID = "ZTE" elseif var = 2 then Equipment_ID = "QTECH" Port = "1/" & Port end if elseif (var = 2) or (var = 3) then Equipment_ID = "H3C" Port = "1/0/" & Port elseif var = 1 then objCurrentTab.screen.WaitForString " " var = CStr(objCurrentTab.screen.WaitForStrings("-EA", "-EI", 2)) if var = 0 then msgbox "Ошибка определния типа оборудования. Выходим." exit_ = 1 exit sub elseif (var = 1) then Equipment_ID = "Quidway-EA" Port = "1/0/" & Port elseif (var = 2) then Equipment_ID = "Quidway-EI" Port = "0/0/" & Port end if end if objCurrentTab.screen.WaitForString "ptime" Uptime = objCurrentTab.Screen.ReadString(chr(13) , 1) objCurrentTab.screen.WaitForStrings ">", "#", 1 end if End sub Sub Port_Information() ' Информация о порте - State, Description if Equipment_ID = "ZTE" then ' ZTE objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString ">" objCurrentTab.Screen.Send "show port " & Port & " brief" & chr(13) var = CStr(objCurrentTab.screen.WaitForStrings("up", "down", 2)) if var = 0 then msgbox "Ошибка определния статуса порта. Выходим." exit_ = 1 exit sub elseif (var = 1) then Port_State = "UP" elseif (var = 2) then Port_State = "DOWN" end if Port_Description = Trim(objCurrentTab.Screen.ReadString(chr(13) , 2)) end if '/ZTE '-------------------------------------------------------------------- if Equipment_ID = "H3C" or Equipment_ID = "Quidway-EA" or Equipment_ID = "Quidway-EI" then ' H3C or Quidway-EA or Quidway-EI objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString ">" objCurrentTab.Screen.Send "display interface Ethernet " & Port & chr(13) var = CStr(objCurrentTab.screen.WaitForStrings("UP", "DOWN", 2)) if var = 0 then msgbox "Ошибка определния статуса порта. Выходим." exit_ = 1 exit sub elseif (var = 1) then Port_State = "UP" elseif (var = 2) then Port_State = "DOWN" end if objCurrentTab.Screen.Send " " & chr(13) objCurrentTab.screen.WaitForString ">", 1 objCurrentTab.Screen.Send " " & chr(13) objCurrentTab.screen.WaitForString ">", 1 objCurrentTab.Screen.Send "display current-configuration interface Ethernet " & Port & chr(13) objCurrentTab.screen.WaitForString "description", 1 Port_Description = Trim(objCurrentTab.Screen.ReadString(chr(13) , 2)) end if '/H3C or Quidway-EA or Quidway-EI '-------------------------------------------------------------------- if Equipment_ID = "QTECH" then ' QTECH objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString "#" objCurrentTab.Screen.Send "show interface ethernet " & Port & chr(13) var = CStr(objCurrentTab.screen.WaitForStrings("up", "down", 2)) if var = 0 then msgbox "Ошибка определния статуса порта. Выходим." exit_ = 1 exit sub elseif (var = 1) then Port_State = "UP" elseif (var = 2) then Port_State = "DOWN" end if objCurrentTab.Screen.Send " " & chr(13) objCurrentTab.screen.WaitForString "#" objCurrentTab.Screen.Send "show running-config interface ethernet " &Port & chr(13) objCurrentTab.screen.WaitForString "description", 1 Port_Description = Trim(objCurrentTab.Screen.ReadString(chr(13) , 2)) end if '/QTECH if Port_Description <> "" then ' Меняем имя вкладки на Port_Description objCurrentTab.Caption = IP & "_" & Port_Description end if End sub Sub MacInformation() ' Мак адреса if Equipment_ID = "ZTE" then ' ZTE objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString ">" objCurrentTab.Screen.Send "show mac dynamic port " & Port & chr(13) objCurrentTab.screen.WaitForString "---" & chr(13) , 3 ' тест на выявление ошибки While var2 <> "stop" var = CStr(objCurrentTab.screen.WaitForStrings ("No MAC", chr(10), "Press", ">", 1)) 'msgbox var if var = 1 then Mac = "No Mac" elseif var = 2 then Mac = Mac & chr(13) & objCurrentTab.Screen.ReadString(" ", 1) Elseif var = 3 then objCurrentTab.Screen.Send " " for i = 1 to 98 objCurrentTab.screen.WaitForString chr(8), 1 next Mac = Mac & chr(13) & objCurrentTab.Screen.ReadString(" ", 1) Elseif var = 4 then var2 = "stop" Elseif var = 0 then var2 = "stop" end if objCurrentTab.screen.WaitForStrings chr(13), " ", 1 'var2 = objCurrentTab.Screen.ReadString(".", 1) ' var = "" ' for i = 1 to len(var2) ' test = Mid(var2, i, 1) ' 'msgbox test ' var = var & "|" & Asc(test) ' next ' msgbox "_..." & var & "..._" & "i= " & i & chr(13) & var2 wend end if '/ZTE if Equipment_ID = "H3C" or Equipment_ID = "Quidway-EA" then ' H3C or Quidway-EA objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString ">" objCurrentTab.Screen.Send "displ mac-address interface Ethernet " & port & chr(13) objCurrentTab.screen.WaitForString "TIME(s)", 1 While var2 <> "stop" var = CStr(objCurrentTab.screen.WaitForStrings ("No MAC", chr(10), "found", 1)) if var = 1 then Mac = "No Mac" elseif var = 2 then Mac = Mac & chr(13) & objCurrentTab.Screen.ReadString(" ", 1) elseif var = 3 then var2 = "stop" Elseif var = 0 then Mac = Mac & chr(13) & "more..." var2 = "stop" end if wend end if '/H3C or Quidway-EA if Equipment_ID = "Quidway-EI" then ' Quidway-EI objCurrentTab.Screen.Send chr(13) objCurrentTab.screen.WaitForString ">" objCurrentTab.Screen.Send "display mac-address dynamic Ethernet " & port & chr(13) objCurrentTab.screen.WaitForStrings "Lsp", "MAC-Tunnel", 5 objCurrentTab.screen.WaitForString "------------------------------------------------------" & chr(13), 3 While var2 <> "stop" var = CStr(objCurrentTab.screen.WaitForStrings ("displayed = 0", chr(10), "Total", 1)) if var = 1 then Mac = "No Mac" var2 = "stop" elseif var = 2 then var = objCurrentTab.Screen.ReadString(" ", 1) 'msgbox "_" & var & "_" if (var = chr(13) & chr(10) & "Total") or (var = chr(13) & chr(10) & "-------------------------------------------------------------------------------" & chr(13) & chr(10) & "Total") then var2 = "stop" else Mac = Mac & var & chr(13) end if objCurrentTab.screen.WaitForString chr(13), 1 elseif var = 3 then var2 = "stop" Elseif var = 0 then Mac = Mac & chr(13) & "more..." var2 = "stop" end if wend end if '/Quidway-EI if Equipment_ID = "QTECH" then ' QTECH objCurrentTab.Screen.Send chr(13) objCurrentTab.Screen.Send "show mac-address-table interface ethernet " & port & chr(13) objCurrentTab.screen.WaitForString "Read mac address table...." var = CStr(objCurrentTab.screen.WaitForStrings ("No mac", "---" & chr(13), 1)) if var = 1 then var2 = "stop" Mac = "No Mac" end if While var2 <> "stop" var = CStr(objCurrentTab.screen.WaitForStrings ( " ", SW_name, 1)) if var = 1 then Mac = Mac & chr(13) & Trim(objCurrentTab.Screen.ReadString(" ", 1)) objCurrentTab.screen.WaitForString chr(13) elseif var = 2 then var2 = "stop" Elseif var = 0 then Mac = Mac & chr(13) & "more..." var2 = "stop" end if wend end if End sub if exit_ <> 1 then Call User if exit_ <> 1 then Call Connect if exit_ <> 1 then Call LogOn if exit_ <> 1 then Call Equipment if exit_ <> 1 and Port <> "" then Call Port_Information if exit_ <> 1 and Port <> "" and Port_State = "UP" then Call MacInformation 'and Port_State = "UP" var = "Тип коммутатора " & Equipment_ID & chr(13) & "Uptime " & Uptime & chr(13) var = var & "Имя " & " = " & SW_Name & chr(13) var = var & "Сосотояние порта " & Port & " = " & Port_State & chr(13) var = var & "Имя порта " & Port & " = " & Port_Description & chr(13) var = var & "Мак адрес: " & chr(13) & Mac & chr(13) var = var & "Скрипт успешно завершен" if Port <> "" then msgbox var end if
И скрипт обновления
'#$language = "VBScript" '#$interface = "1.0" crt.Screen.Synchronous = True crt.screen.IgnoreEscape = True scr_vers = "0,1" ' Change Log: ' v0.1 21.01.14 The very beggining. Here where it starts. Dim cur_scr_path, cur_scr_Name, cur_scr_ver, cur_scr_file Dim ser_scr_path, ser_scr_Name, ser_scr_ver, ser_scr_file Sub CurrentScript() 'Путь до текущего скрипта, его имя и версия cur_scr_path = crt.ScriptFullName For i = 1 to 10 if InStr(cur_scr_path,"\") = 0 then Exit for end if cur_scr_path = Right(cur_scr_path, Len(cur_scr_path) - InStr(cur_scr_path,"\")) next cur_scr_Name = cur_scr_path 'msgbox cur_scr_Name cur_scr_path = crt.ScriptFullName Set cur_scr_file = CreateObject("Scripting.FileSystemObject").OpenTextFile(cur_scr_path,1) ' 1 - for reading do while not cur_scr_file.AtEndOfStream cur_scr_ver = cur_scr_file.ReadLine cur_scr_ver = trim(cur_scr_ver) if left(cur_scr_ver, 10) = "scr_ver = " then cur_scr_ver = Mid (cur_scr_ver, 12, Len(cur_scr_ver) - 12)'Mid(cur_scr_ver, 11,InStr(cur_scr_ver," ")) 'msgbox cur_scr_ver = " & cur_scr_ver Exit do end if loop cur_scr_file.Close end sub Sub ServerScript() 'Путь до серверного скрипта, версия ser_scr_path = "\\SERVER\Script" & "\" &cur_scr_Name 'msgbox ser_scr_path Set ser_scr_file = CreateObject("Scripting.FileSystemObject").OpenTextFile(ser_scr_path,1) ' 1 - for reading do while not ser_scr_file.AtEndOfStream ser_scr_ver = ser_scr_file.ReadLine ser_scr_ver = trim(ser_scr_ver) 'msgbox ser_scr_ver if left(ser_scr_ver, 10) = "scr_ver = " then ser_scr_ver = Mid (ser_scr_ver, 12, Len(ser_scr_ver) - 12) 'msgbox "ser_scr_ver = " & ser_scr_ver Exit do end if loop ser_scr_file.Close End sub Sub Comparisson() ' Сравниваем версии, свой статус и загружаем обновление. Const OverwriteExisting = True 'msgbox "_" & cur_scr_ver & "_" & ser_scr_ver& "_" 'MsgBox (TypeName(cur_scr_ver)) & "_" & (TypeName(ser_scr_ver)) If Developer = true then If CDbl(cur_scr_ver) < CDbl(ser_scr_ver) then ' Если версия на сервере новее msgbox "Версия на сервере новее. WTF?!",0 , "God mode ON." elseif CDbl(cur_scr_ver) = CDbl(ser_scr_ver) then ' Если версия на сервере одинакова msgbox "Version equals, nothing to do" ,0 , "God mode ON." elseif CDbl(cur_scr_ver) > CDbl(ser_scr_ver) then ' Если версия на сервере ниже версии на компе. Скрипт создателя msgbox "Version difference, Uploading new version to the server. Press ok to begin" ,0 , "God mode ON." Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile cur_scr_path , ser_scr_path, OverwriteExisting end if elseif Developer = false then If CDbl(cur_scr_ver) < CDbl(ser_scr_ver) then ' Если версия на сервере новее. Скрипт Юзера. msgbox "Обнаружена новая версия. Загружаю обновление." , 0 , "UpdateEngine" Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile ser_scr_path, cur_scr_path, OverwriteExisting elseif CDbl(cur_scr_ver) = CDbl(ser_scr_ver) then ' Если версия на сервере одинакова msgbox "Версии равны.", 0 , "UpdateEngine" elseif CDbl(cur_scr_ver) > CDbl(ser_scr_ver) then ' Если версия на сервере ниже версии на компе. msgbox "Версия на сервере старее.", 0 , "UpdateEngine" end if end if Developer = false exit_ = 1 End sub Call CurrentScript() Call ServerScript() Call Comparisson()
Напоследок
У меня есть еще один очень полезный скриптик для оборудования GPON MA5680T. Кто сталкивался, тот знает насколько сложно добавлять услуги или разбираться в текущей конфигурации оконечного терминала, т.н. «понки». Я написал скриптик который позволяет добавлять услуги, выводить список улуг или разбирать понку из конфигурации GPONa. Итоговая табличка, формируемая скриптом выглядит так
Объект: (6-0/1/1-2) ONT_name Состояние: UP Тип: 92 Cерийник: 32303131B881F241 (2011-B881F241) __________________________ Service Port summury: ========================================================= |S*P | |Vlan| |Gem | |U-V | |RTx | || Vlan desc --------------------------------------------------------- |5 | | 600| |130 | |2 | |5 | || Chanel1_name |38 | |1203| |136 | |3 | |7 | || |180 | |3563| |213 | |6 | |2 | || Chanel2_name |143 | |3786| |304 | |4 | |2 | || Chanel3_name |573 | | 598| |390 | |7 | |7 | || ========================================================= Порты (O = UP; X = Down): ---------------------- [O] - Port 1 : 1,[2], [O] - Port 2 : 1,[3], [O] - Port 3 : 1,[4], [O] - Port 4 : 1,[6], [X] - Port 5 : 1,[7], ---------------------- ---------------------- Tcont_id 0.......1 Tcont_id 1.......12 Tcont_id 2.......5 Tcont_id 3.......57 Tcont Всего: 4 ----------------------
ссылка на оригинал статьи http://habrahabr.ru/post/210822/
Добавить комментарий