Или как обычный тикет привёл к тулзе поверх Microsoft Graph

Иногда в helpdesk прилетают тикеты, которые выглядят максимально безобидно.

«Добавьте меня в групповой чат #N»

Без срочности, без подробностей.
Из полезного - только название чата. По нему можно понять департамент и примерно представить, у кого из сотрудников этот чат вообще существует.

На этом хорошие новости заканчиваются.

«Сейчас сделаем» (нет)

Первое, что делает любой администратор M365 - идёт в админку.

И довольно быстро становится понятно, что:

  • групповых чатов там нет

  • искать их нельзя

  • управлять ими тоже нельзя

Пользователь чат видит, общается в нём каждый день, а администратор - как будто живёт в параллельной реальности, где этого чата не существует.

На этом этапе я полез гуглить - вдруг я что-то упускаю.
Но довольно быстро стало ясно: через стандартный UI это не решается вообще.

Окей, значит только API

Дальше я сделал то, что сейчас делают многие - пошёл спрашивать у ИИ, какие вообще есть варианты.

Ответ оказался ожидаемым:
если админка не умеет - остаётся Microsoft Graph API.

Полез в документацию, и тут возникло двойственное ощущение.

С одной стороны, через Graph можно сделать вообще всё:

  • получить список чатов

  • найти нужный chatId

  • добавить пользователя

  • проверить участников

С другой - всё это:

  • только через API

  • только через приложение в Azure

  • с правильными permissions

  • с токенами

  • и желательно не перепутать delegated и application доступ

Технически решение есть.
Практически - каждый такой тикет превращается в небольшой квест.

Где начинает реально бесить

Один раз сделать это руками - не проблема.
Но когда подобные запросы прилетают регулярно, начинается одно и то же:

  • снова идти в Azure

  • снова проверять права у приложения

  • снова руками собирать запросы

  • снова надеяться, что в этот раз ничего не сломается

В какой-то момент стало очевидно: если я каждый раз делаю одно и то же, значит проблема не в Graph, а в отсутствии нормального инструмента поверх него.

Так и появилась идея SwissKnife - небольшой софтины поверх Microsoft Graph, которую я в итоге выложил на гитхаб:
https://github.com/Nemu-x/SwissKnife-for-MS-Graph

Что в итоге получилось

Идея оказалась максимально простой.

Всё, что нужно сделать - один раз:

  • создать приложение в Azure

  • выдать ему необходимые доступы (они описаны в репозитории)

  • сохранить tenant id, app id и secret

На этом вся возня с Azure заканчивается.

Дальше ты просто заходишь в приложение и работаешь уже не с API и токенами, а с понятными сущностями:

  • учётными записями

  • чатами

  • группами

  • данными OneDrive

Без постоянных походов в портал и без ручной сборки Graph-запросов каждый раз заново.

Про OneDrive - коротко

Отдельная боль - копирование данных OneDrive между пользователями.
Миграции, увольнения, временные замены - сценариев хватает.

Технически это тоже решается через Graph, но на практике каждый раз упирается в:

  • права

  • идентификаторы

  • проверки доступа

В SwissKnife это сведено к одной понятной операции, без необходимости каждый раз вспоминать нужные эндпоинты.

Честно про ограничения

Интерфейс у SwissKnife, прямо скажем, немного топорный.
Это не продукт с дизайнером, а рабочая утилита под конкретные задачи.

Кроме этого:

  • функционал Intune реализован, но не протестирован - просто не было нужных лицензий

  • логов и админской аналитики пока немного

  • доступные действия напрямую зависят от того, что вообще видно в конкретном tenant

Это не коробочное решение и не попытка заменить админку.

Почему я решил выложить проект на гитхаб

SwissKnife появился не потому, что хотелось написать инструмент.
Он появился потому, что одна и та же боль повторялась снова и снова.

В какой-то момент стало понятно, что с этим сталкиваюсь не только я - просто каждый администратор решает проблему по-своему и каждый раз вручную.

Проект выложен на гитхаб в надежде, что:

  • эта боль знакома не только мне

  • инструмент сможет сэкономить кому-то время

  • а если найдутся люди, готовые потестировать или подсказать, куда его можно развивать дальше - будет только лучше

Вместо вывода

Если вы администрируете M365 и регулярно сталкиваетесь с ситуациями, когда:

  • пользователи что-то видят

  • а админка - нет

- скорее всего, вы уже знакомы с Microsoft Graph чуть ближе, чем хотелось бы.

SwissKnife не решает всех проблем, но в некоторых из них позволяет перестать каждый раз изобретать велосипед.