Вывести все ящики, к которым есть доступ у определенного пользователя 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

В данном примере видно, что у пользователей 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

В этом примере мы нашли, что у указанного пользователя есть полный доступ к трем ящикам (столбец 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 IdentityFolderNameUser

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago