Перейти к содержанию

Как мигрировать переговорные комнаты из Exchange

Шаг 1. Выгрузите переговорные комнаты из Exchange

  1. Подключитесь к машине с Exchange.
  2. Создайте скрипт с расширением ps1: export_confrooms.ps1.
  3. В файл export_confrooms.ps1 вставьте следующий код:

    Скачать скрипт

    $confroomMailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails RoomMailbox
    
    $confroomLists = Get-DistributionGroup -ResultSize Unlimited -Filter {RecipientTypeDetails -eq "RoomList"}
    
    $equipmentMailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails EquipmentMailbox
    
    $resources = @()
    
    foreach ($confroom in $confroomMailboxes) {
        $adUser = Get-ADUser -Identity $confroom.Guid -Properties info, co, Country, State, City, StreetAddress, PostalCode, Office
    
        $confroomDetails = [PSCustomObject]@{
            "ResourceType" = "Confroom"
            "GUID" = $confroom.Guid
            "Name" = $confroom.DisplayName
            "Enabled" = $confroom.IsMailboxEnabled
            "Capacity" = $confroom.ResourceCapacity
            "Comment" = $adUser.info
            "Country" = $adUser.co
            "State" = $adUser.State
            "City" = $adUser.City
            "Street" = $adUser.StreetAddress
            "Postal_code" = $adUser.PostalCode
            "Office" = $adUser.Office
            "Location_GUID" = $emptyVar
            "Location_name" = $emptyVar
        }
    
        foreach ($list in $confroomLists) {
            $members = Get-DistributionGroupMember -Identity $list.DisplayName -ResultSize Unlimited
            if ($members.PrimarySmtpAddress -contains $confroom.PrimarySmtpAddress) {
                $confroomDetails.Location_GUID = $list.Guid
                $confroomDetails.Location_name = $list.DisplayName
                break
            }
        }
    
        $resources += $confroomDetails
    }
    
    foreach ($equipment in $equipmentMailboxes) {
        $equipmentDetails = [PSCustomObject]@{
            "ResourceType" = "Equipment"
            "GUID" = $equipment.Guid
            "Name" = $equipment.DisplayName
            "Enabled" = $confroom.IsMailboxEnabled
        }
    
        $resources += $equipmentDetails
    }
    
    $csvFilePath = "confrooms_result.csv"
    $resources | Export-Csv -Path $csvFilePath -Encoding UTF8 -NoTypeInformation
    
    Write-Host "Confrooms information has been exported to $csvFilePath"
    
  4. Откройте Exchange Management Shell и запустите скрипт:

    .\export_confrooms.ps1
    

Результат будет записан в файл confrooms_result.csv, который появится в папке со скриптом. Вы можете задать другой путь до файла изменив в скрипте переменную $csvFilePath.

Шаг 2. Проверьте формат данных

Перед загрузкой данных в Почту VK WorkSpace, обязательно проверьте формат данных. Данные должны быть представлены в формате csv и иметь следующую структуру:

Пример данных

"ResourceType","GUID","Name","Enabled","Capacity","Comment","Country","State","City","Street","Postal_code","Office","Location_GUID","Location_name"
"Confroom","de45f0a1-470f-4257-928d-121f86cdc386","Переговорная 1","True","15","для деловых встреч","Russia","Moscow","Moscow oblast","Lesnaya","123456","North Tower",,
"Confroom","8c46c189-6bef-494e-81ab-04dcdf9d7d58","Переговорная 2","True","100","заметка","Россия","Московская область","Москва","Ленинградский пр-кт, 7","121314","Главный Офис","1f00a72e-d681-44c7-be5f-fd7b500f3c9f","Строение A, Этаж 5"
"Equipment","e2c900af-6449-436f-8fba-e5b53c065cd7","Микрофон","True",,,,,,,,,,
"Equipment","dd8b8bcb-2b34-416d-b80c-6f02bacf8777","Проектор","False",,,,,,,,,,

Основные поля:

  • ResourceType — тип ресурса, должен принимать одно из двух значений: Confroom (переговорная комната) или Equipment (оборудование). Строки с другими значениями ResourceType будут проигнорированы.
  • GUID — уникальный идентификатор переговорки/оборудования.
  • Name — название переговорки/оборудования. Максимальная длина: 50 символов. Более длинные названия будут обрезаны до 50 символов.
  • Enabled — флаг, который позволяет пометить, используется ли переговорка/оборудование. Должен принимать одно из двух значений: True или False.

Поля необходимые только для переговорных комнат:

Остальные поля заполняются только для переговорок, в случае с оборудованием они не учитываются

  • Capacity — вместимость переговорной комнаты. Числовое значение. Если не заполнить или указать символы, будет выбрано значение по умолчанию — 0.
  • Comment — комментарий.
  • Country, State, City, Street, Postal_code — страна, область, город, улица, почтовый индекс.
  • Office — название офиса. В нашей БД для этого поля есть лимит 100 символов, поэтому при записи в БД более длинные названия будут обрезаны
  • Location_GUID — уникальный идентификатор локации. Локация — это расположение переговорных комнат внутри офиса. Например, конкретное здание офиса или этаж.
  • Location_name — название локации. Максимальная длина: 50 символов.

Шаг 3. Перенесите данные в Почту VK WorkSpace

  1. Подключитесь к контейнеру confroom:

    docker exec -it confroom1 bash
    
  2. Перенесите в контейнер файл confrooms_result.csv после того как проверили формат данных на предыдущем шаге.

  3. Выполните команду указав путь до файла confrooms_result.csv:

    python manage.py import_exchange_confrooms /path/to/confrooms_result.csv
    

После выполнения скрипта должно появиться сообщение:

Successfully import external confrooms

Скрипт можно перезапускать. Если с какими-то данными возникнет ошибка, то можно исправить эти данные в файле и запустить скрипт заново, они обновятся по уникальному GUID из Exchange.

Особенности миграции

  1. Будут перенесены следующие данные:
    • GUID переговорной комнаты.
    • Название переговорной комнаты
    • Вместимость.
    • Комментарий.
    • Название офиса.
    • Адрес офиса: страна, область, город, улица, почтовый индекс.
    • GUID оборудования и его название.
  2. Для оборудования будет перенесено только название, так как в Exchange оборудование не привязано к конкретным переговорным комнатам.
  3. В Exchange у переговорной комнаты нет отдельного поля с информацией о ее расположении внутри офиса (строение/этаж).