Получите все планы Планировщика в 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 и, возможно, переместить планы в разные группы или к другим пользователям.
Я все еще не совсем понимаю, почему проблема с разрешениями продолжает возникать при получении планов от других пользователей. Если у вас есть идеи или решения для этого, пожалуйста, дайте мне знать в комментариях ниже.
