Как стать автором
Обновить

Эмиграция с Яндекс.Почты для доменов

Уровень сложностиПростой

Поскольку обещания вечной бесплатности оказались недолговечны, на ряде ресурсов встречал запрос возможности выгрузки списка почтовых ящиков, групп и подразделений из Почты для Доменов aka Яндекс 360.

У меня уже давно лежали подобные скрипты для синхронизации Active Directory с Яндекс.API. API поменялось, скрипты подправлены. Делюсь:

Что понадобится:

  1. Учётка администратора.

  2. Интернет-браузер.

  3. PowerShell.

  4. Прямые руки.

  5. 10 минут времени.

Далее по шагам:

  1. При желании ознакомиться с документацией: Введение - 360 API. api360 (yandex.ru).

  2. Авторизоваться под учётной записью с правами администратора домена.

  3. Создать приложение с правами доступа.

    Базовые настройки
    Базовые настройки
    Выбор прав доступа
    Выбор прав доступа

    На этапе выбора прав необходимо выбрать все опции по запросу “directory”. В поле RedirectURI указать https://oauth.yandex.ru/verification_code. Далее указать почту администратора и нажать кнопку "Создать приложение".

    На появившемся экране видим окно, где содержится Client ID:

    Параметры приложения
    Параметры приложения
  4. Получить OAuth-ключ для доступа к API: Доступ к API - 360 API. api360 (yandex.ru):

    1. Скопировать Client ID приложения, подставить его в ссылку https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>

    2. Подтвердить права доступа.

      Подтверждение прав
      Подтверждение прав
    3. Скопировать OAuth-ключ.

      Oauth-ключ (отладочный токен)
      Oauth-ключ (отладочный токен)
  5. Открыть PowerShell, ввести там код и выполнить его (прописываем заголовки):
    $headers = @{
    'Accept'='application/json; charset=utf-8'
    'Content-Type'='application/json; charset=utf-8'
    'Authorization'='OAuth KeyFromStep4.3'
    }

  6. Получаем 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

  7. Сохраняем в 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

  8. Подразделения
    (([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

  9. Группы
    (([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.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.