Поиск по сайту:

Получите все планы Планировщика в Microsoft 365 с помощью PowerShell


Одна из вещей, которую я действительно скучаю в Microsoft 365, — это обзор всех планов в Planner. Даже с теми различными Центрами администрирования, которые у нас есть, у нас все равно нет возможности просто просматривать все созданные планы в арендаторе или управлять ими.

Но что мы можем сделать, так это использовать PowerShell, чтобы найти все планы в нашем арендаторе. Конечно, было бы здорово, если бы существовал единственный cmdlet для отображения всех планов с их идентификаторами, но, к сожалению, нам сначала нужно получить все группы и пользователей и проверить, есть ли у них один или несколько планов.

В этой статье я покажу вам, как можно получить планы из групп Microsoft 365 или Teams, а также от пользователей. В конце статьи у меня также есть полный скрипт, который получит все планы в вашем арендаторе.

Требования

Чтобы получить планы с помощью PowerShell, мы будем использовать модуль MS Graph. Убедитесь, что у вас установлен этот модуль, или ознакомьтесь с этой статьей о том, как установить необходимые модули.

Мы будем использовать следующие области для подключения, чтобы получить необходимую информацию:

  • User.Read.All
  • Group.Read.All
  • Задачи.Читать

Получение всех планов Microsoft 365 Group

Мы начнем с планов Planner, которые принадлежат группе. Как уже упоминалось, чтобы получить планы, нам сначала нужно получить все группы в нашем арендаторе. Мы можем сделать это с помощью следующей команды:

$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All

Следующий шаг - проверить и получить все планы от группы. Для этого нам понадобится использовать идентификатор группы и командлет Get-MgGroupPlannerPlan. Документация по командлетам Get-MgGroupPlanner* все еще немного недостаточна, но этот командлет, пох кажется, получает то, что нам нужно:

$plans = Get-MgGroupPlannerPlan -GroupId $groupId

Results
Title                Id                           Owner                                CreatedDateTime
-----                --                           -----                                ---------------
Timeline master plan _axwc5sZDkOqLKUM4LjyMZcAAHpp 1d18028d-7a44-4f28-a579-*         13-5-2025 17:34:44
test                 yGsg1WOFh0SX3D9C1ViEmpcAHB3t 1d18028d-7a44-4f28-a579-*         13-5-2025 10:38:45

С извлеченными планами мы можем использовать цикл foreach, чтобы пройтись по каждому из них. Для нашего экспорта я не только хочу знать, к какой группе принадлежит план, но и кто является владельцем группы/плана.

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

Для этого мы воспользуемся командлетом Get-MgGroupOwner, чтобы быстро получить владельца(владельцев) группы:

foreach ($plan in $plans) {
    $owner = Get-MgGroupOwner -GroupId $groupId | Select-Object -ExpandProperty AdditionalProperties
        
    $planDetails += [PSCustomObject]@{
        "Group Id" = $groupId
        "Group Name" = $GroupDisplayName
        "Planner ID" = $plan.id
        "Planner Title" = $plan.title
        "Group Owner" = $owner.displayName
        "Created at" = $plan.createdDateTime
    }
}

Теперь мы можем экспортировать результат в CSV файл или вывести его в виде таблицы.

Получение всех планов планировщика от пользователей

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

Для получения планов пользователя мы должны использовать командлет Get-MgPlannerPlan в сочетании с фильтром:

Get-MgPlannerPlan -filter "owner eq '$UserPrincipalName'"

Теперь это работает только для вашей учетной записи пользователя. Когда вы пытаетесь получить доступ к другому пользователю, вы получите ошибку разрешений. Хотя мы установили правильные области для этой команды.

У нас также есть командлет Get-MgUserPlannerPlan, который позволяет извлекать планы на основе идентификатора пользователя. Этот командлет вернет все планы, в которых пользователь является членом, поэтому это могут быть и групповые планы.

Но снова, когда вы пытаетесь получить планы от другого пользователя, вы получите ту же ошибку разрешения.

Последний вариант, который должен сработать согласно документации, — это использовать разрешения приложений вместо делегированных разрешений для MS Graph. Это включает в себя создание зарегистрированного приложения в Microsoft Entra и назначение разрешения API tasks.read.all.

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

Полный сценарий

Я создаю полный скрипт PowerShell, который получит все планы Microsoft Planner из всех групп в вашем тенанте. Скрипт может экспортировать результаты в файл CSV или просто выводить их непосредственно в консоль.

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

Вы можете найти полный скрипт здесь в моем репозитории на GitHub, как всегда.

Заключение

Было бы здорово, если бы Microsoft придумала более простое решение для просмотра и управления всеми планами Planner в наших арендаторах. Особенно во время миграции или когда пользователь покидает компанию, может быть полезно просмотреть все Planners и, возможно, переместить планы в разные группы или к другим пользователям.

Я все еще не совсем понимаю, почему проблема с разрешениями продолжает возникать при получении планов от других пользователей. Если у вас есть идеи или решения для этого, пожалуйста, дайте мне знать в комментариях ниже.