работа с API yandex mail в powershell — часть 1

Понадобилось провести ревизию корпоративных почтовых ящиков на yandex mail. Так как почтовых доменов около десятка, а общее число ящиков в районе тысячи, подготовил скрипт powershell, формирующий по каждому почтовому домену csv-файл со списком почтовых ящиков домена. Скрипт обращается к API yandex по PddToken, который несложно запросить по следующей ссылке для каждого домена. Официальную документацию по API yandex mail можно почитать здесь. Ну и собственно сам скрипт powershell с комментариями:

cls

# Функция экспорта списка почтовых ящиков домена. Передаваемые параметры - PddToken для подключения к API и имя домена

function ExportMailboxesListFromDomain ($PddToken, $domain){
  # Задаем полный путь csv-файла. Имя файла по имени домена.
  $Path = "C:\tmp\"+$domain+".csv"
  # Формируем запрос API - см. документацию по API
  $pddimpUrl = 'https://pddimp.yandex.ru'
  $api = '/api2/admin/email/list'
  $URL = "$pddimpUrl"+"$api"
  $Headers = @{}
  $Headers.PddToken = $PddToken
  $Body = @{}
  $Body.domain = $domain
  $Body.page = 1
  # Отправляем запрос API
  $InvokeWebRequest = Invoke-WebRequest -URI $URL -Method GET -Headers $Headers -Body $Body
  # Перевариваем ответ в родной формат powershell
  $a = $InvokeWebRequest.Content | ConvertFrom-Json
  # Перебираем массив почтовых ящиков с выборкой полей login (email ящика), fio (полное имя), enabled (блокирован или нет), ready (заполнена анкета, активирован или нет). Передаем значения в csv-файл
  foreach ($i in $a.accounts){
    $i | Select-Object login, fio, enabled, ready | Export-Csv -Path $Path -Encoding "UTF8" -Append -Force -NoTypeInformation
  }
  # Ответ на запрос API постраничный (30 аккаунтов на страницу).
  $pages = $a.pages;
  # Повторяем запрос для всех страниц, результаты добавляем в csv-файл
  for ($n = 2; $n -le $pages; $n++){
    $Body.page = $n
    $InvokeWebRequest = Invoke-WebRequest -URI $URL -Method GET -Headers $Headers -Body $Body
    $a = $InvokeWebRequest.Content | ConvertFrom-Json
    foreach ($i in $a.accounts){
      $i | Select-Object login, fio, enabled, ready | Export-Csv -Path $Path -Encoding "UTF8" -Append -Force -NoTypeInformation
    }
  }
}

# Указываем последовательно имена доменов, их PddToken для доступа к API и вызываем функцию, передавая PddToken и имя домена

$PddToken = "2DZLMPQ3ZHI7CZZ6P3NPTI9TOF2FKNIHCW8CKIHM0BCAAPZMWGXA"
$domain = "domain1.com"
ExportMailboxesListFromDomain $PddToken $domain

$PddToken = "GDZKOYYCE7MC1QJUNK06VNX9MD1RWJWFGQB1OCNQ8KF0PY6USVBK"
$domain = "domain1.ru"
ExportMailboxesListFromDomain $PddToken $domain

$PddToken = "BNXXH4O5N7UDEHLBR0OGRYOMKN7W97I6YNKCWKELXHC0EQ9JFD5P"
$domain = "domain2.com"
ExportMailboxesListFromDomain $PddToken $domain

$PddToken = "4H9YDA7ITRCIRJNJPIU0EKXILYELYODDEDWEFRLSFYLEQY7ICHBC"
$domain = "domain2.ru"
ExportMailboxesListFromDomain $PddToken $domain

В результате в папке C:\tmp\ для каждого домена выгрузится список всех почтовых ящиков в отдельном csv-файле, который можно открыть в Excel. Чтобы получить наглядную таблицу, надо выбрать весь столбец и разбить текст по столбцам, выбрав запятую в качестве разделителя:

csv01

csv02

После чего сохранить в xls-формат. Впоследствии из полученных таблиц можно будет сформировать таблицы со списком почтовых ящиков, которые надо заблокировать или удалить, перевести их в формат csv, который «скормить» другому скрипту, реализующему данный функционал опять же посредством запроса API. Но об этом во 2-й части статьи.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *