Довольно часто при аудите ящиков в организации 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
В данном примере видно, что у пользователей GradyA и HenriettaM есть полные права (
Full Access
) на ящик указанного пользователя. Данные права установлены вручную (не наследованы), т.к. IsInherited = False.
Можно вывести полный отчет по назначенным правам на ящики и представить его в виде удобной таблицы Out-GridView
Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne "NT AUTHORITY\SELF" -and $_.IsInherited -eq $false} | Out-GridView
С помощью следующей команды PowerShell вы можете найти и вывести список ящиков в вашей организации Exchange или тенанте, на которых у определенного пользователя есть полные права:
Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission -User "HenriettaM" | ft User,Identity,AccessRights
В этом примере мы нашли, что у указанного пользователя есть полный доступ к трем ящикам (столбец 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"}
Поиск папок в ящиках, на которые предоставлен доступ пользователю Exchange/Microsoft 365
Кроме назначения прав на весь ящик в Exchange (Microsoft 365) можно предоставить доступ другому пользователя к конкретной папке. Например, только к папке Входящие или к Календарю. При аудите доступа пользователей иногда нужно найти не только ящики с правами FullAccess, но и конкретные папки в ящиках пользователей, на которые назначен доступ другим пользователям.
Вы можете вывести разрешения на конкретную папку с помощью командлета Get-MailboxFolderPermission, а с помощью Get-MailboxFolderStatistics можно получить список папок в указанном ящике.
Следующий PowerShell скрипт проверяет все ящики в вашей организации и выводит папки (включая вложенные), на которые дан доступ определенному пользователю.
$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 скрипт выведет все папки в ящиках других пользователей, на которых дан доступ определённому пользователю. Выводится имя ящика (Identity), имя папки (FolderName) и назначенные разрешения на папку (Editor, Reviewer и т.д.):
Get-EXOMailbox
,
Get-EXOMailboxFolderPermission
и
Get-EXOMailboxFolderStatistics
.Для поиска и удаления отдельных писем в ящике используется командлет Search-Mailbox.