v10.45 (build: Nov 10 2024)

Утилита синхронизации данных из файлов

Утилита stcsvsync выполняет преобразование данных из .csv-таблиц в SQL-скрипт с целью дальнейшей синхронизации настроек комплекса.

Скачать утилиту можно здесь



Общие положения

Входные данные должны быть представлены как .csv (разделитель - точка с запятой ";") в мультибайтовой кодировке UTF-8.

Важно: при экспорте, MS Excel ошибочно сообщает, что разделитель "запятая", но на самом деле, разделителем будет поддерживаемая "точка с запятой".

Выходные данные будут также представлены в кодировке UTF-8. Вы можете указывать расширение .sql для выходных файлов в форматах MSSQL, PGSQL.

Сообщения об ошибках и предупреждениях направляются в STDERR, выходные данные без указания выходного файла - в STDOUT.

Совет: если вы только начинаете работать с утилитой, не используйте сразу параметры [-of -o]. Так вы сможете получить визуализированный результат на экране, и провести оценку работы алгоритма и верность получаемых данных.



Универсальные параметры командной строки

-i [--input] - входной файл. Без этого параметра основной функционал программы будет недоступен.

-o [--output] - выходной файл. Если данный параметр не указан, выходные данные будут отображаться в терминале.

-of [--output-format] - выходной формат данных. TEXT по-умолчанию, MSSQL, PGSQL.

-t [--type] - тип алгоритма преобразования данных. D - Досье, G - Группы, H - Иерархия, P - СКУД, S - Субординация, V - Отпуска.

-tt [--template] - получить .csv файл шаблон для указанного алгоритма [--type].

Например, так можно получить шаблон для построения структуры организации:

> stcsvsync -t H -tt
id;parent;name;[user;[NB_domain]];[computer;[FQ_domain]]

Получить шаблон для заполнения данных о сотрудниках в виде .csv файла

> stcsvsync -t D -tt -o dos_template.csv
> cat dos_template.csv
user;[NB_domain];[fio];[department];[contacts];[profile]


Полный список ключей командной строки
Сокр.ПолныйРежимНазначение
-h--helpПоказать краткую справку и список параметров
-i--inputВходной файл
-o--outputВыходной файл
-of--output-formatФормат выходных данных: [MSSQL | PGSQL | TEXT] по-умолчанию: TEXT
-t--typeD | G | H | P | S | V (Досье, Группы, Иерархия, СКУД, Субординация, Отпуска)
-ns--no-sort[все]Отключить сортировку перед выводом
-tt--template[все]Создать базовый шаблон для указанного типа отчёта (.csv)
-hl--header-lines[все]Количество строк представляющих заголовок .csv-файла [0..] по-умолчанию: 1
-dnb--domain-netbios[все]Домен пользователя (NB_domain) в формате NETBIOS. Применяется, когда невозможно иначе установить значение
-dfq--domain-fqdn[GH]Домен компьютера (FQ_domain) в формате FQDN. Применяется, когда невозможно иначе установить значение
-ci--column-id[GHS]Номер колонки id (номер)
-cp--column-parent[HS]Номер колонки parent (родитель)
-cn--column-name[H]Номер колонки name (имя)
-cu--column-user[все]Номер колонки user (пользователь)
-cc--column-computer[GH]Номер колонки computer (компьютер)
-cnb--column-domain-netbios[все]Номер колонки NB_domain
-cfq--column-domain-fqdn[GH]Номер колонки FQ_domain
-cf--column-fio[D]Номер колонки fio или форматная строка или константа
-cd--column-department[D]Номер колонки department (отдел) или форматная строка или константа
-ct--column-contacts[D]Номер колонки contacts (контакты) или форматная строка или константа
-cpr--column-profile[D]Номер колонки profile (профиль) или форматная строка или константа
-nd--no-depth[S]Запрещает наблюдение за низлежащими группами иерархии
-cb--column-boss[S]Номер колонки boss
-bv--boss-value[S]Верное значение для boss
-dbu--db-user-template[S]Существующий SQL пользователь, выступающий в роли шаблона
-cvb--column-value-begin[PV]колонка с датой начала
-cve--column-value-end[PV]колонка с датой окончания
-cvr--column-value-reason[V]колонка с причиной


Построение структуры организации

(описание соотв. страницы в "Глобальных настройках": здесь)

Обратите внимание: генерируемый SQL-скрипт сначала очистит существующие данные об иерархии, и после загрузит обновленные данные!

Узлами иерархии могут выступать каталоги, представляющие группы (отделы), пользователи и компьютеры.

На основе одних и тех же данных, вы можете построить различные варианты иерархии:

  1. Структура отделов без наполнения
  2. > stcsvsync -i example.csv -t H -ci A -cp B -cn C
  3. Структура отделов и пользователей
  4. > stcsvsync -i example.csv -t H -ci A -cp B -cn C -cu D -cnb E
  5. Структура отделов и компьютеров
  6. > stcsvsync -i example.csv -t H -ci A -cp B -cn C -cc F -cfq G
  7. Структура отделов, пользователей и компьютеров
  8. > stcsvsync -i example.csv -t H -ci A -cp B -cn C -cu D -cnb E -cc F -cfq G

Пример полностью построенной иерархии на основе исходной таблицы

> stcsvsync -i example.csv -t H -ci A -cp B -cn C -cu D -cnb E -cc F -cfq G
Исходная таблицаПостроенная иерархия
Таблица: example.csv
ABCDEFGH
1idparentnameusernetbios_domaincomputerfqdn_domainboss
211Company
321Department 1
431Department 2
542Sub department 1.1
651Sub department 1.2
765Sub department 1.2.1user1COMPANYcomputer1company.comyes
865Sub department 1.2.1user2COMPANYcomputer2company.com
965Sub department 1.2.1user3COMPANYcomputer3company.com
105user4COMPANYcomputer4company.com
114user5COMPANYcomputer5company.comyes
124user6COMPANYcomputer6company.com
131COMPANY\user7computer7.company.com
142user8COMPANYcomputer8company.comyes
153user9COMPANYcomputer9company.com
Company
  COMPANY\user7
  COMPUTER7.company.com
  Department 1
    COMPANY\user8
    COMPUTER8.company.com
    Sub department 1.1
      COMPANY\user5
      COMPANY\user6
      COMPUTER5.company.com
      COMPUTER6.company.com
  Department 2
    COMPANY\user9
    COMPUTER9.company.com
  Sub department 1.2
    COMPANY\user4
    COMPUTER4.company.com
    Sub department 1.2.1
      COMPANY\user1
      COMPANY\user2
      COMPANY\user3
      COMPUTER1.company.com
      COMPUTER2.company.com
      COMPUTER3.company.com

Строки 2-6 строят только иерархию групп (отделов)
Строки 7-9 помимо иерархии групп добавляют также данные о пользователе и компьютере
Строки 10-15 не содержат данных о группах, и добавляют только информацию о пользователях и компьютерах

Обратите внимание на различный результат работы строк 9 и 10:
 10 строка добавляет пользователя user4 и компьютер computer4 к родительскому узлу 5 (Sub department 1.2)
 9 строка, несмотря на указание того-же родителя 5 (Sub department 1.2), добавляет пользователя user3 и компьютер computer3 к узлу 6 (Sub department 1.2.1)

Необходимо учитывать подобные различия в логике при составлении исходных таблиц с данными!
 13 строка показывает возможность передачи доменного имени вместе с именами пользователя и компьютера


Права наблюдения за сотрудниками

(описание соотв. страницы в "Глобальных настройках": здесь)

Утилита ожидает, что в настройках существует пользователь-шаблон, права которого будут скопированы при создании новых пользователей.
Создавайте подобного пользователя без использования символа "\" в его имени (см. следующее замечание)

Обратите внимание:
 генерируемый SQL-скрипт удалит из таблицы БД пользователей вида: DOMAIN\username.
 утилита не имеет возможности проверить наличие указанного шаблонного пользователя [--db-user-template]. В случае его отсутствия, создаваемые пользователи не будут обладать назначенными правами, и дальнейшее ручное заполнение прав может стать трудоёмкой операцией!

> stcsvsync -i example.csv -t S -ci A -cp B -cn C -cu D -cnb E -cb H -dbu template_user

user8 имеет возможность наблюдать за группой Department 1 и её подчинёнными группами и пользователями находящимся в них
user5 наблюдает за группой Sub department 1.1 и её подчинёнными ...
user1 наблюдает за группой Sub department 1.2.1 и её подчинёнными ...

Вы можете изменить данное поведение указав параметр [--no-depth]

> stcsvsync -i example.csv -t S -ci A -cp B -cn C -cu D -cnb E -cb H -nd -dbu template_user

user8 наблюдает за user8
user5 наблюдает за user5, user6
user1 наблюдает за user1, user2, user3



Заполнение данных о сотрудниках

(описание соотв. страницы в "Глобальных настройках": здесь)

Таблица userinfo.csv

