Миграция · 19 сен 2026 г. · 12 мин чтения

Переход с ManageEngine Service Desk Plus — практическое руководство

Что взять с собой, что оставить позади и как настроить скрипт экспорта CSV из SDP в LinaDesk, не нарушив историю пользователей.

Любая миграция ITSM — это небольшой археологический проект. Десять лет истории заявок, три или четыре поколения пользовательских полей, наполовину забытое правило SLA, которое действует только во время заморозки на конец финансового года, — всё это должно пережить переезд, иначе операционная команда потеряет институциональную память. Это руководство написано для инженера или ИТ-менеджера, которому досталась инсталляция ManageEngine Service Desk Plus (SDP) и поручение перенести её в LinaDesk до следующего цикла продления.

Мы предполагаем, что у вас локальная версия SDP (сборка 14xxx или 15xxx), где-то между 5 000 и 200 000 исторических заявок, хранилище пользователей на базе Active Directory и небольшая горстка интеграций по email/LDAP. Если ваша версия SDP — редакция MSP, или вы используете Enterprise с плотно заполненным модулем CMDB, часть сопоставлений ниже придётся расширить — форма работы остаётся той же.

Почему организации уходят от SDP

Прежде чем говорить о механике, разберём причины — они определяют дальнейшие решения по сопоставлению данных. На практике команды, начинающие миграцию с SDP на LinaDesk, приходят к одной или нескольким из следующих причин:

Причина имеет значение, потому что она диктует, что переносится. Миграция, движимая требованиями KVKK, как правило, сохраняет всё, потому что аудиторы будут об этом спрашивать. Миграция, движимая соображениями стоимости, охотно оставит позади функции, которыми никто не пользуется.

Этап 1 — Обследование (2 недели)

Этап обследования существует для того, чтобы предотвратить два худших исхода миграции ITSM: отсутствие данных, которые в итоге оказываются важными, и перенесённые данные, которые в итоге оказываются мусором. Две недели кажутся долгим сроком — это не так.

Провести инвентаризацию инсталляции SDP

Проведите честную инвентаризацию. Из консоли администратора SDP зафиксируйте следующее в общей таблице:

Результатом должен быть не документ, а список решений. Каждый пункт помечается как перенести, пересобрать или отказаться. Эмпирическое правило: если шаблон или пользовательское поле использовались менее чем в трёх заявках за последние двенадцать месяцев, это кандидат на отказ.

Опросить операционную команду

Обследование — это не только обход консоли администратора. Пообщайтесь с тремя специалистами L1, одним лидом L2 и руководителем службы поддержки. Спросите, какие отчёты они открывают еженедельно, какими макросами пользуются и какие поля привычно оставляют пустыми. Панели, которые никто не открывает, — это поля, которые никому не нужны.

Сопоставить зависимости интеграций

SDP часто служит хабом для смежных систем: инструмент мониторинга публикует оповещения как заявки, сканер активов записывает записи КЕ, интеграция с расчётом зарплаты запускает заявки на оформление сотрудников. Каждую из них нужно либо перенаправить на API LinaDesk, либо приостановить на время перехода. Пропустите хоть одну — и в понедельник утром вас встретит стопка осиротевших заявок.

Этап 2 — Сопоставление данных

Модели данных SDP и LinaDesk — родственники, а не близнецы. Таблица ниже — это сопоставление, которое мы используем как отправную точку; кастомизация всегда добавляет строки.

Сущность SDPСущность LinaDeskПримечания
Requesters (заявители)Users (роль: EndUser)Сопоставляйте по UPN, а не по внутреннему user_id — см. раздел про AD.
Technicians (специалисты)Users (роль: Technician)Сохраните принадлежность к группам специалистов как команды (Teams) LinaDesk.
Groups (группы)TeamsSupport Group в SDP ↔ Team в LinaDesk — чистое сопоставление 1:1.
Requests (заявки)TicketsСохраните исходный CreatedAt как CreatedAtUtc (см. раздел о датировке задним числом).
Request notes (заметки к заявке)TicketCommentsФлаг «приватно/публично» сопоставляется напрямую.
Request attachments (вложения)AttachmentsРасположение хранилища блобов меняется; URL в телах заметок нужно переписать.
Assets (активы)AssetsProductType в SDP ↔ AssetCategory в LinaDesk.
Asset Additional Fields (доп. поля актива)CustomFields (scope=Asset)Сопоставление типов: текст SDP → string LinaDesk; список выбора SDP → enum LinaDesk.
Solutions (статьи базы знаний)KnowledgeArticlesФлаг статуса утверждения сохраняется.
Categories / Subcategories / ItemsДерево категорий (вложенное)LinaDesk использует единое вложенное дерево; трёхуровневое разделение SDP сводится в путь.
SLA Policies (политики SLA)SlaPoliciesРабочие часы переносятся в WorkCalendar; см. раздел про SLA.
Business Rules (бизнес-правила)AutomationsТребуется переписать — прямого импорта нет.
Change requests (запросы на изменение)ChangesЦепочки согласования CAB пересобираются в процессе ChangeApproval в LinaDesk.

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

Этап 3 — Экспорт

У SDP есть три способа выгрузить данные: встроенные плановые экспорты, REST API v3 и прямой доступ к базе данных. У каждого есть своё место.

REST API v3 для структурированных данных

API — правильный источник для пользователей, специалистов, групп, категорий, политик SLA и любой сущности, которая нужна вам с полным набором полей. Эндпоинты стабильны, поддерживают постраничную выборку и возвращают JSON, который чисто ложится на нашу целевую схему.

Минимальный скрипт PowerShell для постраничной выгрузки всех заявок в каталог JSON-блобов:

# requires SDP TECHNICIAN_KEY with read access
$sdpUri  = "https://sdp.internal/api/v3/requests"
$authKey = $env:SDP_TECHNICIAN_KEY
$outDir  = "C:\migration\raw\requests"
New-Item -ItemType Directory -Force -Path $outDir | Out-Null

$rowsPerPage = 100
$rowIndex    = 1

do {
  $inputData = @{
    list_info = @{
      row_count   = $rowsPerPage
      start_index = $rowIndex
      get_total_count = $true
      fields_required = @(
        "id","subject","description","status","priority",
        "created_time","resolved_time","closed_time",
        "requester","technician","group","category","subcategory","item",
        "udf_fields")
    }
  } | ConvertTo-Json -Depth 6 -Compress

  $resp = Invoke-RestMethod `
    -Uri "$sdpUri?input_data=$([uri]::EscapeDataString($inputData))" `
    -Headers @{ "authtoken" = $authKey } `
    -Method GET

  $resp.requests | ForEach-Object {
    $_ | ConvertTo-Json -Depth 12 |
      Out-File -Encoding utf8 "$outDir\req_$($_.id).json"
  }

  $total     = $resp.list_info.total_count
  $rowIndex += $rowsPerPage
} while ($rowIndex -le $total)

Эквивалентные скрипты для пользователей, групп и активов структурно идентичны. Держите их под контролем версий — вы запустите их минимум трижды: один раз во время пробного прогона, один раз во время репетиции и один раз во время самого перехода.

Прямое чтение базы данных для архивных вложений

SDP хранит вложения отдельно от тела заявки. API возвращает метаданные, но не сами блобы. Для получения самих байтов либо используйте эндпоинт файлового вложения для каждой записи (медленно, но соблюдает права доступа), либо читайте из таблицы FileAttachment в SDP плюс каталог Attachments на диске. На крупных инсталляциях (100 тыс.+ заявок с вложениями) второй вариант — единственный реалистичный; запланируйте ночной rsync.

Этап 4 — Сохранение истории заявок

Самое важное поле во всей миграции — CreatedAtUtc. Если оно молча принимает значение сейчас, десять лет истории сжимаются в один день, и каждый отчёт по SLA теряет смысл.

LinaDesk поддерживает создание заявок задним числом через эндпоинт массового импорта. Правило таково:

Каждая заявка, комментарий, переход статуса и запись аудита несёт свою исходную временную метку UTC. Ничто в пути импорта не может её перезаписать.

Конкретно: поле created_time.value в SDP — это строка Unix-времени в миллисекундах. Преобразуйте её в UTC ISO-8601 и передайте как CreatedAtUtc. Сделайте то же самое для resolved_time, closed_time и временной метки создания каждой отдельной заметки. Если у заметки есть updated_time, отличающееся от created_time, сохраните оба значения — команды аудита иногда это проверяют.

Скрытая ловушка: временные метки SDP хранятся в часовом поясе учётной записи, но API отдаёт их в UTC только если у пользователя технического ключа часовой пояс отображения установлен как UTC. Проверьте это один раз на трёх известных записях, прежде чем доверять всей выгрузке.

Этап 5 — Повторное сопоставление AD / LDAP

Пользователи почти всегда — самое сложное соединение во всей миграции. SDP внутренне идентифицирует пользователя по его REQUESTERID. Active Directory идентифицирует того же человека по его objectGUID. LinaDesk использует ExternalId (который мы рекомендуем задавать равным objectGUID из AD).

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

  1. UPN (userPrincipalName). Переживает переименования в AD и перемещения между лесами. Используйте как основное соединение.
  2. Адрес электронной почты. Резервный вариант, если UPN отсутствует.
  3. sAMAccountName. Последний вариант, поскольку уникальность не гарантирована между лесами.

Любой пользователь, не прошедший все три соединения, попадает в файл orphans.csv. В каждой реальной миграции, которую мы проводили, этот файл содержал от 20 до 400 строк — люди, покинувшие компанию, сервисные учётные записи, никогда не привязанные к AD, и заявители, отправившие одну-единственную заявку по email в 2018 году. Решите их судьбу вручную. Не пропускайте этот шаг: эти «сироты» всё ещё владеют историческими заявками, и их имена должны корректно отображаться в отчётности.

Этап 6 — Повторное сопоставление политик SLA

Модель SLA в SDP — это плоский движок правил: сопоставление по критериям заявки, применение окон реакции/решения к календарю рабочих часов. Модель LinaDesk близка, но не идентична:

Единственный значимый пробел касается частичных пауз. SDP позволяет ставить SLA на паузу, когда заявка находится в статусе Waiting for Requester. LinaDesk требует, чтобы то же самое поведение было явно смоделировано как массив PauseOnStatus в политике SLA. Выполните это сопоставление прямо в скрипте миграции, а не надейтесь, что значения по умолчанию совпадут — в каждой изученной нами инсталляции SDP был как минимум один нестандартный статус паузы.

Более подробное обсуждение календарной стороны проектирования SLA — в статье о проектировании SLA-календаря: описанные там решения по моделированию напрямую применимы к тому, как вы пересоберёте календарь в LinaDesk.

Этап 7 — Портал, брендинг, шаблоны уведомлений

Это не переносится. Это пересобирается.

Портал самообслуживания SDP — это сильно шаблонизированная оболочка в стиле Zoho. Портал LinaDesk — современный интерфейс на основе компонентов с той же функциональностью, но другой структурой. Скопируйте визуальные ресурсы (логотип, favicon, фирменные цвета) и тексты (приветственное сообщение, объявления на главной странице, описания категорий), и дайте дизайнеру два дня на пересборку портала в административном интерфейсе LinaDesk.

С шаблонами уведомлений та же история. Извлеките каждый шаблон письма из SDP в виде HTML плюс список переменных, затем пересоберите их в редакторе шаблонов LinaDesk. Синтаксис переменных LinaDesk выглядит как {{Ticket.Number}}; в SDP — $Request.RequestID. Синтаксис можно перевести автоматически; текст нужно проверить вручную.

Этап 8 — Четырёхнедельный параллельный запуск

Переход за один выходной — это игра в орлянку. Параллельная работа SDP и LinaDesk в течение четырёх недель — уже нет, она превращает орлянку в инженерную задачу.

Рекомендуемая нами последовательность:

  1. Неделя -4: LinaDesk развёрнут. Исторические данные импортированы. У всех специалистов L1 есть учётные записи, и они прошли 90-минутное обучение. Маршрутизация почты всё ещё указывает на SDP.
  2. Неделя -3: Ночные повторные импорты выполняются через дельта-API SDP, удерживая LinaDesk в пределах 24 часов от SDP. Специалистов просят выборочно проверять десять новых заявок в день в LinaDesk и заводить баг-репорты. Портал остаётся выключенным.
  3. Неделя -2: Пятнадцать процентов входящей почты направляется в LinaDesk. Специалисты обрабатывают обе очереди. Отчёты формируются параллельно в обеих системах и сравниваются.
  4. Неделя -1: Пятьдесят процентов входящей почты направляется в LinaDesk. Бета-версия портала открыта для небольшой группы пилотных заявителей. Любое расхождение уровня P0/P1 блокирует переход.
  5. Выходные перехода: Финальный дельта-импорт. Маршрутизация почты переключается на 100% LinaDesk. Портал открывается для всех заявителей. SDP переводится в режим только для чтения; остаётся онлайн 90 дней для целей аудита.

90-дневный период только для чтения имеет значение. Регуляторы (и внутренний аудит) время от времени задают вопросы, требующие посмотреть, как выглядела заявка в исходной системе на конкретную дату. Удаление SDP на следующий день после перехода — ошибка, которую мы видели дважды, и оба раза она заканчивалась неудобным разговором о сохранении данных по требованию юристов (legal hold).

Чек-лист проверки после миграции

Прежде чем подписывать завершение проекта:

Типичные ошибки

Функции, которые есть в SDP, но отсутствуют в LinaDesk v1

Честный список. LinaDesk v1 не включает:

Если что-то из перечисленного критично для вашей работы, решите это на этапе обследования, а не за неделю до перехода.

Недооценка объёма миграции пользовательских полей

В каждой изученной нами миграции было как минимум одно пользовательское поле, заполненное в 60% исторических заявок, но лишь в 3% заявок за последний год. Кто-то перестал им пользоваться годы назад, и никто его не удалил. Перенесите его всё равно — осиротевшие данные всё ещё видны для аудита.

Доверие интерфейсу экспорта «по диапазону дат» в SDP

Интерфейс экспорта SDP в некоторых сборках молча ограничивает число строк до 5 000, а в других — до 10 000, и никакой ошибки при этом не возникает — только усечённый CSV. Всегда используйте API для всего, что превышает несколько сотен строк.

Обсудите с нами вашу миграцию с SDP

Мы прошли этот план от начала до конца четыре раза за последние восемнадцать месяцев. Если вы планируете свою миграцию, мы проведём вас через шаблон обследования, который используем сами.

Связаться с командой LinaDesk

Похожие материалы