Skip to main content

Migration from Microsoft products

Applies to: SimpleTwo 1.0.48, simpletwo-move 0.1.0 · Checked: 03.11.2026

simpletwo-move is a separate tool that moves an organisation from Active Directory, Exchange 2016/2019 and Skype for Business to SimpleTwo. It runs in your network, only reads the sources, and writes to SimpleTwo with your own administrator token — the same actions you have in the console. Its progress is shown in the console: Users → Migration.

Today the tool moves meeting rooms and equipment and one person's calendar, replacing its Skype for Business meetings with SimpleTwo meetings. Mail, contacts and people's accounts come in the next steps.

1. Before you start​

  • A host in the customer's network that reaches a domain controller (LDAPS on port 636, or LDAP on 389 with StartTLS) and SimpleTwo over HTTPS. Windows or Linux (amd64), or macOS (Apple silicon).
  • The tool. The vendor builds it: simpletwo-move-windows-amd64.exe, simpletwo-move-linux-amd64 or simpletwo-move-macos-arm64 (Apple silicon), with Export-RoomPolicies.ps1 and plan.example.json beside it. The macOS build is not signed: before its first start, clear its download mark — xattr -d com.apple.quarantine simpletwo-move-macos-arm64 && chmod +x simpletwo-move-macos-arm64.
  • A read-only AD account, for example svc-move@corp.local.
  • A SimpleTwo administrator token: a personal access token (st_pat_…) from your profile in the console. Your role must allow changing users (users:write).
  • The rooms' mail domains accepted in SimpleTwo (Mail → Domain & DNS). Otherwise the rooms' addresses are not written, and the report says so.

2. Export the booking settings from Exchange​

A room's booking settings live in its mailbox, not in AD, so they are exported separately. In the Exchange Management Shell:

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

The script only reads (Get-Mailbox, Get-CalendarProcessing, Get-Recipient). Without -Equipment only rooms are exported.

3. The plan file​

The easiest way to fill the plan in is the tool's window. Start the tool without a command — on Windows double-click simpletwo-move-windows-amd64.exe in the project's folder, on Linux and macOS run ./simpletwo-move-… in a terminal from the project's folder — and it opens a page in the browser, served by this computer:

  • Plan — a form over every section below. The passwords and the token are set here too: they are written into files beside the plan and never shown back. Every section has a check: the AD connection (how many rooms were found), reading the booking rules file, opening a mailbox's calendar over EWS, the token at the SimpleTwo directory and console. A Skype for Business number can be run through the conversion rules on the spot.
  • Run — the rooms' dry run, move and switch, and a person's calendar; progress, rate and the estimate are shown on the page.
  • Reports — the runs with their report lines, the register of what SimpleTwo lacks, CSV export.

The page is reachable from this computer only, and the address the tool prints carries the window's key — do not pass it on. The window closes with the tool (Ctrl+C in its console). Another plan file: simpletwo-move -plan D:\move\plan.json ui; the address and port: -listen; no browser: -no-browser.

The tool need not run on the Exchange server or on a domain-joined computer: it only needs network access to AD, EWS and SimpleTwo. Windows is needed only to export the booking rules (step 2).

The plan can also be written by hand: copy plan.example.json to plan.json next to the tool and fill it in:

SectionWhat to set
projectthe project's name in Latin letters: the console shows its progress under it
adthe domain controller, the account, the search base, the password's file (password_file)
exchange.room_policiesthe file from step 2
exchange.ewsthe EWS address, the service account, how mailboxes are reached and the password's file — for calendars
calendarhow many days of the past, and the Skype for Business meet URLs (skype.meet_urls)
simpletwothe directory's address (https://dir.…), the console's address and the token's file (token_file)
roomswhether to move equipment; what a room's login is made of: alias, sam or mail
numbersthe numbering plan and the rules that convert Skype for Business numbers
progresshow often to send progress to the console, and the pilot's rate for the estimate

The password and the token are never in the plan: they are in files the plan only names, or in the MOVE_AD_PASSWORD, MOVE_EWS_PASSWORD and MOVE_TOKEN environment variables. A misspelt key in the plan is an error, not a setting silently skipped.

4. The dry run​

simpletwo-move -plan plan.json rooms plan

The dry run writes nothing. It reads AD, the export and SimpleTwo, and says what the move would do: which rooms it would create, what it would write and where it would stop. Exit code 2 means the report has conflicts or refusals.

The last run's report:

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

Each line of the report is an object and a field with a status:

StatusMeaning
assignedwritten (in a dry run: would be written)
keptSimpleTwo already holds what the source says
conflictanother account holds the value, or it was changed in SimpleTwo after the tool wrote it
misfitthe value does not fit SimpleTwo, for example a number outside the plan
missingwhat the object refers to has not moved yet, for example a room's delegate
skippeddeliberately not moved
failedSimpleTwo refused or did not answer

