【问题标题】:Get a list of mailboxes where AD group has permissions获取 AD 组有权限的邮箱列表
【发布时间】:2015-03-04 22:30:30
【问题描述】:

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

我有....

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

但它似乎没有在文件中放任何东西

我做错了什么?

TIA

安迪

【问题讨论】:

  • 你确定 $_.user.tostring() 不输出 domain\UserOrGroup 吗?首先将对象保存在变量中(没有 where 语句),并确保您匹配的字符串是您期望的。此外,将对象输出到这样的文本文件可能无法正常工作(这取决于类)。
  • @FrodeF。输出应该是 domain\UserOrGroup 我刚刚在 Exchange 2010 上检查过
  • 那么你在尝试什么?您说所有组都以相同的 3 字符前缀开头。你试过.. | where {$_.user.tostring() -like "domain\xxx*"} | ... 吗?

标签: powershell exchange-server-2010


【解决方案1】:

我有一种偷偷摸摸的感觉,之后会有更多问题,但部分问题是当邮箱详细信息被传递到 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 将返回满足 Where 块的 True,并且邮箱在管道中传递以进行导出。

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

注意事项

-Append 在 PowerShell 3.0 中可用,而您交换时可能没有。我只能被删除。

假设

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

【讨论】:

  • 我按上述方式运行脚本(更改详细信息以匹配我的环境),但出现关于不允许运行连续管道的错误。
  • @MoriteUK 对不起。将解决这个问题。回报呢?您只想要匹配的邮箱吗?
  • @MoriteUK。请参阅我的更新答案。不需要嵌套where,并进行了一些细微的更改。
【解决方案2】:

这段代码有效,而且这些权限属于哪个邮箱也一目了然:

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() 产生了什么,以便了解我在寻找关于“匹配”布尔逻辑的内容。

【讨论】:

  • 不要重复回答。在大多数情况下,你没有理由。另外我不认为操作只是想要一个匹配组的列表,因为它没有提供有关匹配邮箱的信息
  • 对不起,我是新来这里发帖的,我没有看到在评论中发布可格式化代码的方法。此外,我的代码完全符合他的要求(除了我将它指向一个邮箱进行测试),并且代码确实按照预期的方式工作。如果他想知道更多信息,那么我会在 Out-File 之前在其中添加一个 Select 语句,然后选择要写入文件的内容。
  • 这行得通,并且很清楚这些权限属于哪个邮箱:get-mailbox -resultsize 1000 | foreach{ 写入主机 $_.PrimarySMTPAddress -ForegroundColor Green; $permissions = 获取邮箱权限 $_.PrimarySMTPAddress | ?{$_.User -match "Ryan"} if($permissions){ $permissions | FT -自动尺寸; $_.PrimarySmtpAddress |输出文件 C:\Test.txt -append -noclobber -encoding ascii; $权限 | FT-AutoSize |输出文件 C:\Test.txt -append -noclobber -encoding ascii; } }
猜你喜欢
  • 2013-08-15
  • 2018-02-02
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2014-01-05
  • 2011-11-20
  • 2019-01-09
相关资源
最近更新 更多