-
Подключитесь к машине с Exchange.
-
Создайте скрипт с расширением ps1:
export_confrooms.ps1. -
В файл
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# Capacity = 10, если пустой$capacity = $confroom.ResourceCapacityif ([string]::IsNullOrWhiteSpace([string]$capacity)) {$capacity = 10}# Country = Russia, если пустой$country = $adUser.coif ([string]::IsNullOrWhiteSpace($country)) {$country = "Russia"}# Location GUID пока пустой$locationGuid = $null$locationName = $nullforeach ($list in $confroomLists) {$members = Get-DistributionGroupMember -Identity $list.DisplayName -ResultSize Unlimitedif ($members.PrimarySmtpAddress -contains $confroom.PrimarySmtpAddress) {$locationGuid = $list.Guid$locationName = $list.DisplayNamebreak}}# Если RoomList не найден — генерируем GUIDif ([string]::IsNullOrWhiteSpace($locationGuid)) {$locationGuid = [guid]::NewGuid().ToString()}$confroomDetails = [PSCustomObject]@{"ResourceType" = "Confroom""GUID" = $confroom.Guid"Name" = $confroom.DisplayName"Enabled" = $confroom.IsMailboxEnabled"Capacity" = $capacity"Comment" = $adUser.info"Country" = $country"State" = $adUser.State"City" = $adUser.City"Street" = $adUser.StreetAddress"Postal_code" = $adUser.PostalCode"Office" = $adUser.Office"Location_GUID" = $locationGuid"Location_name" = $locationName}$resources += $confroomDetails}foreach ($equipment in $equipmentMailboxes) {$equipmentDetails = [PSCustomObject]@{"ResourceType" = "Equipment""GUID" = $equipment.Guid"Name" = $equipment.DisplayName"Enabled" = $equipment.IsMailboxEnabled}$resources += $equipmentDetails}$csvFilePath = "confrooms_result.csv"$resources | Export-Csv -Path $csvFilePath -Encoding UTF8 -NoTypeInformationWrite-Host "Confrooms information has been exported to $csvFilePath" -
Откройте Exchange Management Shell и запустите скрипт:
.\export_confrooms.ps1
Результат будет записан в файл confrooms_result.csv, который появится в папке со скриптом. Вы можете задать другой путь до файла изменив в скрипте переменную $csvFilePath.
Перед загрузкой данных в Почту 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 символов.
-
Подключитесь к контейнеру confroom:
docker exec -it confroom1 bash -
Перенесите в контейнер файл confrooms_result.csv после того как проверили формат данных на предыдущем шаге.
-
Выполните команду указав путь до файла confrooms_result.csv:
python manage.py import_exchange_confrooms /path/to/confrooms_result.csv
После выполнения скрипта должно появиться сообщение:
Successfully import external confrooms
Скрипт можно перезапускать. Если с какими-то данными возникнет ошибка, то можно исправить эти данные в файле и запустить скрипт заново, они обновятся по уникальному GUID из Exchange.
-
Будут перенесены следующие данные:
- GUID переговорной комнаты.
- Название переговорной комнаты
- Вместимость.
- Комментарий.
- Название офиса.
- Адрес офиса: страна, область, город, улица, почтовый индекс.
- GUID оборудования и его название.
-
Для оборудования будет перенесено только название, так как в Exchange оборудование не привязано к конкретным переговорным комнатам.
-
В Exchange у переговорной комнаты нет отдельного поля с информацией о ее расположении внутри офиса (строение/этаж).
Технический писатель: Груздев Никита