Skip to content

Instantly share code, notes, and snippets.

@artbear
Forked from EvilBeaver/zoopark.os
Created December 1, 2017 08:50
Show Gist options
  • Save artbear/a6709cea3df1a1e6a0da5b457c9a486c to your computer and use it in GitHub Desktop.
Save artbear/a6709cea3df1a1e6a0da5b457c9a486c to your computer and use it in GitHub Desktop.
Скрипт сбора версий платформ с зоопарка систем 1С
#Использовать logos
#Использовать cmdline
Перем Лог;
Функция ПодключитьсяИСпроситьВерсию(УРЛ)
Connector = Новый COMОбъект("V83.ComConnector");
Попытка
Connector.ConnectAgent(УРЛ);
Возврат "8.3.10.2580";
Исключение
РЕ = Новый РегулярноеВыражение("\(\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