获取AD组具有权限的邮箱列表

时间:2015-03-03 15:54:16

标签: powershell exchange-server-2010

我正在尝试获取其权限中列出了AD组的邮箱列表。 我感兴趣的所有AD组都以相同的3个字符开头。

我有......

get-mailbox -resultsize unlimited | Get-MailboxPermission  | where {$_.user.tostring() -like "xxx*"} | out-file $file -append -noclobber -encoding ascii

但它似乎没有在文件中添加任何内容

我做错了什么?

TIA

安迪

2 个答案:

答案 0 :(得分:0)

我有一种偷偷摸摸的感觉,此后会有更多问题,但问题的部分是在传递到cmdlet Get-MailboxPermission时丢失邮箱详细信息。如果您匹配标准稍微提高一点,您的输出将只是匹配但不是哪个邮箱的组。

$file = "c:\temp\test.csv"
$matchPrefix = [regex]::Escape("Ex") # We use escape incase of special charaters in regex. Period would be one to expect.
$regex = "YOURDOMAIN\\$matchPrefix" # Keep those backslashes
Get-Mailbox mc* | ForEach-Object{
    $results = $_ | Get-MailboxPermission | Where-Object{$_.User.ToString() -match $regex}
    If($results){$_}    
} | Select Name,Alias | Export-CSV $file -Append -NoTypeInformation

这将占用每个邮箱,并检查每个邮箱是否存在组/用户。使用$regex我们会检查每个找到的用户/组。如果它们存在,则-match将返回True,满足Where块,并且邮箱将在管道中传递以进行导出。

对于导出,我们只将邮箱名称和别名发送到$file指定的csv文件

<强>注意事项

您在交换时可能没有的PowerShell 3.0中提供了

-Append。我可以被删除。

<强>假设

我假设您只想要与您指定的组前缀匹配的邮箱。如果您希望与其匹配的实际组可以使用一些额外的逻辑。我想知道在我猜之前我的建议是否足够。

答案 1 :(得分:0)

此代码有效,并且还清楚这些权限属于哪个邮箱:

get-mailbox -resultsize 1000 | foreach{
Write-Host $_.PrimarySMTPAddress -ForegroundColor Green;
$permissions = Get-MailboxPermission $_.PrimarySMTPAddress | ?{$_.User -match "Ryan"}
if($permissions){
    $permissions | FT -AutoSize;
    $_.PrimarySmtpAddress | Out-File C:\Test.txt -append -noclobber -encoding ascii; 
    $permissions | FT -AutoSize | Out-File C:\Test.txt -append -noclobber -encoding ascii;
}

}

请注意:我检查了$ _。user.tostring()产生的内容,以便了解我在寻找与“匹配”布尔逻辑相关的内容。