ABCDEFG
1usernetbios_domainlastnamefirstnamedepartmente-mailphone
2user1COMPANYSmithJohnitjohn@company.com111-222-33-44
3user2COMPANYWhiteJaneitjane@company.com111-222-33-45
4user3COMPANYHarrisonHarryitharry@company.com111-222-33-46
5user4COMPANYRobbinsOscarmanagementoscar@company.com111-222-33-47
6user5COMPANYDavisMilessalesmiles@company.com111-222-33-48
7user6COMPANYMorganAudreysalesaudrey@company.com111-222-33-49
8COMPANY\user7JonesWilliamsaleswilliam@company.com111-222-33-50
9user8COMPANYRossBennettmanagementbennett@company.com111-222-33-51
10user9COMPANYGrovesEllamanagementella@company.com111-222-33-52

Командная строка:

> stcsvsync -i userinfo.csv -t D -cu A -cnb B -cf "%D %C" -cd E -ct "%F, %G" -cpr "profile1"

Для ФИО [--column-fio] указана формула "%D %C". Понимается следующим образом: значение в 4 столбце, пробел, значение в 3 столбце.

Отдел [--column-department] указан номер колонки E (5). Вариант с формулой "%E" даст такой же результат.

Контакты [--column-contacts] формула "%F, %G". Значение в 6 столбце, запятая, пробел, значение в 7 столбце.

Профиль [--column-contacts] константа "profile1"

Результирующий вывод:

COMPANY\user6
        FIO:        Audrey Morgan
        Department: sales
        Contacts:   audrey@company.com, 111-222-33-49
        Profile:    profile1
COMPANY\user8
        FIO:        Bennett Ross
        Department: management
        Contacts:   bennett@company.com, 111-222-33-51
        Profile:    profile1
COMPANY\user9
        FIO:        Ella Groves
        Department: management
        Contacts:   ella@company.com, 111-222-33-52
        Profile:    profile1
COMPANY\user3
        FIO:        Harry Harrison
        Department: it
        Contacts:   harry@company.com, 111-222-33-46
        Profile:    profile1
COMPANY\user2
        FIO:        Jane White
        Department: it
        Contacts:   jane@company.com, 111-222-33-45
        Profile:    profile1
COMPANY\user1
        FIO:        John Smith
        Department: it
        Contacts:   john@company.com, 111-222-33-44
        Profile:    profile1
COMPANY\user5
        FIO:        Miles Davis
        Department: sales
        Contacts:   miles@company.com, 111-222-33-48
        Profile:    profile1
COMPANY\user4
        FIO:        Oscar Robbins
        Department: management
        Contacts:   oscar@company.com, 111-222-33-47
        Profile:    profile1
COMPANY\user7
        FIO:        William Jones
        Department: sales
        Contacts:   william@company.com, 111-222-33-50
        Profile:    profile1


Заполнение данных об отпусках/больничных

(описание соотв. страницы в "Глобальных настройках": здесь)

Обратите внимание: генерируемый SQL-скрипт сначала очистит таблицу с данными персональных отпусков/больничных, и после загрузит обновленные данные!

Данный функционал не ограничен только отпусками. Подобным образом предполагается задавать любые обоснованные периоды отсутствия сотрудника. В отчётах данные периоды не будут трактоваться как прогулы и отсутствие на рабочем месте.

Таблица vacations.csv

ABCD
1userbeginendreason
2DOMAIN\j.smith14.01.20241
3DOMAIN\j.smith15.01.20241
4DOMAIN\j.smith16.01.20241
5DOMAIN\j.smith17.01.20241
6DOMAIN\j.smith19.01.20241
7DOMAIN\j.smith20.01.20241
8DOMAIN\j.smith21.01.20241
9DOMAIN\j.smith25.01.202430.01.20241
10DOMAIN\w.johnes01.02.202417.02.20242
11DOMAIN\robbins28.02.202412.02.20243
12DOMAIN\j.smith29.01.202412.02.20241
13DOMAIN\j.smith07.02.20241
14DOMAIN\j.smith09.02.20241
15DOMAIN\j.smith07.01.202415.01.20241

Командная строка:

> stcsvsync -i vacations.csv -t V -cu 1 -cvb 2 -cve 3 -cvr 4
DOMAIN\j.smith:  [2024-01-07 (1) 2024-01-17] [2024-01-19 (1) 2024-01-21] [2024-01-25 (1) 2024-02-12]
DOMAIN\w.johnes:  [2024-02-01 (2) 2024-02-17]
DOMAIN\robbins:  [2024-02-12 (3) 2024-02-28]

Имя пользователя [--column-user], дата начала [--column-value-begin] являются обязательными

Дата окончания [--column-value-end] может быть не указана (будет восприниматься идентичной дате начала)

