Консольная утилита 360_text_admin_console.py предназначена для администрирования организации Yandex 360 через API. Утилита предоставляет широкий функционал для управления пользователями, группами, настройками электронной почты и двухфакторной аутентификации.
- Изменение атрибута
userNameчерез SCIM API - Изменение атрибута
nicknameчерез Yandex 360 API - Массовое обновление пользователей из CSV-файла (nickname и userName)
- Проверка псевдонимов и алиасов
- Удаление email адресов по шаблонам (через SCIM)
- Выгрузка всех пользователей в CSV-файлы (SCIM и API 360)
- Детальная информация об атрибутах пользователя
- Проверка существования псевдонимов
- Просмотр атрибутов групп
- Управление разрешениями на отправку в группы
- Добавление/удаление пользователей в списки разрешенных отправителей
- Работа с общими почтовыми ящиками
- Управление настройками отправителя по умолчанию
- Просмотр и очистка правил пересылки
- Массовое обновление настроек из файла
- Получение подписи пользователя в отправляемых письмах
- Массовая установка подписей пользователям с параметризированными шаблонами
- Выгрузка настроек 2FA для всех пользователей
- Просмотр настроек 2FA для отдельного пользователя
- Сброс телефона безопасности
- Принудительный выход пользователей из системы
- Массовый выход пользователей загружаемых из файла
- Разлогин из Я360 пользователей с включенной 2FA без настроенного телефона
- Настройка шаблона формирования displayName
- Выгрузка текущих значений displayName для пользователей
- Массовое обновление displayName из файла (через SCIM или API 360)
-
Установите Python 3.7 или выше
-
Установите зависимости:
pip install -r requirements.txt
-
Настройте файл окружения: Создайте файл
.envв корневой директории проекта со следующими параметрами:
| Параметр | Описание | Обязательный | Пример |
|---|---|---|---|
SCIM_TOKEN_ARG |
OAuth-токен для SCIM API | Да* | y0_AgAAAAAAAAAAAA |
SCIM_DOMAIN_ID_ARG |
ID домена для SCIM API | Да* | 1234567 |
OAUTH_TOKEN_ARG |
OAuth-токен для Yandex 360 API | Да | y0_AgAAAAB0It5oAAvg |
ORG_ID_ARG |
ID организации Yandex 360 | Да | 1234567 |
USERS_FILE_ARG |
Имя CSV-файла с пользователями | Да | users.csv |
NEW_LOGIN_DEFAULT_FORMAT_ARG |
Шаблон нового userName | Нет | alias@domain.ru |
DEFAULT_EMAIL_OUTPUT_FILE_ARG |
Файл для экспорта настроек email | Нет | default_email_output.csv |
DEFAULT_EMAIL_INPUT_FILE_ARG |
Файл для импорта настроек email | Нет | default_email_input.csv |
DEFAULT_FORWARD_RULES_OUTPUT_FILE_ARG |
Файл для экспорта правил пересылки | Нет | forward_rules_output.csv |
DEFAULT_2FA_SETTINGS_OUTPUT_FILE_ARG |
Файл для экспорта настроек 2FA | Нет | users_2fa_output.csv |
DEFAULT_2FA_SETTINGS_INPUT_FILE_ARG |
Файл для импорта настроек 2FA | Нет | users_2fa_input.csv |
EMAIL_SIGNATURE_FILE_PREFIX_ARG |
НОВОЕ: Префикс для файлов, где сохраняется подпись, выгруженная из Яндекс 360 | Нет | signature_ |
EMAIL_SIGNATURE_INPUT_FILE |
НОВОЕ: Файл с пользователями для установки подписей | Нет | users_signature_input.csv |
EMAIL_SIGNATURE_TEMPLATE_FILE |
НОВОЕ: Шаблон подписи (HTML) | Нет | signature_template.html |
EMAIL_SIGNATURE_LANGUAGE |
НОВОЕ: Язык подписи | Нет | ru |
EMAIL_SIGNATURE_IS_DEFAULT |
НОВОЕ: Подпись по умолчанию | Нет | false |
EMAIL_SIGNATURE_POSITION |
НОВОЕ: Позиция подписи | Нет | bottom или under |
DRY_RUN |
НОВОЕ: Режим тестирования (без выполнения изменений) | Нет | true/false |
IgnoreUsernameDomain |
Игнорировать домен в userName | Нет | true/false |
DN_FILE |
НОВОЕ: Файл для экспорта/импорта displayName | Нет | dn.csv |
* SCIM параметры необходимы только для операций с userName
SCIM_TOKEN_ARG=y0_AgAAAAAAAAAAAA
SCIM_DOMAIN_ID_ARG=1234567
OAUTH_TOKEN_ARG=y0_AgAAAAB0It5oAAvg
ORG_ID_ARG=1234567
USERS_FILE_ARG=users.csv
NEW_LOGIN_DEFAULT_FORMAT_ARG=alias@domain.ru
DRY_RUN=falsepython 360_text_admin_console.py# Изменение userName
python 360_text_admin_console.py old_username new_username userName yes
# Изменение nickname
python 360_text_admin_console.py old_nickname new_nickname nickname yes- Работа с атрибутом SCIM userName или атрибутом API 360 nickname
- Получить информацию о пользователе
- Получить информацию о группе и управление правами отправки
- Работа с настройками почты
- Настройки 2FA
- Выгрузить и загрузить атрибут displayName пользователей
- Установить новый формат SCIM userName (по умолчанию: alias@domain.tld)
- Создать файл данных SCIM для изменения на следующем шаге
- Использовать файл пользователей для массового изменения SCIM userName
- Ввести старое и новое значение userName вручную и подтвердить переименование
- Изменить nickname отдельного пользователя
- Использовать файл пользователей для массового изменения nickname
- Проверить значение атрибута alias у пользователей
- Удалить адреса электронной почты в указанных доменах из email контактов выбранных пользователей через SCIM
- Показать атрибуты пользователя и сохранить их в файл a. Выгрузить атрибуты всех пользователей в файл (протоколы SCIM и API)
- Проверить значение атрибута alias у пользователей
- Загрузить атрибуты всех пользователей в файл (протоколы SCIM и API 360)
- Показать атрибуты выбранного пользователя и сохранить их в файл
- Показать атрибуты группы и сохранить их в файл
- Показать разрешенных отправителей для группы
- Управление разрешенными отправителями для группы
- Установить целевую группу
- Добавить пользователей в список разрешенных
- Удалить пользователей из списка разрешенных
- Предоставить всем пользователям разрешение на отправку
- Добавить/Удалить общий почтовый ящик в список разрешенных
- Создать файл для изменения email по умолчанию
- Обновить email по умолчанию из файла
- Получить правила пересылки для отдельного пользователя
- Выгрузить правила пересылки для всех пользователей
- Очистить правила пересылки для пользователей
- Получить подпись email отдельного пользователя
- Установить подпись email
- Загрузить настройки 2FA для пользователей
- Получить настройки 2FA для отдельного пользователя
- Сбросить личный телефон для отдельного пользователя
- Разлогинить отдельного пользователя из системы
- Разлогинить из системы загруженных из файла пользователей
- Разлогинить из системы пользователей с установленным 2fa и без настроенного телефона безопасности
- Настройка шаблона формирования displayName (текущий шаблон)
- Выгрузить в файл значение displayName для пользователей
- Загрузить displayName из файла
Создает CSV файл с текущими настройками электронной почты пользователей для последующего редактирования.
Функция: default_email_create_file()
Процесс работы:
- Загружает список всех пользователей организации
- Для каждого пользователя получает текущие настройки почты через API
- Сохраняет данные в CSV файл (по умолчанию
default_email_output.csv)
Формат выходного CSV файла:
nickname;new_DefaultEmail;new_DisplayName;old_DefaultEmail;old_DisplayName;uid
ivan;ivan@newdomain.com;Иван Иванов;ivan@olddomain.com;Ivan;1130000069123456Параметры конфигурации:
DEFAULT_EMAIL_OUTPUT_FILE_ARG- имя файла для экспорта
Применение:
- Аудит текущих настроек почты
- Подготовка массового изменения настроек отправителя по умолчанию
- Резервное копирование настроек перед изменениями
Массово обновляет настройки электронной почты пользователей из предварительно подготовленного CSV файла.
Функция: default_email_update_from_file()
Процесс работы:
- Читает CSV файл с новыми настройками
- Для каждого пользователя в файле:
- Проверяет существование пользователя
- Обновляет адрес отправителя по умолчанию
- Обновляет отображаемое имя (если указано)
- Логирует результаты каждой операции
Формат входного CSV файла:
nickname;new_DefaultEmail;new_DisplayName;old_DefaultEmail;old_DisplayName;uid
ivan;ivan@newdomain.com;Иван Иванов;ivan@olddomain.com;Ivan;1130000069123456
petr;petr@newdomain.com;Петр Петров;petr@olddomain.com;Petr;1130000069123457Параметры конфигурации:
DEFAULT_EMAIL_INPUT_FILE_ARG- имя файла для импортаDRY_RUN- режим тестирования (true/false)
Поддерживаемые изменения:
- Изменение адреса электронной почты по умолчанию
- Изменение отображаемого имени отправителя
Применение:
- Массовая смена доменов организации
- Изменение отображаемых имен после реорганизации
- Приведение настроек к корпоративному стандарту
Выводит текущие правила автоматической пересылки почты для конкретного пользователя.
Функция: forward_rules_get_for_user()
Процесс работы:
- Запрашивает идентификатор пользователя (nickname, email, UID или фамилия)
- Находит пользователя в системе
- Получает настройки пересылки через API
- Отображает информацию в консоли
Отображаемые данные:
- Список адресов для пересылки
- Статус правила пересылки (включено/отключено)
- Флаг сохранения копии на сервере
Применение:
- Проверка настроек пересылки при обращениях пользователей
- Аудит правил пересылки
- Отладка проблем с доставкой почты
Создает отчет с правилами пересылки для всех пользователей организации.
Функция: forward_rules_download_for_all_users()
Процесс работы:
- Получает список всех пользователей организации
- Для каждого пользователя запрашивает правила пересылки
- Сохраняет результаты в CSV файл (по умолчанию
forward_rules_output.csv) - Отображает прогресс выполнения
Формат выходного CSV файла:
uid;nickname;displayName;forwardingAddresses;keepLocalCopy;isEnabled
1130000069123456;ivan;Иванов Иван;external@gmail.com,boss@company.com;true;true
1130000069123457;petr;Петров Петр;;false;falseОписание полей:
uid- уникальный идентификатор пользователяnickname- логин пользователяdisplayName- отображаемое имяforwardingAddresses- список адресов для пересылки (через запятую)keepLocalCopy- сохранять копию на сервере (true/false)isEnabled- правило активно (true/false)
Параметры конфигурации:
DEFAULT_FORWARD_RULES_OUTPUT_FILE_ARG- имя файла для экспорта
Применение:
- Аудит безопасности (выявление пересылок за пределы организации)
- Анализ использования функции пересылки
- Выявление устаревших правил пересылки
- Подготовка к миграции почтовой системы
Удаляет правила автоматической пересылки для выбранных пользователей.
Функция: forward_rules_clear_for_user()
Процесс работы:
- Запрашивает идентификатор пользователя (nickname, email, UID или фамилия)
- Находит пользователя и отображает текущие правила пересылки
- Запрашивает подтверждение операции
- Удаляет все правила пересылки для пользователя
Параметры конфигурации:
DRY_RUN- режим тестирования (true/false)
Безопасность:
- Требует явного подтверждения перед удалением
- Логирует все операции
- Поддерживает режим DRY_RUN для тестирования
Применение:
- Очистка устаревших правил пересылки
- Устранение проблем безопасности (несанкционированные пересылки)
- Восстановление стандартных настроек почты
- Подготовка к увольнению сотрудника
НОВОЕ: Получает текущую HTML-подпись пользователя из настроек электронной почты Yandex 360.
Функция: get_email_signature()
Процесс работы:
- Запрашивает идентификатор пользователя (nickname, email, UID или фамилия)
- Находит пользователя в системе
- Получает настройки подписи через API
- Отображает параметры подписи в консоли
- Сохраняет HTML-содержимое подписи в файл
Получаемые данные:
- HTML-код подписи
- Язык подписи (ru, en, etc.)
- Позиция подписи (bottom, under)
- Флаг использования по умолчанию
Формат сохранения:
- Файл:
{EMAIL_SIGNATURE_FILE_PREFIX_ARG}{nickname}.txt - Пример:
signature_ivan.txt
Параметры конфигурации:
EMAIL_SIGNATURE_FILE_PREFIX_ARG- префикс для имени файла (по умолчанию:signature_)
Применение:
- Резервное копирование подписей пользователей
- Проверка корректности установленных подписей
- Создание шаблонов на основе существующих подписей
- Аудит использования корпоративных подписей
Особенности:
- Подпись сохраняется в формате HTML с корректной кодировкой UTF-8
- Поддерживает сложные HTML-структуры с изображениями и стилями
- Сохраняет все параметры подписи для возможного восстановления
НОВОЕ: Устанавливает HTML-подписи пользователям на основе параметризированного шаблона с автоматической подстановкой данных.
Функция: set_email_signature()
Процесс работы:
- Читает список пользователей из файла
- Загружает HTML-шаблон подписи
- Для каждого пользователя:
- Получает данные профиля (имя, должность, контакты, отдел)
- Подставляет данные в шаблон
- Очищает пустые переменные и HTML-элементы
- Устанавливает подпись через API
- Логирует результаты каждой операции
Параметры конфигурации:
EMAIL_SIGNATURE_INPUT_FILE- файл со списком пользователей (по умолчанию:users_signature_input.csv)EMAIL_SIGNATURE_TEMPLATE_FILE- HTML-шаблон подписи (по умолчанию:signature_template.html)EMAIL_SIGNATURE_LANGUAGE- язык подписи (по умолчанию:ru)EMAIL_SIGNATURE_IS_DEFAULT- использовать по умолчанию (по умолчанию:false)EMAIL_SIGNATURE_POSITION- позиция подписи:bottomилиunder(по умолчанию:bottom)DRY_RUN- режим тестирования (true/false)
Для установки подписей необходимо передать в файле список пользователей. По умолчанию это файл, который определен в .env файле в параметре EMAIL_SIGNATURE_INPUT_FILE, который по умолчанию имеет значение users_signature_input.csv.
Формат файла со списком пользователей (EMAIL_SIGNATURE_INPUT_FILE):
# Строки, начинающиеся с #, игнорируются
# В каждой строке: алиас, email, id или фамилия пользователя
alavret
ivan.petrov
user@company.com
1130000000000001
ПетровПоддерживаемые переменные в шаблоне:
| Переменная | Описание | Источник данных |
|---|---|---|
{{last}} |
Фамилия | user.name.last |
{{first}} |
Имя | user.name.first |
{{middle}} |
Отчество | user.name.middle |
{{name}} |
Полное имя | user.name.first + user.name.middle + user.name.last |
{{position}} |
Должность | user.position |
{{mail}} |
Email адрес | Основной email пользователя |
{{telephone}} |
Рабочий телефон | Из контактов пользователя |
{{mobile}} |
Мобильный телефон | Из контактов пользователя |
{{department}} |
Отдел | Название подразделения |
Пример HTML-шаблона:
<div>-- </div>
<div><em>С Уважением,</em></div>
<div> </div>
<div><span style="font-family:'comic sans ms' , sans-serif;font-size:16px;line-height:normal"><strong>{{name}}</strong></span></div>
<div><blockquote><div><span style="color:#4b0082">email</span>: <a href="mailto:{{mail}}" rel="noopener noreferrer">{{mail}}</a></div></blockquote></div>
<div><blockquote><div>Телефон: {{telephone}}</div></blockquote></div>
<div><blockquote><div>мобильный: {{mobile}}</div></blockquote></div>
<div><blockquote><div>Должность: {{position}}, {{department}}</div></blockquote></div>
<div><a href="https://360.yandex.ru">site</a></div>Автоматическая обработка пустых полей:
- HTML-элементы с пустыми переменными автоматически удаляются
- Если у пользователя нет мобильного телефона, строка
<div>мобильный: {{mobile}}</div>будет удалена - Если у пользователя нет должности, соответствующий блок будет скрыт
- Пустые строки и теги автоматически очищаются
Позиции подписи:
bottom- подпись добавляется в конец письмаunder- подпись добавляется под цитируемым текстом при ответе
Применение:
- Массовое внедрение корпоративных подписей
- Обновление подписей после ребрендинга
- Стандартизация оформления подписей
- Автоматизация создания подписей для новых сотрудников
- Обновление контактной информации в подписях
Безопасность и проверка:
- Режим DRY_RUN позволяет просмотреть результат без применения изменений
- Все операции логируются
- Валидация HTML-шаблона перед применением
- Обработка ошибок при получении данных пользователя
Примеры использования:
# Тестирование установки подписей
# Установить DRY_RUN=true в .env файле
python 360_text_admin_console.py
# Выбрать: 4 -> 7
# Реальная установка подписей
# Установить DRY_RUN=false в .env файле
python 360_text_admin_console.py
# Выбрать: 4 -> 7- Выгрузка настроек 2FA для всех пользователей
- Просмотр настроек 2FA для пользователя
- Сброс телефона безопасности
- Принудительный выход пользователя
- Принудительный выход пользователей из файла
- Выход пользователей с 2FA без телефона
Подменю 6 предназначено для управления атрибутом displayName (отображаемое имя) пользователей в Yandex 360. Этот функционал позволяет массово обновлять отображаемые имена на основе шаблонов и формировать единый формат представления имен сотрудников.
Позволяет настроить шаблон, по которому будет автоматически формироваться новое значение displayName при выгрузке данных пользователей.
Функция: generate_new_dn(pattern, first, last, middle)
Шаблон формирования:
Шаблон состоит из следующих элементов:
Ф- фамилия пользователяИ- имя пользователяО- отчество пользователя- Цифра после буквы (необязательно) - количество символов для вывода (например,
И1- первая буква имени) - Точка после буквы (необязательно) - добавляет точку после значения (например,
И1.- первая буква имени с точкой) - Пробелы - для разделения элементов
Примеры шаблонов:
| Шаблон | Пример результата (Иванов Иван Петрович) | Описание |
|---|---|---|
ФИО |
Иванов Иван Петрович |
Полное ФИО без сокращений |
Ф И О |
Иванов Иван Петрович |
Полное ФИО с пробелами |
Ф И |
Иванов Иван |
Фамилия и имя |
Ф И1 |
Иванов И |
Фамилия и первая буква имени |
Ф И1. |
Иванов И. |
Фамилия и первая буква имени с точкой |
Ф И1. О1. |
Иванов И. П. |
Фамилия и инициалы с точками |
И Ф |
Иван Иванов |
Имя и фамилия |
И1. Ф |
И. Иванов |
Инициал имени и фамилия |
Особенности работы шаблона:
- Если у пользователя отсутствует отчество, элемент
Оавтоматически удаляется из результата - Лишние пробелы между элементами автоматически удаляются
- Допустимые символы в шаблоне:
Ф,И,О, цифры0-9, точка., пробел - Шаблон по умолчанию:
ФИО
Применение:
- Унификация формата отображаемых имен в организации
- Создание сокращенных форм для списков рассылки
- Формирование имен для подписей и визитных карточек
- Приведение к корпоративному стандарту представления имен
Создает CSV файл с текущими значениями displayName пользователей и автоматически генерирует новые значения на основе шаблона.
Функция: submenu_6_export_dn(settings)
Процесс работы:
- Выбор пользователей через интерактивный поиск (поиск по критериям, из файла CSV, или все пользователи)
- Сбор информации о выбранных пользователях (ID, nickname, имя, фамилия, отчество, текущий displayName)
- Автоматическая генерация нового значения
displayNameна основе заданного шаблона - Сохранение данных в CSV файл
Формат выходного CSV файла:
id;nickname;last;first;middle;dn;new_dn
1130000012345678;ivanov;Иванов;Иван;;Иванов Иван;Иванов И.
1130000012345679;petrov;Петров;Петр;Петрович;Петр Петров;Петров П. П.Описание полей:
id- уникальный идентификатор пользователя в Yandex 360nickname- логин пользователя (часть до @ в email)last- фамилия пользователяfirst- имя пользователяmiddle- отчество пользователя (может быть пустым)dn- текущее значение displayNamenew_dn- автоматически сгенерированное новое значение displayName на основе шаблона
Параметры конфигурации:
DN_FILE- имя файла для экспорта/импорта (по умолчанию:dn.csv)
Применение:
- Аудит текущих отображаемых имен пользователей
- Подготовка к массовому изменению displayName
- Проверка корректности генерации имен по шаблону
- Резервное копирование текущих значений перед изменениями
Массово обновляет атрибут displayName пользователей из предварительно подготовленного CSV файла.
Функции:
submenu_6_import_dn(settings)- основная функция импортаupdate_user_dn_scim(user_id, new_dn, settings)- обновление через SCIM APIupdate_user_dn(user_id, new_dn, settings)- обновление через Yandex 360 API
Процесс работы:
- Чтение CSV файла с новыми значениями displayName
- Валидация формата файла (проверка обязательных полей)
- Запрос подтверждения операции
- Для каждого пользователя в файле:
- Обновление displayName через SCIM API (если доступен) или через Yandex 360 API
- Логирование результата операции
- Отображение сводки результатов
Формат входного CSV файла:
Обязательные поля:
id- уникальный идентификатор пользователя (обязательно)new_dn- новое значение displayName (обязательно)
Необязательные поля:
nickname- логин пользователя (используется для информационных сообщений)last- фамилия пользователя (используется для информационных сообщений)first- имя пользователя (используется для информационных сообщений)middle- отчество пользователя (используется для информационных сообщений)dn- текущее значение displayName (используется для информационных сообщений)
Пример файла:
id;nickname;last;first;middle;dn;new_dn
1130000012345678;ivanov;Иванов;Иван;;Иванов Иван;Иванов И.
1130000012345679;petrov;Петров;Петр;Петрович;Петр Петров;Петров П. П.Минимальный формат файла:
id;new_dn
1130000012345678;Иванов И.
1130000012345679;Петров П. П.Поддержка комментариев:
В CSV файле можно использовать комментарии - строки, начинающиеся с символа #, будут проигнорированы при обработке:
# Это комментарий - строка будет проигнорирована
# Файл для обновления displayName пользователей
# Подготовлен 2026-04-13
id;nickname;last;first;middle;dn;new_dn
# Следующая строка обновит displayName для пользователя romans
1130000012345678;ivanov;Иванов;Иван;;Иванов Иван;Иванов И.
# Обновление для администратора
1130000012345679;petrov;Петров;Петр;Петрович;Петр Петров;Петров П. П.Особенности:
- Разделитель полей — точка с запятой (
;) - Кодировка файла — UTF-8
- Если
new_dnпустое, пользователь пропускается с предупреждением - Приоритет использования API: SCIM API (если доступен) → Yandex 360 API
- Проверка обязательных полей перед началом обновления
- Проверка на наличие некорректных полей в заголовке
- Все операции логируются в файл
360_text_admin_console.log
Параметры конфигурации:
DN_FILE- имя файла для импорта (по умолчанию:dn.csv)DRY_RUN- режим тестирования (true/false)SCIM_TOKEN_ARG- токен для SCIM API (если используется)OAUTH_TOKEN_ARG- токен для Yandex 360 API
Применение:
- Массовое изменение отображаемых имен после реорганизации
- Приведение имен к единому корпоративному стандарту
- Исправление ошибок в отображаемых именах
- Обновление имен после изменения формата представления
Безопасность:
- Требует подтверждения перед выполнением операции
- Поддерживает режим DRY_RUN для тестирования без применения изменений
- Детальное логирование всех операций
- Отображение результата каждой операции в консоли
Пример использования:
# 1. Выгрузить текущие значения displayName
python 360_text_admin_console.py
# Выбрать: 6 -> 2
# Выбрать пользователей
# 2. Отредактировать файл dn.csv (изменить колонку new_dn)
# 3. Протестировать изменения (установить DRY_RUN=true в .env)
python 360_text_admin_console.py
# Выбрать: 6 -> 3
# 4. Применить изменения (установить DRY_RUN=false в .env)
python 360_text_admin_console.py
# Выбрать: 6 -> 3Утилита позволяет массово изменять атрибуты nickname (через API 360) и userName (через SCIM API) для списка пользователей, загружая данные из CSV-файла.
Пункт меню: 1 -> 6
Функция: change_nickname_from_file()
Загружает список пользователей из CSV-файла и последовательно меняет их nickname.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
old_nickname |
String | Да | Текущий nickname пользователя |
new_nickname |
String | Да | Новый nickname для пользователя |
| (другие поля) | - | Нет | Любые другие колонки игнорируются |
Пример файла:
old_nickname;new_nickname
ivan.petrov;i.petrov
petr.sidorov;p.sidorov
anna.smirnova;a.smirnovaОсобенности:
- Разделитель полей — точка с запятой (
;) - Регистр названий колонок не важен (
old_nickname,OLD_NICKNAME,Old_Nickname— эквивалентны) - Строки с одинаковыми старым и новым nickname пропускаются
- Строки с пустыми значениями пропускаются
- Перед применением изменений запрашивается подтверждение
- Поддерживается режим
DRY_RUNдля тестирования
Пример использования:
# 1. Подготовьте CSV-файл (по умолчанию users.csv, задаётся в USERS_FILE_ARG)
# 2. Запустите утилиту
python 360_text_admin_console.py
# 3. Выберите: 1 -> 6
# 4. Подтвердите операциюПункт меню: 1 -> 3
Функция: update_users_from_SCIM_userName_file()
Загружает список пользователей из CSV-файла и изменяет их атрибут userName через SCIM API.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
uid |
String | Да | Уникальный идентификатор пользователя (числовая строка, например 1130000069123456) |
old_userName |
String | Да | Текущий userName пользователя (используется для отображения и логирования) |
new_userName |
String | Да | Новый userName для пользователя (формат: alias@domain.tld) |
displayName |
String | Нет | Отображаемое имя пользователя (используется только для логирования) |
Пример файла:
uid;displayName;old_userName;new_userName
1130000069123456;Иванов Иван;ivan@contoso.com;ivan@contoso.ru
1130000069123457;Петров Петр;petr@contoso.com;petr@contoso.ru
1130000069123458;Сидорова Анна;anna@contoso.com;anna@contoso.ruОсобенности:
- Разделитель полей — точка с запятой (
;) - Регистр названий колонок не важен
- Поле
uidдолжно содержать только цифры - Строки с одинаковыми старым и новым userName пропускаются
- Строки с отсутствующим
uidилиnew_userNameпропускаются - Перед применением изменений запрашивается подтверждение
- Поддерживается режим
DRY_RUNдля тестирования - Требуется настроенный SCIM-токен (
SCIM_TOKEN_ARG)
Создание файла с данными:
Утилита может автоматически создать файл с текущими данными пользователей:
python 360_text_admin_console.py
# Выбрать: 1 -> 2 (Создание файла данных SCIM для модификации)Будет создан файл users.csv с заполненными полями uid, displayName, old_userName и new_userName (на основе шаблона NEW_LOGIN_DEFAULT_FORMAT_ARG).
Пример использования:
# 1. Создайте файл с данными пользователей (опция 1 -> 2) или подготовьте вручную
# 2. Отредактируйте колонку new_userName
# 3. Запустите утилиту
python 360_text_admin_console.py
# 4. Выберите: 1 -> 3
# 5. Подтвердите операцию| Операция | Обязательные поля | Необязательные поля | Пункт меню |
|---|---|---|---|
| Изменение nickname | old_nickname, new_nickname |
любые другие | 1 -> 6 |
| Изменение userName | uid, old_userName, new_userName |
displayName |
1 -> 3 |
| Изменение displayName | id, new_dn |
nickname, last, first, middle, dn |
6 -> 3 |
uid;displayName;old_userName;new_userName
1130000069123456;Иванов Иван;ivan@contoso.com;ivan@contoso.ru
1130000069123457;Петров Петр;petr@contoso.com;petr@contoso.runickname;new_DefaultEmail;new_DisplayName;old_DefaultEmail;old_DisplayName;uid
ivan;ivan@newdomain.com;Иван Иванов;ivan@olddomain.com;Ivan;1130000069123456uid;nickname;displayName;isEnabled;isAdmin;domain2FAEnabled;hasSecurityPhone;personal2FAEnabled;global2FAEnabled;global2FADuration;global2FAPolicy
1130000069123456;ivan;Иванов Иван;true;false;true;false;false;true;86400;all_users# Комментарии в файле начинаются с символа #
# Обязательные поля: id, new_dn
id;nickname;last;first;middle;dn;new_dn
1130000066913874;romans;Сергеев;Роман;;Роман Сергеев;Сергеев Р.
1130000070057004;alavret;Лаврецкий;Андрей;Геннадьевич;Андрей Лаврецкий;Лаврецкий А. Г.Описание полей:
id- уникальный идентификатор пользователя (обязательно)nickname- логин пользователя (необязательно, для информации)last- фамилия (необязательно, для информации)first- имя (необязательно, для информации)middle- отчество (необязательно, для информации)dn- текущий displayName (необязательно, для информации)new_dn- новый displayName (обязательно)
Поддержка комментариев: Строки, начинающиеся с #, игнорируются при обработке.
# Пример входного файла для установки подписей
# Строки, начинающиеся с #, игнорируются
# В каждой строке: алиас, email, id или фамилия пользователя
alavret
ivan.petrov
user@company.com
1130000000000001
ПетровВ шаблоне подписи можно использовать следующие переменные в двойных фигурных скобках:
| Переменная | Описание | Источник данных |
|---|---|---|
{{last}} |
Имя | user.name.last |
{{first}} |
Имя | user.name.first |
{{middle}} |
Отчество | user.name.middle |
{{name}} |
Полное имя | user.name.first + user.name.middle + user.name.last |
{{position}} |
Должность | user.position |
{{mail}} |
Email адрес | Основной email пользователя (который установлен в Web Почте) |
{{telephone}} |
Рабочий телефон | Из контактов пользователя |
{{mobile}} |
Мобильный телефон | Из контактов пользователя |
{{department}} |
Отдел | Название подразделения |
<div>-- </div>
<div><em>С Уважением,</em></div>
<div> </div>
<div><span style="font-family:'comic sans ms' , sans-serif;font-size:16px;line-height:normal"><strong>{{name}}</strong></span></div>
<div><blockquote><div><span style="color:#4b0082">email</span>: <a href="mailto:{{mail}}" rel="noopener noreferrer">{{mail}}</a></div></blockquote></div>
<div><blockquote><div>Телефон: {{telephone}}</div></blockquote></div>
<div><blockquote><div>мобильный: {{mobile}}</div></blockquote></div>
<div><blockquote><div>Должность: {{position}}, {{department}}</div></blockquote></div>
<div><a href="https://360.yandex.ru">site</a></div>
<div> </div>
<div><img src="https://avatars.mds.yandex.net/get-yapic/36689/ibZ4wLaL4Vrw5rZRmobgBL2fu0-1/islands-200" /></div>Система автоматически удаляет HTML элементы, содержащие пустые переменные:
- Если у пользователя нет мобильного телефона, строка
<div>мобильный: {{mobile}}</div>будет удалена - Если у пользователя нет должности, соответствующий блок будет скрыт
- Пустые строки и теги автоматически очищаются
- Создайте HTML файл с расширением
.html - Используйте переменные в формате
{{variable_name}} - Добавьте стили для красивого оформления
- Протестируйте с разными пользователями
<div><strong>{{name}}</strong></div>
<div>Email: {{mail}}</div>
<div>Телефон: {{telephone}}</div>
<div>Должность: {{position}}</div><div style="font-family: Arial, sans-serif; font-size: 12px; color: #333;">
<div><strong>{{name}}</strong></div>
<div>{{position}}</div>
<div>{{department}}</div>
<div>Email: <a href="mailto:{{mail}}" style="color: #0066cc;">{{mail}}</a></div>
<div>Телефон: {{telephone}}</div>
<div>Мобильный: {{mobile}}</div>
</div>Утилита включает функцию проверки валидности доменных имен, которая соответствует стандартам RFC 1123 и RFC 952.
- Длина домена: от 1 до 253 символов
- Длина частей: каждая часть домена не более 63 символов
- Минимальное количество частей: 2 (например,
example.com) - Допустимые символы: буквы (a-z, A-Z), цифры (0-9), дефисы (-)
- Ограничения на дефисы: не могут быть в начале или конце домена/части
- Обязательные буквы: домен должен содержать хотя бы одну букву
# Валидные домены
validate_domain_name("example.com") # True
validate_domain_name("subdomain.example.com") # True
validate_domain_name("my-site.ru") # True
validate_domain_name("company.co.uk") # True
# Невалидные домены
validate_domain_name("invalid") # False (только одна часть)
validate_domain_name(".com") # False (начинается с точки)
validate_domain_name("example.") # False (заканчивается точкой)
validate_domain_name("-example.com") # False (начинается с дефиса)
validate_domain_name("example-.com") # False (заканчивается дефисом)
validate_domain_name("example@com") # False (недопустимый символ)Функция автоматически используется при вводе доменных имен в различных частях утилиты, обеспечивая корректность данных перед отправкой запросов к API.
Утилита включает функцию для удаления email адресов с указанными доменами из SCIM пользователей.
- Массовое удаление: Удаление email адресов с указанными доменами у всех пользователей
- Валидация доменов: Проверка корректности введенных доменных имен
- Безопасность: Подтверждение операции перед выполнением
- Режим тестирования: Возможность просмотра изменений без их применения (DRY_RUN)
- Ввод доменов: Пользователь вводит домены для удаления (через запятую)
- Валидация: Проверка корректности каждого домена
- Подтверждение: Запрос подтверждения операции
- Выполнение: Удаление email адресов с указанными доменами
# Удаление одного домена
olddomain.com
# Удаление нескольких доменов
olddomain.com, anotherdomain.org, legacy-domain.netУстановите DRY_RUN=true в файле .env для просмотра изменений без их применения:
DRY_RUN=trueВ этом режиме утилита покажет, какие изменения будут выполнены, но не применит их.
Эта функция предназначена для точечного удаления email адресов, которые соответствуют заданным шаблонам, у заранее выбранных пользователей. Операция доступна через пункт меню 1 -> 7 и поддерживает оба режима — предпросмотр (только поиск) и фактическое удаление.
- Выбор целевых пользователей: через интерактивный поиск
- Шаблоны с подстановками: поддержка
*в локальной части и домене - Предпросмотр: вывод всех совпадений перед удалением (режим
show only) - Интеграция с DRY_RUN: логирование предполагаемых изменений без модификации данных
*@domain.com— все адреса в доменеdomain.com*.legacy.org— адреса в любом поддоменеlegacy.orguser@*— любой домен для локальной частиusersale*@corp.ru— все алиасы, начинающиеся сsale, в доменеcorp.ru*@mail.*.corp.ru— адреса во вложенных поддоменахmail.*.corp.ru
Используйте * в любой части шаблона; он соответствует любой последовательности символов, включая пустую строку. Можно вводить несколько шаблонов одновременно, разделяя их пробелами, запятыми или точками с запятой. Сопоставление не чувствительно к регистру. Допустимые символы: буквы, цифры, ., -, @, *.
Параметр DRY_RUN позволяет запускать утилиту в режиме тестирования, где все операции просматриваются, но не выполняются. Это особенно полезно для:
- Проверки изменений перед их применением
- Отладки скриптов и конфигураций
- Обучения пользователей без риска изменения данных
- Валидации входных данных
Установите DRY_RUN=true в файле .env:
DRY_RUN=true- ✅ Просмотр всех изменений в логах
- ❌ Не выполняется изменение userName через SCIM
- ❌ Не выполняется изменение nickname через API 360
- ❌ Не выполняется удаление алиасов
- ❌ Не выполняется удаление email адресов
- ✅ Просмотр шаблонов и подстановки переменных
- ❌ Не выполняется установка подписей пользователям
- ✅ Просмотр изменений разрешений
- ❌ Не выполняется изменение настроек групп
# В .env установить DRY_RUN=true
python 360_text_admin_console.py
# Выбрать: 1 -> 5
# Ввести старый и новый nickname
# В логах будет: "Dry run: Would change nickname of user old_nick to new_nick"# В .env установить DRY_RUN=true
python 360_text_admin_console.py
# Выбрать: 1 -> 7
# Ввести домены для удаления
# В логах будет: "Dry run: Would remove email with domains olddomain.com from user 123456"В режиме DRY_RUN все потенциальные изменения записываются в лог с префиксом "Dry run:":
INFO: Dry run: Would change nickname of user old_nick to new_nick
INFO: Dry run: Would remove alias test@domain.com in _API360_ user 1130000000000001
INFO: Dry run: Would remove email with domains olddomain.com from email contacts in _SCIM_ user 1130000000000001
Для выполнения реальных изменений установите:
DRY_RUN=falseили удалите строку DRY_RUN из файла .env.
Утилита предоставляет комплексный набор инструментов для управления настройками двухфакторной аутентификации в организации Yandex 360.
- Назначение: Получение полного отчета о настройках 2FA всех пользователей
- Формат вывода: CSV файл с детальной информацией
- Параметры:
DEFAULT_2FA_SETTINGS_OUTPUT_FILE_ARG
- Назначение: Детальная информация о настройках 2FA конкретного пользователя
- Поиск: По логину, email, UID или фамилии
- Отображение: Консольный вывод с форматированием
- Назначение: Удаление настроенного телефона безопасности у пользователя
- Применение: При потере доступа к телефону или смене номера
- Безопасность: Требует подтверждения операции
- Назначение: Завершение всех активных сессий конкретного пользователя
- Применение: При подозрении на компрометацию аккаунта
- Результат: Пользователь должен будет войти заново
- Назначение: Завершение сессий для списка пользователей из CSV файла
- Формат ввода: CSV файл с пользователями
- Параметры:
DEFAULT_2FA_SETTINGS_INPUT_FILE_ARG
- Назначение: Завершение сессий пользователей с включенной 2FA, но без настроенного телефона
- Применение: При проблемах с доступом к 2FA
- Автоматизация: Поиск и обработка всех подходящих пользователей
uid;nickname;displayName;isEnabled;isAdmin;domain2FAEnabled;hasSecurityPhone;personal2FAEnabled;global2FAEnabled;global2FADuration;global2FAPolicy;email;department
1130000069123456;ivan;Иванов Иван;true;false;true;false;false;true;86400;per_user;ivan@company.com;Продажи/Москва
1130000069123457;petr;Петров Петр;true;false;true;true;true;true;86400;per_user;petr@company.com;ИТ/Поддержка| Поле | Тип | Описание | Возможные значения |
|---|---|---|---|
uid |
String | Уникальный идентификатор пользователя в Yandex 360 | Числовая строка (например: 1130000069123456) |
nickname |
String | Логин пользователя (часть до @ в email) | Строка (например: ivan, petr) |
displayName |
String | Отображаемое имя пользователя | Полное имя (например: Иванов Иван) |
isEnabled |
Boolean | Статус аккаунта пользователя | true - активен, false - заблокирован |
isAdmin |
Boolean | Является ли пользователь администратором | true - администратор, false - обычный пользователь |
domain2FAEnabled |
Boolean | Включена ли 2FA на уровне домена (старая модель 2FA) | true - включена, false - отключена |
hasSecurityPhone |
Boolean | Настроен ли телефон безопасности у пользователя | true - настроен, false - не настроен |
personal2FAEnabled |
Boolean | Включена ли персональная 2FA у пользователя | true - включена, false - отключена |
global2FAEnabled |
Boolean | Включена ли глобальная 2FA ([Новая модель 2FA (https://yandex.ru/dev/api360/doc/ru/ref/Domain2FAV2Service/)]) | true - включена, false - отключена |
global2FADuration |
Integer | Длительность сессии при включенной 2FA (в секундах) в новой модели 2FA | Число (например: 86400 = 24 часа) |
global2FAPolicy |
String | Политика применения 2FA в новой модели | per_domain - для всех, per_user - по по пользователям |
email |
String | Основной email пользователя | Строка (например: ivan@company.com) |
department |
String | Путь до подразделения пользователя | `Департамент |
Активный пользователь с полной настройкой 2FA:
1130000069123456;ivan;Иванов Иван;true;false;true;true;true;true;86400;per_domain;ivan@company.com;Продажи|МоскваЗаблокированный пользователь:
1130000069123457;petr;Петров Петр;false;false;true;false;false;true;86400;per_domain;petr@company.com;ИТ|ПоддержкаАдминистратор с минимальной 2FA:
1130000069123458;admin;Администратор;true;true;true;false;false;true;3600;per_domain;admin@company.com;АдминистрированиеПользователь без настроенного телефона безопасности:
1130000069123459;user;Пользователь;true;false;true;false;false;true;86400;per_user;user@company.com;Бухгалтерия|Регион| Состояние | domain2FAEnabled |
hasSecurityPhone |
personal2FAEnabled |
global2FAEnabled |
Описание |
|---|---|---|---|---|---|
| Полная 2FA | false |
true |
true |
true |
Пользователь имеет полную защиту 2FA |
| Частичная 2FA | false |
false |
true |
true |
2FA включена, но телефон не настроен |
| Отключенная 2FA | false |
true |
false |
false |
2FA отключена для пользователя |
| Доменная 2FA | true |
true |
false |
false |
Только доменная 2FA, без персональной |
Анализ проблемных пользователей:
- Пользователи с
hasSecurityPhone=falseи (global2FAEnabled=trueилиdomain2FAEnabled=true) - требуют настройки телефона - Пользователи с
isEnabled=false- заблокированные аккаунты - Пользователи с
domain2FAEnabled=false- 2FA отключена на уровне домена (старая модель, для всех пользователей)
Фильтрация данных:
# Найти пользователей без телефона безопасности
grep "false;false;true" users_2fa_output.csv
# Найти администраторов
grep "true" users_2fa_output.csv | grep "true;"
# Найти заблокированных пользователей
grep "false;" users_2fa_output.csvИмпорт пользователей для массовых операций:
Создайте файл users_2fa_input.csv с колонкой uid для операций:
uid
1130000069123456
1130000069123457
1130000069123458| Параметр | Описание | Обязательный | Пример |
|---|---|---|---|
DEFAULT_2FA_SETTINGS_OUTPUT_FILE_ARG |
Файл для экспорта настроек 2FA | Нет | users_2fa_output.csv |
DEFAULT_2FA_SETTINGS_INPUT_FILE_ARG |
Файл для импорта настроек 2FA | Нет | users_2fa_input.csv |
python 360_text_admin_console.py
# Выбрать: 5 -> 1
# Настройки будут сохранены в файл, указанный в DEFAULT_2FA_SETTINGS_OUTPUT_FILE_ARGpython 360_text_admin_console.py
# Выбрать: 5 -> 3
# Ввести логин, email, UID или фамилию пользователя
# Подтвердить операциюpython 360_text_admin_console.py
# Выбрать: 5 -> 5
# Указать путь к CSV файлу с пользователями
# Подтвердить операциюpython 360_text_admin_console.py
# Выбрать: 5 -> 6
# Система автоматически найдет и выйдет всех пользователей с включенной 2FA без телефона- Права доступа: Требуются административные права в организации
- Подтверждение: Критические операции требуют подтверждения
- Логирование: Все операции детально логируются
- Режим тестирования: Поддерживается
DRY_RUNдля безопасного тестирования
Для работы с функциями 2FA требуются следующие разрешения OAuth приложения:
ya360_security:domain_2fa_write- Управление настройками 2FAya360_security:domain_sessions_read- Управление сессиями пользователей
Если у вас для организации настроен SSO режим
- Скопируйте SCIM
- Создайте приложение с разрешением
passport:scim-api.all - Получите токен через
client_credentials
- Для использования приложения необходимо сгенерировать OAuth токен для аутентификации в Yandex 360 API. Токен должен содержать необходимые права для выполнения операций управления ресурсами в организации Yandex 360. Документация - Создание приложения.
Последовательность шагов для создания токена:
- перейдите на https://oauth.yandex.ru/client/new/. Аутентифицируйтесь от имени администратора организации Yandex 360
- В предлагаемом окне выберите "Для доступа к API или отладке" и нажмите "Перейти к созданию".
-
заполните поля в форме создания приложения:
- поле "Название вашего сервиса" - любое название
- проверьте почту для связи
-
добавьте разрешения для токена. Для этого в разделе "Доступ к данным" найдите и добавьте следующие разрешения:
| Название разрешения | Что можно делать |
|---|---|
| directory:read_users | читать пользователей |
| directory:write | записывать информацию о пользователях |
| directory:read_groups | читать группы |
| directory:write_groups | записывать информацию о группах |
| ya360_admin:mail_read_mail_list_permissions | читать список разрешений на отправку в группу |
| ya360_admin:mail_write_mail_list_permissions | изменять список разрешений на отправку в группу |
| ya360_admin:mail_read_shared_mailbox_inventory | читать общие ящики |
| ya360_security:domain_2fa_write | читать данные о 2FA |
| ya360_security:domain_sessions_read | разлогинить пользователей |
| ya360_admin:mail_read_user_settings | Читать настройки почты пользователей |
| ya360_admin:mail_write_user_settings | Менять настройки почты пользователей |
| directory:read_departments | Чтение информации о подразделениях |
| directory:write_departments | Запись информации о подразделениях |
- нажмите кнопку "Создать приложение"
- закройте окно с предложением пройти верификацию через Госуслуги
- в новом окне "Мои приложения" отображаются свойства созданного приложения. Найдите раздел с ID созданного приложения и скопируйте строку из поля "ClientID":
- в текстовом редакторе создайте строку вида
https://oauth.yandex.ru/authorize?response_type=token&client_id=<ID приложения>и вставьте скопированное значение ClientID из предыдущего шага вместо<ID приложения>
Вставьте получившуюся ссылку в браузер и нажмите "Enter".
- в окне браузера появляется запрос на подтверждение прав токена. Подтверждение должно выполняться с аккаунта администратора организации (если это сделать от имени обычного пользователя, токен не получит запрашиваемые права из-за отсутствия необходимых разрешений у данного пользовательского аккаунта). Нажмите "Войти как" и получите необходимый токен доступа.
Warning
Скопируйте токен и сохраните его в безопасном месте.
- Получите ID организации в Yandex 360. Для этого перейдите в консоль администрирования и в левом нижнем углу интерфейса будет необходимый номер.
- Запишите полученные на предыдущем шаге OAuth токен и Org ID в соответствующие переменные в файле
.envв том же каталоге, что и сами скрипты.
Подробные инструкции по получению токенов см. в документации Yandex 360.
- SCIM токен: валидируется запросом к
/scim/v2/Users; при ошибке SCIM-функции пропускаются, остальные операции продолжают работу. - OAuth токен: проверяется — валидность, принадлежность к
ORG_ID_ARGи наличие необходимых scopes из таблицы разрешений. При критической ошибке выполнение прекращается, при нехватке прав выводится предупреждение и работа продолжается с ограничениями.
- Консоль: Сообщения уровня INFO
- Файл:
360_text_admin_console.logс ротацией (10 МБ, 5 копий) - Уровень: DEBUG для файла, INFO для консоли
# 1. Создать файл с данными пользователей
python 360_text_admin_console.py
# Выбрать: 1 -> 2
# 2. Отредактировать users.csv
# 3. Применить изменения
python 360_text_admin_console.py
# Выбрать: 1 -> 3python 360_text_admin_console.py
# Выбрать: 3 -> 3 -> 1 (установить целевую группу)
# Затем: 3 -> 3 -> 2 (добавить пользователей)python 360_text_admin_console.py
# Выбрать: 5 -> 1
# Настройки будут сохранены в файл users_2fa_output.csvpython 360_text_admin_console.py
# Выбрать: 5 -> 4 (выход одного пользователя)
# Или: 5 -> 5 (массовый выход из файла)
# Или: 5 -> 6 (выход пользователей с проблемной 2FA)# 1. Настроить шаблон формирования displayName
python 360_text_admin_console.py
# Выбрать: 6 -> 1
# Ввести шаблон, например: Ф И1. О1.
# 2. Выгрузить текущие значения displayName
python 360_text_admin_console.py
# Выбрать: 6 -> 2
# Выбрать пользователей для выгрузки
# Файл dn.csv будет создан с текущими и предлагаемыми значениями
# 3. Отредактировать файл dn.csv (при необходимости изменить колонку new_dn)
# 4. Протестировать изменения (установить DRY_RUN=true в .env файле)
python 360_text_admin_console.py
# Выбрать: 6 -> 3
# 5. Применить изменения (установить DRY_RUN=false в .env файле)
python 360_text_admin_console.py
# Выбрать: 6 -> 3python 360_text_admin_console.py
# Выбрать: 1 -> 7
# Указать шаблоны для поиска и удаления email адресов (например: *@olddomain.com, *.legacy.org, sales@*)Перед подтверждением операции утилита позволяет выбрать конкретных пользователей (поиск, фильтрация из CSV, ручной ввод) и прогнать проверку в режиме предпросмотра.
- Доменные выражения:
domain.com,sub.domain.com,*.domain.com - Локальная часть:
user@*,*@domain.com,sale*@legacy.org - Комбинированные выражения:
info@legacy.*,*@*.deprecated.net,*@mail.*.corp.ru
Символ * заменяет любое количество символов (включая отсутствие символов) и может использоваться как в локальной части, так и в доменах. Вводите несколько выражений через пробел, запятую или точку с запятой — каждое из них проверяется независимо и регистр при сравнении не учитывается. Допустимые символы: латиница, цифры, точки, дефисы, @ и *.
# Установить DRY_RUN=true в .env файле
python 360_text_admin_console.py
# Выполнить любую операцию - изменения будут показаны в логах, но не применены- Поддерживаются только пользователи с ID, начинающимся с "113"
- SCIM API требует отдельного токена и настройки
- Некоторые операции требуют административных прав
- Массовые операции могут занимать значительное время
- Рекомендуется остановить службу SCIM перед изменением userName
- НОВОЕ: Режим
DRY_RUNпозволяет тестировать операции без применения изменений
- Автоматические повторы запросов (до 3 попыток)
- Детальное логирование ошибок
- Валидация входных данных
- Проверка токенов при запуске
- Python 3.7+
- Библиотеки из
requirements.txt - Действующие токены Yandex 360 API
- Права администратора организации
Для получения поддержки обратитесь к документации Yandex 360 API или создайте issue в репозитории проекта.



