Перейти к основному содержимому

Миграция из продуктов Microsoft

Актуально для: SimpleTwo 1.0.48, simpletwo-move 0.1.0 · Проверено: 03.11.2026

simpletwo-move — отдельная утилита, которая переносит организацию с Active Directory, Exchange 2016/2019 и Skype for Business на SimpleTwo. Она работает в вашей сети, читает источники только на чтение и пишет в SimpleTwo вашим собственным токеном администратора — теми же действиями, что доступны вам в консоли. Ход работы видно в консоли: Пользователи → Миграция.

Сейчас утилита переносит переговорки и оборудование и календарь отдельного сотрудника, заменяя его встречи Skype for Business встречами SimpleTwo. Почта, контакты и учётные записи сотрудников появятся следующими шагами.

1. Что нужно заранее​

  • Хост в сети заказчика с доступом к контроллеру домена (LDAPS, порт 636, или LDAP 389 с StartTLS) и к SimpleTwo по HTTPS. Подойдёт Windows или Linux (amd64) или macOS (Apple silicon).
  • Утилита. Её собирает поставщик: simpletwo-move-windows-amd64.exe, simpletwo-move-linux-amd64 или simpletwo-move-macos-arm64 (Apple silicon), рядом — Export-RoomPolicies.ps1 и plan.example.json. Сборка для macOS не подписана: перед первым запуском снимите с неё отметку загрузки — xattr -d com.apple.quarantine simpletwo-move-macos-arm64 && chmod +x simpletwo-move-macos-arm64.
  • Учётная запись AD только для чтения, например svc-move@corp.local.
  • Токен администратора SimpleTwo — персональный токен доступа (st_pat_…) из профиля в консоли. Роль администратора должна позволять менять пользователей (users:write).
  • Домены почты переговорок приняты в SimpleTwo (Почта → Домен и DNS). Иначе адреса переговорок не запишутся, и отчёт скажет об этом.

2. Выгрузка правил бронирования из Exchange​

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

.\Export-RoomPolicies.ps1 -Out rooms.json -Equipment

Скрипт только читает (Get-Mailbox, Get-CalendarProcessing, Get-Recipient). Без -Equipment выгружаются только переговорки.

3. Файл плана​

Проще всего заполнить план в окне утилиты. Запустите её без команды — на Windows двойным щелчком по simpletwo-move-windows-amd64.exe в папке проекта, на Linux и macOS — ./simpletwo-move-… в терминале из папки проекта — и она откроет в браузере страницу на этом же компьютере:

  • План — форма по всем разделам ниже. Здесь же пароли и токен: они записываются в файлы рядом с планом и обратно не показываются. У каждого раздела есть кнопка проверки: подключение к AD (сколько переговорок нашлось), чтение файла правил бронирования, открытие календаря ящика через EWS, токен в каталоге и консоли SimpleTwo. Номер из Skype for Business можно тут же прогнать через правила преобразования.
  • Запуск — пробный прогон, перенос и переключение переговорок, перенос календаря сотрудника; ход, скорость и прогноз окончания видны на странице.
  • Отчёты — прогоны со строками отчёта, перечень недостатков SimpleTwo, выгрузка в CSV.

Страница доступна только с этого компьютера, а адрес, который печатает утилита, содержит ключ окна — не пересылайте его. Окно закрывается вместе с утилитой (Ctrl+C в её консоли). Другой файл плана: simpletwo-move -plan D:\move\plan.json ui; адрес и порт — -listen, без браузера — -no-browser.

Утилита не обязана работать на сервере Exchange или на компьютере в домене: нужен только сетевой доступ к AD, EWS и SimpleTwo. Windows нужен лишь для выгрузки правил бронирования (шаг 2).

План можно писать и руками: скопируйте plan.example.json в plan.json рядом с утилитой и заполните:

