Как получить список всех общих почтовых ящиков, которые пользователь имеет доступ к Exchange2010 | Командная консоль Exchange или PowerShell?
Get-Mailbox | Get-MailboxPermission -user
Get-Mailbox | Get-MailboxPermission -user | Где {$_.AccessRights -like "отправить как *"}
Get-Mailbox | Get-ADPermission | Где {$ _. ExtendedRights-like "send-as"}
Все вышеперечисленные команды не работают для меня
2 ответа
Наконец-то я начал работать с этим сценарием ниже. Запустите этот сценарий в командной консоли Microsoft Exchange и убедитесь, что перед выполнением сценария в Management Shell все политики назначены.
Пользователь с полным доступом к почтовым ящикам пользователей и общим почтовым ящикам
Get-Mailbox | Get-MailboxPermission -user $user | Где {($ .AccessRights -eq "FullAccess") -and -not ($.User -eq "NT AUTHORITY \ SELF")} | Идентификация таблицы формата, пользователь
Пользователь с доступом "Отправить как"
Get-Mailbox | Get-ADPermission -user $user | Где {($ .ExtendedRights -eq "* send-as *") -and -not ($.User -eq "NT AUTHORITY \ SELF")} | Идентификация таблицы формата, пользователь
Я бы сделал что-то подобное. Он выведет все общие почтовые ящики и пользователей, которые имеют к нему доступ. Для каждого пользователя отображаются права доступа к почтовому ящику. В зависимости от количества пользователей и общих почтовых ящиков обработка может занять некоторое время.
(Из-за [ordered]
, вам нужна версия Powershell 3 или выше. Чтобы использовать его в Powershell 2, удалите [ordered]
, Порядок отображения свойств не гарантируется.)
function Get-AllMailboxPermissions {
$allMailboxes = Get-Mailbox -ResultSize Unlimited | Sort-Object Identity
if ($allMailboxes.Count -eq 0) {
Write-Warning "No mailboxes found."
return
}
foreach ($box in $allMailboxes) {
$perms = $box | Get-MailboxPermission |
Where-Object { $_.IsInherited -eq $false -and $_.User.ToString() -ne "NT AUTHORITY\SELF" -and $_.User.ToString() -notmatch '^S-1-' } |
Sort-Object User
foreach ($prm in $perms) {
$user = Get-Recipient -Identity $($prm.User.ToString()) -ErrorAction SilentlyContinue
# skip inactive (deleted) users
if ($user -and $user.DisplayName) {
$props = [ordered]@{
"Mailbox" = "$($box.Identity)"
"User" = $user.DisplayName
"AccessRights" = "$($prm.AccessRights -join ', ')"
}
New-Object PsObject -Property $props
}
}
}
}
Возможно, вы захотите сохранить эту информацию в CSV-файл. В этом случае вызовите функцию следующим образом:
Get-AllMailboxPermissions | Export-Csv -Path '<PATH-TO-OUTPUT.CSV>' -NoTypeInformation -Encoding UTF8 -Force
Совет: если вы хотите иметь возможность открыть CSV-файл в Excel, дважды щелкнув его на том же компьютере, Export-Csv
Командлет имеет очень полезный переключатель -UseCulture
, При этом разделитель в CSV-файле будет таким же, как ожидает Excel.