Синхронизация с АД

Синхронизация пользователей Active Directory с Инвентаризацией: какие поля переносятся в каждом направлении и по каким ключам сопоставляются учетные записи.

Синхронизацию выполняют два внешних PowerShell-скрипта, обменивающихся данными с инвентаризацией через REST API:

  • AD-Inventory-sync — сценарий AD → Инвентаризация (источник данных о сотрудниках — сам AD);
  • inventory-ad-sync — сценарий Инвентаризация → AD (источник данных — кадровая система, из которой заполнена Инвентаризация).

Перечни ниже сверены с кодом скриптов (июль 2026); актуальный источник истины — README и код самих скриптов.

Сценарий AD → Инвентаризация

Пользователь, не найденный в Инвентаризации, создается. Синхронизацию отдельной записи можно отключить на стороне Инвентаризации (признак «не синхронизировать»).

Синхронизируемые поля:

  • ФИО
  • Login
  • Email
  • GUID учетной записи (записывается в Инвентаризацию, чтобы находить сотрудника после переименований)
  • Должность
  • Организация (должна уже существовать в Инвентаризации — автоматически не создается)
  • Подразделение (при отсутствии создается автоматически в рамках организации)
  • Номер телефона внутренний
  • Номер телефона сотовый
  • Признак «уволен» (по отключению учетной записи в AD)

Ключ

При отсутствии совпадения по очередному ключу поиск идет по следующему:

  1. GUID: uid ↔ objectGUID
  2. Логин: login ↔ sAMAccountName
  3. ФИО: name ↔ displayName

Сценарий Инвентаризация → AD

Помимо переноса полей скрипт переименовывает объект AD при смене ФИО и деактивирует учетную запись уволенного сотрудника (через внешний скрипт ad-usermanagement; автоувольнение отключаемо, есть список исключений).

Синхронизируемые поля Инвентаризация → AD:

  • ФИО (имя объекта AD, выводимое имя, имя и фамилия)
  • Табельный номер и ID организации
  • Организация
  • Подразделение
  • Должность
  • УИД сотрудника (ИНН/СНИЛС и т.п.)
  • Номера телефонов: мобильный, внутренний, городской (приводятся к единому формату)
  • E-Mail — если в Инвентаризации указана почта вне корпоративного домена (например, кадры прописали личную)

Обратно (AD → Инвентаризация) этот же скрипт переносит:

  • Login
  • E-Mail — если почта в корпоративном домене (сотруднику выдан корпоративный ящик)

Ключ

  1. Логин: login ↔ sAMAccountName
  2. Табельный №: num ↔ employeeID (в связке с ID организации: org_id ↔ employeeNumber; если поддержка нескольких организаций выключена — первая организация)
  3. УИД (ИНН): uid ↔ adminDescription
  4. ФИО: name ↔ displayName
  5. Табельный № вместо ФИО: num ↔ displayName (применимо при сквозной нумерации табельных)

Если найденный по ключу сотрудник уволен, скрипт дополнительно ищет его другие трудоустройства по УИД или ФИО.