Вывести все ящики, к которым есть доступ у определенного пользователя Exchange/Microsoft 365

Вывести все ящики, к которым есть доступ у определенного пользователя Exchange/Microsoft 365

Довольно часто при аудите ящиков в организации Exchange Server или тенанте Microsoft 365 (Exchange Online) администратору нужно найти все ящики, к которым есть доступ у определенного пользователя. В этой статье мы рассмотрим несколько PowerShell скриптов для получения отчетов по доступам к ящикам и папкам в ящиках Exchange.

Найти ящики Exchange/Microsoft 365, к которым есть доступ у определенного пользователя

Для получения списка разрешений, назначенных на ящик используется командлет Get-MailboxPermission.

Откройте консоль PowerShell и подключитесь удаленно к своему on-prem Exchange Server или тенанту Microsoft 365 (Exchange Online).

Следующая команда выведет список пользователей, у которых есть права на указанный ящик:

get-mailboxpermission -identity [email protected] |ft -AutoSize

информация о правах доступа к ящику exchnage get-mailboxpermission

В данном примере видно, что у пользователей GradyA и HenriettaM есть полные права (
Full Access
) на ящик указанного пользователя. Данные права установлены вручную (не наследованы), т.к. IsInherited = False.

Можно вывести полный отчет по назначенным правам на ящики и представить его в виде удобной таблицы Out-GridView

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne "NT AUTHORITYSELF" -and $_.IsInherited -eq $false} | Out-GridView

С помощью следующей команды PowerShell вы можете найти и вывести список ящиков в вашей организации Exchange или тенанте, на которых у определенного пользователя есть полные права:

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission -User "HenriettaM" | ft User,Identity,AccessRights

найти почтовые ящики exchange и office 365 на которые дан доступ определенному пользователу

В этом примере мы нашли, что у указанного пользователя есть полный доступ к трем ящикам (столбец Identity).

В Microsoft 365 можно использовать новые командлеты модуля Exchange Online PowerShell v2 (EXO V2) для получения такого списка:

Get-EXOMailbox -ResultSize Unlimited | Get-EXOMailboxPermission -Identity $_.Identity | Where-Object {$_.User -eq "[email protected]"}

Вы можете использовать фильтры по типу ящика. Это ускорит поиск. Для этого добавьте к команде Get-EXOMailbox или Get-Mailbox параметр – RecipientTypeDetails с типом ящиков, по которым выполнять поиск:

  • DiscoveryMailbox
  • EquipmentMailbox
  • GroupMailbox
  • LegacyMailbox
  • LinkedMailbox
  • LinkedRoomMailbox
  • RoomMailbox
  • SchedulingMailbox
  • SharedMailbox
  • TeamMailbox
  • UserMailbox

Например:

Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails SharedMailbox| Get-MailboxPermission -User "HenriettaM" | ft User,Identity,AccessRights

Найти ящики пользователей, на которые у определенного пользователя есть права SenAs:

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited | Get-RecipientPermission -Trustee HenriettaM

Также можно найти ящики с правами Send on behalf:

Get-Mailbox | ? {$_.GrantSendOnBehalfTo -match "HenriettaM"}

Вы можете использовать аудит для получения информации о всех действиях пользователя в чужих ящиках и логи входов в Azure.

Поиск папок в ящиках, на которые предоставлен доступ пользователю Exchange/Microsoft 365

Кроме назначения прав на весь ящик в Exchange (Microsoft 365) можно предоставить доступ другому пользователя к конкретной папке. Например, только к папке Входящие или к Календарю. При аудите доступа пользователей иногда нужно найти не только ящики с правами FullAccess, но и конкретные папки в ящиках пользователей, на которые назначен доступ другим пользователям.

Вы можете вывести разрешения на конкретную папку с помощью командлета Get-MailboxFolderPermission, а с помощью Get-MailboxFolderStatistics можно получить список папок в указанном ящике.

Следующий PowerShell скрипт проверяет все ящики в вашей организации и выводит папки (включая вложенные), на которые дан доступ определенному пользователю.

В организациях с большим количеством ящиков скрипт может работать медленно, рекомендуем предварительно фильтровать список ящиков или проверять его по частям. Размер ящиков и количество папок в них тоже имеет значение на скорость выполнения скрипта при получении информации о папке через Get-MailboxFolderStatistics.


$usertofind= "*Henrietta Mueller*"
$allpermissions = @()
$MBXs= Get-Mailbox -ResultSize Unlimited
Foreach ($MBX in $MBXs){
$MBXfolders=Get-MailboxFolderStatistics $MBX.PrimarySmtpAddress |select Name
Foreach ($MBXfolder in $MBXfolders){
try {
$folder=$MBX.PrimarySmtpAddress + ":" + $MBXfolder.name
$folderpermessions= Get-MailboxFolderPermission -Identity $folder -ErrorAction Stop | where {($_.user -like $usertofind)}
$allpermissions += $folderpermessions
}
catch {
Continue
}
}
}
$allpermissions | select Identity, FolderName, User,AccessRights

PowerShell скрипт для поиска папок в ящиках Exchange, на которые даны права пользователю

Этот PowerShell скрипт выведет все папки в ящиках других пользователей, на которых дан доступ определённому пользователю. Выводится имя ящика (Identity), имя папки (FolderName) и назначенные разрешения на папку (Editor, Reviewer и т.д.):

В модуле EXOv2 для Microsoft 365 можно использовать новые командлеты
Get-EXOMailbox
,
Get-EXOMailboxFolderPermission
и
Get-EXOMailboxFolderStatistics
.

Для поиска и удаления отдельных писем в ящике используется командлет Search-Mailbox.

Microsoft 365
Вывести все ящики, к которым есть доступ у определенного пользователя Exchange/Microsoft 365