Причина отсутствия [--column-value-reason] принимает целочисленные значения, а если указанное значение не удается преобразовать в число, то код причины будет записан в базу как 0.

Даты могут быть заданы в форматах: dd.mm.yyyy, dd/mm/yyyy, dd-mm-yyyy, yyyy-mm-dd, yyyymmdd. (Здесь: dd - день месяца, mm - месяц, yyyy - год)

В тех отчетах комплекса, где выводится причина отсутствия, некоторые коды имеют буквенные эквиваленты. Вы можете подобрать подходящие значения или использовать любые произвольные.

7 :'КР', 10:'К',  14:'ОТ', 15:'ОД', 16:'У',  17:'УЧ', 18:'УД', 19:'Р',
20:'ОЧ', 21:'ОЖ', 22:'ДО', 23:'ОА', 24:'ОЗ', 25:'Б',  26:'Т',  27:'ОВ',
28:'НВ', 29:'Г',  30:'НБ', 32:'НС', 33:'В',  34:'ЗБ', 37:'Д'

Важно: возможные наложения (перекрытия) периодов для пользователя будут объединены, и не являются проблемой!



Импорт данных СКУД (Системы Контроля и Управления Доступом)

Обратите внимание: генерируемый SQL-скрипт не будет очищать таблицу с данными СКУД, т.к. предполагаются последовательные сеансы импорта данных. Если при импорте произошла ошибка, обратитесь к администратору БД для удаления только последних данных (за импортируемый период и по импортируемым пользователям).

Таблица pacs.csv

ABC
1userenterexit
2DOMAIN\j.smith15.01.2024 09:00:0015.01.2024 18:00:00
3DOMAIN\j.smith16.01.2024 09:00:0016.01.2024 18:00:00
4DOMAIN\j.smith17.01.202417.01.2024 18:00:00
5DOMAIN\w.johnes22.01.2024 08:0022.01.2024 17:00
6DOMAIN\robbins22.01.2024 08:0022.01.2024 17:00
7DOMAIN\j.smith21.01.2024 09:0021.01.2024 18:00:00

Командная строка:

> stcsvsync -i pacs.csv -t P -cu 1 -cvb 2 -cve 3
DOMAIN\j.smith:
        [2024-01-15 09:00:00 - 2024-01-15 18:00:00] 9h
        [2024-01-16 09:00:00 - 2024-01-16 18:00:00] 9h
        [2024-01-17 00:00:00 - 2024-01-17 18:00:00] 18h
        [2024-01-21 09:00:00 - 2024-01-21 18:00:00] 9h
        
DOMAIN\w.johnes:
        [2024-01-22 08:00:00 - 2024-01-22 17:00:00] 9h
        
DOMAIN\robbins:
        [2024-01-22 08:00:00 - 2024-01-22 17:00:00] 9h

Имя пользователя [--column-user], дата начала (входа) [--column-value-begin], дата окончания (выхода) [--column-value-end] являются обязательными



Назначение профиля настроек пользователям и компьютерам (GroupSettings)

(описание соотв. страницы в "Глобальных настройках": здесь)

Номер профиля настроек нужно передавать через параметр id, указав номер колонки через -ci

Таблица groupsettings.csv

ABCDE
1usernb_domaincomputerfqdn_domainprofile_id
2DOMAIN\j.smith8
3k.andersonDOMAIN9
4laptop152domain.local12
5w.jhonesDOMAIN10
6DOMAIN\robbins3
7SERVER-FS3.domain.local2
8WSADF34RTdomain.local11

Командная строка:

> stcsvsync -i example.csv -t G -cu A -cnb B -cc C -cfq D -ci E
8        DOMAIN\j.smith
9        DOMAIN\k.anderson
3        DOMAIN\robbins
10       DOMAIN\w.jhones
12       LAPTOP152.domain.local
2        SERVER-FS3.domain.local
11       WSADF34RT.domain.local


Запуск полученных SQL-скриптов

Запуск можно осуществлять любыми доступными средствами.
Важно! Не забудьте указать имя SQL-базы (stkh).

Пример для MSSQL-утилиты sqlcmd:

> sqlcmd -d stkh -i script.sql -o output.txt -U dbadmin -P "*******"
> sqlcmd -d stkh -i script.sql -o output.txt
Пример для PGSQL-утилиты psql:
> psql -d stkh -f script.sql -o output.txt -U postgres

Внимание! После успешного выполнения SQL-скрипта синхронизации подчиненности (субординации) необходимо запустить "Мастер конфигурации БД" (он добавит созданных пользователей к БД и назначит им права)

© СТАХАНОВЕЦ