我想知道是否有人知道 Exchange 2010 的 PowerShell 命令,该命令列出了特定邮箱无权访问的邮箱和/或用户。
我们有一个系统帐户,需要授予对大多数(但不是全部)用户邮箱的完全访问权限。我们希望每月运行一个命令,该命令将告诉我们此帐户对哪些用户没有完全权限,以便我们可以在必要时进行更正并导出到 csv。我想要一个命令来列出用户以及每个用户拥有完全权限的用户。我找到了这个命令,但它返回的结果似乎并不完全准确(当我将 csv 与 EMC 进行比较时,EMC 上的一些帐户将显示其他 3 个用户可以访问他们的邮箱,但 CSV 只报告 1 个用户)。
Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false} | Select Identity,User,@{Name=’Access Rights’;Expression={[string]::join(‘, ‘, $_.AccessRights)}} | Export-Csv -NoTypeInformation mailboxpermissions.csv
答案1
#1 - 我自己写了这个(修订版)。它不是简单的一行代码,因为它在几个嵌套循环中评估每个邮箱上每个权限条目的值。不幸的是,我无法找到进一步简化它的方法(可能是因为我缺乏 powershell 方面的专业知识)。它基本上获取所有邮箱并将它们存储在一个变量中,然后获取每个邮箱的权限,评估每个权限条目是否符合特定条件(邮箱上具有 FullAccess 条目的系统用户)。如果任何权限条目都满足该条件,它会将 $access 变量设置为“True”。在它检查完邮箱上的所有权限条目后,它会查看 $access 变量,如果仍然为 False,它会将邮箱添加到 csv 文件中(但实际上不是 csv,因为文件中每行只有 1 个条目)。
Import-Module C:\Temp\Exchange.psm1
$csv = "C:\Temp\systemuser.csv"
$user = "<system user>"
$mailboxes = Get-Mailbox *
ForEach ($mailbox in $mailboxes) {
$access = "False"
$perms = $mailbox | Get-MailboxPermission
ForEach ($item in $perms) {
if ($item.User -like $user -and $item.AccessRights -like "*FullAccess*") {
$access = "True"
}
}
if ($access -eq "False") {
ac $csv "$($mailbox)"
}
}
#2 - 大部分内容都是我自己写的,但是很难将 AccessRights 属性转换为字符串,以便将其导出到 csv,所以我在 Google 上搜索了一下找到了同一篇文章您使用问题中的脚本找到了它,并且它运行良好。我认为 csv 所说的内容与 EMC 所说的内容之间的差异在于文章中的脚本过滤掉了继承的权限。我在下面对其进行了修改,使其不过滤掉继承的权限,并在输出中包含“IsInherited”属性,以便您可以判断它是否明确。
Get-MailboxPermission * | ? {$_.user -notlike "NT AUTHORITY\SELF"} | Select Identity ,User,@{Name='Access Rights';Expression={[string]::join(', ', $_.AccessRights)}},IsInherited | Export-csv -NoTypeInformation c:\temp\mailboxpermissions.csv
答案2
我在我的系统上测试了该命令,并且它正如您所希望的那样工作。
但是,如果您只与 EMC 中看到的内容进行比较,您可能会期望错误的结果。该命令设置为仅显示非继承权限。EMC 将向您显示继承和非继承(不指定哪个是哪个)。您可能想要做的是在 Powershell 中仅运行这部分代码:
Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false}
并将其与生成的 CSV 进行比较。
或者,你可以运行这个:
Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF”}
它将通过 Powershell 显示继承和非继承的权利,然后将其与您的 CSV 结果进行比较。