РазделЧто указать
projectимя проекта латиницей: под ним ход работы виден в консоли
adадрес контроллера, учётную запись, базу поиска, файл с паролем (password_file)
exchange.room_policiesфайл из шага 2
exchange.ewsадрес EWS, сервисную учётную запись, способ доступа к ящикам и файл с паролем — для календарей
calendarглубину прошлого в днях и адреса собраний Skype for Business (skype.meet_urls)
simpletwoадрес каталога (https://dir.…), адрес консоли и файл с токеном (token_file)
roomsпереносить ли оборудование; из чего делать логин переговорки: alias, sam или mail
numbersномерной план и правила преобразования номеров Skype for Business
progressкак часто отправлять ход работы в консоль и скорость пилота для прогноза

Пароль и токен в файл плана не пишутся: они лежат в отдельных файлах, которые план только называет, или в переменных окружения MOVE_AD_PASSWORD, MOVE_EWS_PASSWORD и MOVE_TOKEN. Опечатка в ключе плана — ошибка, а не молча пропущенная настройка.

4. Пробный прогон​

simpletwo-move -plan plan.json rooms plan

Пробный прогон ничего не записывает. Он читает AD, выгрузку и SimpleTwo и сообщает, что сделал бы перенос: какие переговорки создаст, что в них запишет и где упрётся. Код выхода 2 значит, что в отчёте есть конфликты или отказы.

Отчёт последнего прогона:

simpletwo-move -plan plan.json report > rooms-plan.csv

В отчёте каждая строка — объект и поле со статусом:

СтатусЧто значит
assignedзаписано (в пробном прогоне — будет записано)
keptв SimpleTwo уже так, как в источнике
conflictзначение занято другой учётной записью, или его изменили в SimpleTwo после утилиты
misfitзначение не подходит SimpleTwo, например номер вне плана
missingто, на что ссылается объект, ещё не перенесено, например делегат переговорки
skippedсознательно не перенесено
failedSimpleTwo отказал или не ответил

У строк, где что-то не перенеслось, есть класс: product — SimpleTwo этого пока не умеет, data — данные источника неверны, config — не сделана настройка.

5. Конфликты​

  • Логин занят другой учётной записью. Назовите логин переговорки в плане: "rooms": {"usernames": {"<objectGUID>": "conf-moscow-3a"}}. objectGUID указан в строке отчёта.
  • Адрес или номер занят. Переговорка создаётся без него, строка называет, у кого он.
  • Изменено в SimpleTwo. Если поле изменили в SimpleTwo после того, как утилита его записала, утилита его не перезаписывает: это конфликт, решать вам.

6. Перенос​

simpletwo-move -plan plan.json rooms apply

Для каждой переговорки утилита:

  1. создаёт учётную запись переговорки (вид «переговорная») с названием, вместимостью, расположением и ссылкой на объект AD;
  2. записывает основной адрес и алиасы из proxyAddresses;
  3. записывает внутренний номер из Skype for Business по правилам плана — один раз, дальше номер принадлежит номерному плану SimpleTwo;
  4. скрывает переговорку из адресной книги: пока её бронирования живут в Exchange, здесь её никто не забронирует по ошибке;
  5. записывает правила бронирования, когда у переговорки появится календарь. Если календаря ещё нет, строка missing попросит запустить перенос ещё раз.

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

7. Переключение переговорок​

Когда бронирования переговорок переходят в SimpleTwo (последняя волна миграции), покажите их в адресной книге:

simpletwo-move -plan plan.json rooms show

Пока переговорки живут в Exchange, проверьте строки coexistence в отчёте. Бронь из SimpleTwo приходит в Exchange как внешнее письмо, и Exchange по умолчанию его не обрабатывает. Пометьте коннектор, который принимает почту из SimpleTwo, как внутренний, или включите ProcessExternalMeetingMessages для переговорок.

8. Календарь сотрудника и встречи Skype​

Учётная запись сотрудника в SimpleTwo должна уже существовать. Нужен ещё доступ утилиты к Exchange Web Services: сервисная учётная запись с ролью ApplicationImpersonation (или с полным доступом к ящику, тогда в плане "access": "delegate") и раздел exchange.ews в плане. В разделе calendar.skype.meet_urls перечислите простые адреса собраний вашей топологии Skype for Business, например https://meet.corp.local/: по ним утилита узнаёт встречу Skype.

simpletwo-move -plan plan.json calendar plan ivanov@corp.local
simpletwo-move -plan plan.json calendar apply ivanov@corp.local

Что переносится: будущие встречи, повторяющиеся серии, которые ещё идут (как бы давно они ни начались), и прошедшие встречи за calendar.past_days дней (по умолчанию 730). UID встречи, её организатор, ответы участников и часовой пояс сохраняются.

Никому ничего не отправляется. Импорт тихий: ни организатор, ни участники, ни внешние гости не получают приглашений, обновлений или отмен.

Что происходит со встречами Skype:

  • Сотрудник — организатор будущей встречи или идущей серии. Блок Skype удаляется из описания и места, к встрече прикрепляется конференция SimpleTwo. Её ссылка появляется в описании у всех участников в SimpleTwo.
  • Участники, которых ещё нет в SimpleTwo, — внешние гости и коллеги, которые ещё не переехали, — сохраняют ссылку Skype, пока работает Skype for Business. Отчёт перечисляет такие встречи (строки skype.external): организатору нужно переслать их из SimpleTwo до отключения Skype for Business.
  • Организатор ещё не переехал. Ссылка Skype остаётся. Когда переносят организатора, встреча заменяется его встречей SimpleTwo — у всех участников, которые уже в SimpleTwo.
  • Прошедшие разовые встречи не меняются: это история.

Переговорки во встречах остаются адресами Exchange: их бронированием, пока они не переключены, занимается Exchange.

Повторный запуск переносит только встречи, изменившиеся в Exchange, и убирает удалённые там. До переключения сотрудника его календарь в SimpleTwo — копия Exchange: правки в SimpleTwo перезаписываются следующим запуском, поэтому до переключения сотрудник работает в Outlook.

9. Чего SimpleTwo пока не умеет​

Строки класса product из всех прогонов собираются в перечень:

simpletwo-move -plan plan.json report -gaps > gaps.csv

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

10. Ход работы в консоли​

Если в плане указан адрес консоли, утилита раз в минуту отправляет туда свой ход работы: Пользователи → Миграция. Там видно, сколько сделано из скольких, ошибки, конфликты, скорость и прогноз окончания. Пока прогон не набрал своей статистики (15 минут или 2 % объёма), прогноз считается по скорости пилота и помечен «по пилоту». Видно также, во что упирается работа: в источник или в SimpleTwo. Имён и адресов в консоль утилита не отправляет: только счётчики и перечень недостатков.

11. Разбор отказов​

СообщениеЧто сделать
the token is not a personal access tokenв файле токена должен быть st_pat_… из профиля консоли
the token exchange … 401токен отозван или истёк: выпустите новый
AD …: bind as …проверьте учётную запись, пароль и доступ к порту 636
not_mail_domain в строке адресапримите домен в Почта → Домен и DNS и запустите снова
the room's calendar is not provisioned yetкалендарь переговорки ещё создаётся: запустите перенос снова через несколько минут
the room needs approval and none of its delegates is in SimpleTwo yetсначала перенесите сотрудников-делегатов, затем запустите снова
… is no person's in SimpleTwo: move the person firstу сотрудника ещё нет учётной записи в SimpleTwo
EWS: 401проверьте сервисную учётную запись EWS и её пароль
EWS: ErrorImpersonateUserDeniedвыдайте сервисной учётной записи роль ApplicationImpersonation или укажите "access": "delegate"