A line where something did not move has a class: product — SimpleTwo cannot carry it yet, data — the source's data is wrong, config — a setting is missing.

5. Conflicts​

  • The login is taken by another account. Name the room's login in the plan: "rooms": {"usernames": {"<objectGUID>": "conf-moscow-3a"}}. The report line gives the objectGUID.
  • An address or number is taken. The room is created without it, and the line names who holds it.
  • Changed in SimpleTwo. If a field was changed in SimpleTwo after the tool wrote it, the tool does not overwrite it: it is a conflict for you to decide.

6. The move​

simpletwo-move -plan plan.json rooms apply

For each room the tool:

  1. creates a room account with its name, capacity, location and a link to the AD object;
  2. writes the primary address and the aliases from proxyAddresses;
  3. writes the internal number from Skype for Business by the plan's rules — once; after that the number belongs to SimpleTwo's numbering plan;
  4. hides the room from the address book: while its bookings live in Exchange, nobody here books it by mistake;
  5. writes the booking rules once the room has a calendar. If it has none yet, a missing line asks you to run the move again.

A second run writes only what changed at the source. The state is in the state directory next to the plan: keep it with the project's papers, and delete it after sign-off.

7. Switching the rooms​

When the rooms' bookings move to SimpleTwo (the last wave of the migration), show them in the address book:

simpletwo-move -plan plan.json rooms show

While the rooms stay at Exchange, check the coexistence lines in the report. A booking from SimpleTwo reaches Exchange as external mail, which Exchange does not process by default. Mark the connector that takes SimpleTwo's mail as internal, or turn on ProcessExternalMeetingMessages for the rooms.

8. A person's calendar and Skype meetings​

The person's SimpleTwo account must already exist. The tool also needs Exchange Web Services: a service account with the ApplicationImpersonation role (or full access to the mailbox, with "access": "delegate" in the plan) and the exchange.ews section of the plan. In calendar.skype.meet_urls list the meet simple URLs of your Skype for Business topology, for example https://meet.corp.local/: they are how the tool recognises a Skype meeting.

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

What moves: future meetings, recurring series that still run (however long ago they started), and past meetings within calendar.past_days days (730 by default). A meeting's UID, its organiser, the attendees' answers and the time zone are kept.

Nothing is sent to anybody. The import is silent: neither the organiser nor the attendees nor outside guests get an invitation, an update or a cancellation.

What happens to Skype meetings:

  • The person organises a future meeting or a running series. The Skype block is removed from its description and location, and a SimpleTwo conference is attached. Its link appears in the description for every attendee in SimpleTwo.
  • Attendees not in SimpleTwo yet — outside guests, and colleagues who have not moved — keep the Skype link while Skype for Business runs. The report lists these meetings (skype.external lines): the organiser should resend them from SimpleTwo before Skype for Business is switched off.
  • The organiser has not moved yet. The Skype link stays. When the organiser moves, the meeting is replaced by their SimpleTwo meeting for every attendee already in SimpleTwo.
  • Past single meetings are not changed: they are history.

Rooms in a meeting stay Exchange addresses: until a room is switched, its bookings are Exchange's.

A second run moves only the meetings that changed in Exchange and removes the ones deleted there. Until the person's switch their SimpleTwo calendar is a copy of Exchange: edits made in SimpleTwo are overwritten by the next run, so the person keeps working in Outlook until then.

9. What SimpleTwo cannot carry yet​

The product lines of every run are folded into one list:

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

Each line gives the source's setting, how many objects it touches, three examples and the proposed change. The list is input for product work. The tool creates no tickets from it.

10. Progress in the console​

When the plan names the console's address, the tool sends its progress there once a minute: Users → Migration. It shows how much is done of how much, errors, conflicts, the rate and the estimated finish. Until the run has measured its own rate (15 minutes or 2% of the work), the estimate uses the pilot's rate and is marked «by the pilot». It also shows what limits the run: the source or SimpleTwo. The tool sends no names or addresses to the console: only counters and the list of gaps.

11. Troubleshooting​

MessageWhat to do
the token is not a personal access tokenthe token's file must hold an st_pat_… from your profile in the console
the token exchange … 401the token was revoked or has expired: issue a new one
AD …: bind as …check the account, the password and access to port 636
not_mail_domain on an address lineaccept the domain in Mail → Domain & DNS and run again
the room's calendar is not provisioned yetthe room's calendar is still being created: run the move again in a few minutes
the room needs approval and none of its delegates is in SimpleTwo yetmove the delegates first, then run again
… is no person's in SimpleTwo: move the person firstthe person has no SimpleTwo account yet
EWS: 401check the EWS service account and its password
EWS: ErrorImpersonateUserDeniedgive the service account the ApplicationImpersonation role, or set "access": "delegate"