Exchange 2010 Powershell 命令?

use*_*503 5 powershell exchange-2010 windows-server-2008-r2

  1. 我想知道是否有人知道 Exchange 2010 的 PowerShell 命令,该命令列出了特定邮箱无权访问的邮箱和/或用户。
    我们有一个系统帐户,我们需要授予对大多数(但不是全部)用户邮箱的完全访问权限。我们希望每个月运行一个命令,告诉我们该帐户对哪些用户没有完全权限,以便我们可以在必要时更正并导出到 csv。

  2. 我想要一个列出用户以及谁对每个用户具有完全权限的命令。我发现了这一点,但它返回的结果似乎并不完全准确(当我将 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
    
    Run Code Online (Sandbox Code Playgroud)

Aug*_*ust 2

#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)"
    }
}
Run Code Online (Sandbox Code Playgroud)

#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