如何获取用户有权访问 Exchange 2010 的所有共享邮箱的列表 | Exchange Management Shell 还是 PowerShell?
How to get a list of all the Shared Mailboxes that a user have access to Exchange2010 | Exchange Management Shell or PowerShell?
Get-Mailbox | Get-MailboxPermission -user
Get-Mailbox | Get-MailboxPermission -user | Where {$_.AccessRights -like "sendas*"}
Get-Mailbox | Get-ADPermission | Where {$_.extendedRights -like "send-as"}
以上所有命令对我都不起作用
我会做这样的事情。它将输出所有共享邮箱和有权访问它的用户。对于每个用户,它显示对邮箱的访问权限。根据用户和共享邮箱的数量,处理可能需要一段时间。
(由于 [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
提示:如果您希望能够在同一台机器上通过双击打开 Excel 中的 csv,Export-Csv
cmdlet 有一个非常有用的开关-UseCulture
。这样,csv 文件中的分隔符将与 Excel 期望的相同。
我终于可以使用下面的这个脚本,运行 Microsoft Exchange 管理中的这个脚本 Shell 确保在 运行 管理中的脚本 运行 之前所有执行策略都被授予 [= =27=]
对用户邮箱和共享邮箱具有完全访问权限的用户
获取邮箱 |获取 MailboxPermission -user $user |其中 {($.AccessRights -eq "FullAccess") -and -not ($.User -eq "NT AUTHORITY\SELF")} |格式-Table 身份,用户
具有代理发送访问权限的用户
获取邮箱 |获取 ADPermission -user $user |其中 {($.ExtendedRights -eq "*send-as*") -and -not ($.User -eq "NT AUTHORITY\SELF")} |格式-Table 身份,用户
Get-Mailbox | Get-MailboxPermission -user
Get-Mailbox | Get-MailboxPermission -user | Where {$_.AccessRights -like "sendas*"}
Get-Mailbox | Get-ADPermission | Where {$_.extendedRights -like "send-as"}
以上所有命令对我都不起作用
我会做这样的事情。它将输出所有共享邮箱和有权访问它的用户。对于每个用户,它显示对邮箱的访问权限。根据用户和共享邮箱的数量,处理可能需要一段时间。
(由于 [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
提示:如果您希望能够在同一台机器上通过双击打开 Excel 中的 csv,Export-Csv
cmdlet 有一个非常有用的开关-UseCulture
。这样,csv 文件中的分隔符将与 Excel 期望的相同。
我终于可以使用下面的这个脚本,运行 Microsoft Exchange 管理中的这个脚本 Shell 确保在 运行 管理中的脚本 运行 之前所有执行策略都被授予 [= =27=]
对用户邮箱和共享邮箱具有完全访问权限的用户
获取邮箱 |获取 MailboxPermission -user $user |其中 {($.AccessRights -eq "FullAccess") -and -not ($.User -eq "NT AUTHORITY\SELF")} |格式-Table 身份,用户
具有代理发送访问权限的用户
获取邮箱 |获取 ADPermission -user $user |其中 {($.ExtendedRights -eq "*send-as*") -and -not ($.User -eq "NT AUTHORITY\SELF")} |格式-Table 身份,用户