Эмиграция с Яндекс.Почты для доменов
Поскольку обещания вечной бесплатности оказались недолговечны, на ряде ресурсов встречал запрос возможности выгрузки списка почтовых ящиков, групп и подразделений из Почты для Доменов aka Яндекс 360.
У меня уже давно лежали подобные скрипты для синхронизации Active Directory с Яндекс.API. API поменялось, скрипты подправлены. Делюсь:
Что понадобится:
Учётка администратора.
Интернет-браузер.
PowerShell.
Прямые руки.
10 минут времени.
Далее по шагам:
При желании ознакомиться с документацией: Введение - 360 API. api360 (yandex.ru).
Авторизоваться под учётной записью с правами администратора домена.
Создать приложение с правами доступа.
Базовые настройки Выбор прав доступа На этапе выбора прав необходимо выбрать все опции по запросу “directory”. В поле RedirectURI указать https://oauth.yandex.ru/verification_code. Далее указать почту администратора и нажать кнопку "Создать приложение".
На появившемся экране видим окно, где содержится Client ID:Параметры приложения Получить OAuth-ключ для доступа к API: Доступ к API - 360 API. api360 (yandex.ru):
Скопировать Client ID приложения, подставить его в ссылку https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>
Подтвердить права доступа.
Подтверждение прав Скопировать OAuth-ключ.
Oauth-ключ (отладочный токен)
Открыть PowerShell, ввести там код и выполнить его (прописываем заголовки):
$headers = @{
'Accept'='application/json; charset=utf-8'
'Content-Type'='application/json; charset=utf-8'
'Authorization'='OAuth KeyFromStep4.3'
}Получаем id организации и сохраняем в переменную (понадобится дальше):
$orgid = (Invoke-RestMethod -Method Get -Uri "https://api360.yandex.net/directory/v1/org" -Headers $headers -ContentType 'application/json; charset=utf-8').organizations[0].id
Сохраняем в csv список пользователей:
(([Text.Encoding]::UTF8.GetString((curl "https://api360.yandex.net/directory/v1/org/$orgid/users?per_page=999" -Headers $headers -ContentType 'application/json; charset=utf-8').RawContentStream.ToArray()) -join "")|ConvertFrom-Json).users | select-object `@{Name="FirstName";Expression={$_.name.first}},
@{Name="MiddleName";Expression={$_.name.middle}},@{Name="LastName";Expression={$_.name.last}},
@{Name="id";Expression={$_.id}},
@{Name="Email";Expression={$_.email}},
@{Name="position";Expression={$_.position}},
@{Name="gender";Expression={$_.gender}},
@{Name="departmentId";Expression={$_.departmentId}},
@{Name="about";Expression={$_.about}},
@{Name="isEnabled";Expression={$_.isEnabled}},
@{Name="birthday";Expression={$_.birthday}} | Export-Csv -Path ./users.csv -NoTypeInformation -Encoding UTF8Подразделения
(([Text.Encoding]::UTF8.GetString((curl "https://api360.yandex.net/directory/v1/org/$orgid/departments?per_page=999" -Headers $headers -ContentType 'application/json; charset=utf-8').RawContentStream.ToArray()) -join "")|ConvertFrom-Json).departments | Export-Csv -Path ./deps.csv -NoTypeInformation -Encoding UTF8
Группы
(([Text.Encoding]::UTF8.GetString((curl "https://api360.yandex.net/directory/v1/org/$orgid/groups?per_page=999" -Headers $headers -ContentType 'application/json; charset=utf-8').RawContentStream.ToArray()) -join "")|ConvertFrom-Json).groups | Export-Csv -Path ./groups.csv -NoTypeInformation -Encoding UTF8
На выходе имеем 3 файла csv в utf-8.
Для удобства файлик скрипта ps1.