Last active
March 13, 2018 08:57
-
-
Save EvilBeaver/e96708a8e0c812f3fa5a30a9edae5412 to your computer and use it in GitHub Desktop.
Скрипт сбора версий платформ с зоопарка систем 1С
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Использовать logos | |
#Использовать cmdline | |
Перем Лог; | |
Перем мТекущаяВерсия; | |
Процедура ОпределитьТекущуюВерсию() | |
ИмяКомпонента = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\V83.COMConnector\CLSID\"; | |
objShell = Новый COMОбъект("WScript.Shell"); | |
CLSID = objShell.RegRead(ИмяКомпонента); | |
ИмяОписанияКласса = "HKEY_CLASSES_ROOT\CLSID\"+CLSID+"\InprocServer32\"; | |
Строка = objShell.RegRead(ИмяОписанияКласса); | |
РЕ = Новый РегулярноеВыражение("\d\.\d\.\d\.\d{1,5}"); | |
Совпадения = РЕ.НайтиСовпадения(Строка); | |
Если Совпадения.Количество() Тогда | |
мТекущаяВерсия = Совпадения[0].Значение; | |
Иначе | |
ВызватьИсключение "Не найдено зарегистрированных COM-соединителей 1С"; | |
КонецЕсли; | |
КонецПроцедуры | |
Функция ПодключитьсяИСпроситьВерсию(УРЛ) | |
Connector = Новый COMОбъект("V83.ComConnector"); | |
Попытка | |
Connector.ConnectAgent(УРЛ); | |
Возврат мТекущаяВерсия; | |
Исключение | |
РЕ = Новый РегулярноеВыражение("\(\d\.\d\.\d{1,2}\.\d+\s*-\s*(\d\.\d\.\d{1,2}\.\d+)"); | |
Совпадения = РЕ.НайтиСовпадения(ИнформацияОбОшибке().Описание); | |
Если Совпадения.Количество() = 1 Тогда | |
Возврат Совпадения[0].Группы[1].Значение; | |
Иначе | |
Лог.Предупреждение(ИнформацияОбОшибке().Описание); | |
Возврат Неопределено; | |
КонецЕсли; | |
КонецПопытки; | |
КонецФункции | |
Функция ВернутьСервераИзФайлаИб( пФайл ) | |
тзСерверов = Новый ТаблицаЗначений; | |
тзСерверов.Колонки.Добавить("ИмяСервера"); | |
тзСерверов.Колонки.Добавить("ИмяБазы"); | |
тзСерверов.Колонки.Добавить("Порт"); | |
Текст = Новый ТекстовыйДокумент; | |
Текст.Прочитать(пФайл,"cp866"); | |
ПодстрокаЗацепкаSrvr = "Connect=Srvr="; | |
ПодстрокаЗацепкаRef = """;Ref="; | |
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл | |
Стр = Текст.ПолучитьСтроку(НомерСтроки); | |
Если Найти(Стр, ПодстрокаЗацепкаSrvr) > 0 тогда | |
строкаSrvr = Сред(Стр, СтрДлина(ПодстрокаЗацепкаSrvr) + 2, Найти(Стр, ПодстрокаЗацепкаRef) - СтрДлина(ПодстрокаЗацепкаSrvr) -2); | |
ПозицияПорта = Найти( строкаSrvr , ":" ); | |
Если ПозицияПорта > 0 тогда | |
ИмяСервера = Сред( строкаSrvr, 0 , СтрДлина(строкаSrvr) - (СтрДлина(строкаSrvr) - ПозицияПорта)-1); | |
Порт = Число(Сред(строкаSrvr, ПозицияПорта + 1))-1; | |
Иначе | |
ИмяСервера = строкаSrvr; | |
Порт = 1540; | |
КонецЕсли; | |
ИмяБазы = Сред( Стр, Найти(Стр, ПодстрокаЗацепкаRef) + СтрДлина( ПодстрокаЗацепкаRef ) +1 , СтрДлина(Стр) - (Найти(Стр, ПодстрокаЗацепкаRef) + СтрДлина( ПодстрокаЗацепкаRef )+1) ); | |
НовСтр = тзСерверов.Добавить(); | |
НовСтр.ИмяСервера = ИмяСервера; | |
НовСтр.ИмяБазы = ИмяБазы; | |
НовСтр.Порт = Порт; | |
КонецЕсли; | |
КонецЦикла; | |
Возврат тзСерверов; | |
КонецФункции | |
Процедура ВыдатьСписокВерсий(ФайлБаз, ФайлРезультата) | |
Таблица = ВернутьСервераИзФайлаИб(ФайлБаз); | |
ЗаписьРезультата = Новый ЗаписьТекста(ФайлРезультата, КодировкаТекста.UTF8NoBOM); | |
ЗаписьРезультата.ЗаписатьСтроку("server;database;version"); | |
Для Каждого СтрокаТЗ ИЗ Таблица Цикл | |
Лог.Информация("Работаю по серверу %1", СтрокаТЗ.ИмяСервера); | |
Версия = ПодключитьсяИСпроситьВерсию(СтрокаТЗ.ИмяСервера + ":" + СтрокаТЗ.Порт); | |
ЗаписьРезультата.ЗаписатьСтроку(СтрШаблон("%1;%2;%3", | |
СтрокаТЗ.ИмяСервера,СтрокаТЗ.ИмяБазы,Версия)); | |
КонецЦикла; | |
КонецПроцедуры | |
Парсер = Новый ПарсерАргументовКоманднойСтроки; | |
Парсер.ДобавитьПараметр("ФайлБаз", "Файл *.v8i со списком баз 1С"); | |
Парсер.ДобавитьПараметр("ФайлРезультата", "Куда записать результат (csv)"); | |
Лог = Логирование.ПолучитьЛог("version.audit.os"); | |
Результат = Парсер.Разобрать(АргументыКоманднойСтроки); | |
Если Результат.Количество() = 0 Тогда | |
Парсер.ВывестиСправкуПоПараметрам(); | |
Иначе | |
ОпределитьТекущуюВерсию(); | |
ВыдатьСписокВерсий(Результат["ФайлБаз"],Результат["ФайлРезультата"]); | |
КонецЕсли; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment